Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia galera.
Coloquei meu site no ar, porem preciso de algo para o usuario preencher um formulario e esta mensagem chegar em algum endereço de email a meu gosto.
O uso da funçao nao é o problema, seus parametros sao simples. Porem achei varias coisas ensinando a configurar o ´php.ini mas nao estou conseguindo.
Uso hospedagem basica da locaweb em linux. Alguem pode me ajudar com um passo a passo ?
Agradeceria muito !
Caro colega. Tem como testar localmente esta funcao ? Estou utilizando o WampServer como servidor local.
Em producao ainda nao testei.
Vou postar minha rotina de envio de email.
$msg = "";
if ($_POST['nome'] == ""){
$msg = "Preencha seu nome!<br>";
}
if ($_POST['email'] == ""){
$msg .= "Preencha seu E-mail!<br>";
}
if ($_POST['assunto'] == ""){
$msg .= "Preencha o assunto!<br>";
}
if ($_POST['msg'] == ""){
$msg .= "Preencha a mensagem a ser enviada!";
}
if ($msg != ""){
echo $msg;
header("Refresh: 2, contato.php");
}else{
$nome = $_POST['nome'];
$assunto = $_POST['assunto'];
$msge = "Nome: " . $_POST['nome'] ."\n" . "E-mail : " . $_POST['email'] . "\n" . "Mensagem : " . $_POST['msg'];
$email = $_POST['email'];
mail("contato@fbgsystems.com","$assunto","$msge","From: $nome : $email \n\n");
echo "Mensagem enviada com sucesso!";
header("Refresh: 2, index.php");
}
Coloquei no ar para testar.
Segue oerro
Warning: Cannot modify header information - headers already sent by (output started at /home/storage/4/ff/c3/fbgsystems/public_html/superior.php:54) in /home/storage/4/ff/c3/fbgsystems/public_html/enviarmsg.php on line 32
Linha em questao > header("Refresh: 2, index.php");
E o email nao foi enviado :(
Não sei se você sabe mas os e-mails estão sofrendo alterações de porta de saida de e-mail então se te ajuda segue o cod esse codigo foi disponibilizado na locaweb pois tive problemas no envio dos meus forms
<?php
if(PHP_OS == "Linux") $quebra_linha = "\n"; //Se for Linux
elseif(PHP_OS == "WINNT") $quebra_linha = "\r\n"; // Se for Windows
else die("Este script nao esta preparado para funcionar com o sistema operacional de seu servidor");
$emaildestinatario = '';
$assunto = 'Mensagem enviada via site';
$mensagemHTML = '<br>CPF: '.$cpf.
'<br>Nome: '.$nome.
'<br>E-mail: '.$email.
'<br>Cidade: '.$cidade.
'<br>Tel.: ('.$dddTelA.') '.$telA.
'<br>Mensagem: '.$mensagemA.'<br>';
$headers = "MIME-Version: 1.1".$quebra_linha;
$headers .= "Content-type: text/html; charset=iso-8859-1".$quebra_linha;
$headers .= "From: ".$emailsender.$quebra_linha;
$headers .= "Return-Path: " . $emailsender . $quebra_linha;
//echo 'versão 1.1';
include ("smtp.class.php");/ Configuração da classe.e smtp.class.php /
$smtp = new Smtp($host, 587);
$smtp->user = $mail; /usuario do servidor SMTP /
$smtp->pass = $senha; / senha do usuario do servidor SMTP/
$smtp->debug = true; /ativa a autenticacao SMTP /
/ Prepara a mensagem para ser enviada. /
/quem envia/
$from = $mail;
/Para quem vai/
$to = $emaildestinatario;
/ faz o envio da mensagem /
$enviou = $smtp->Send($to, $from, $assunto, $mensagemHTML, "text/html");
?>
vou colocar em outro post a class do smtp
<?
class Smtp{
var $conn;
var $user;
var $pass;
var $debug = true;
/*Construtor da classe.
Passe como parametro o host SMTP e a porta de conexao. */
function Smtp($host, $port){
$this->conn = fsockopen($host, $port, $errno, $errstr, 30);
$this->Put("EHLO $host");
}
/*Metodo para Autenticar
Autentica no server, ja convertendo os dados em base64.*/
function Auth(){
$this->Put("AUTH LOGIN");
$this->Put(base64_encode($this->user));
$this->Put(base64_encode($this->pass));
}
/*Metodo para enviar a msg.
Parametros: 'DE:', 'PARA:', 'ASSUNTO','MENSAGEM' */
function Send($to, $from, $subject, $msg, $content_type = null){
$this->Auth();
$this->Put("MAIL FROM: " . $from);
$this->Put("RCPT TO: " . $to);
$this->Put("DATA");
if(isset($content_type)){
$this->Put($this->toHeader($to, $from, $subject, $content_type));
}
else{
$this->Put($this->toHeader($to, $from, $subject));
}
$this->Put("\n");
$this->Put($msg);
$this->Put(".");
$this->Close();
if(isset($this->conn)){
return true;
}else{
return false;
}
}
/*Metodo Put
Passa valores para a conexao sock aberta no server.*/
function Put($value){
return fputs($this->conn, $value . "\n");
}
/*Funcao toHeader
Prepara e monta o cabecalho da mensagem.
Aceita como parametro 'DE','PARA','ASSUNTO'
e 'CONTENT-TYPE'.
Metodo ja implementado na funcao Send.'*/
function toHeader($to, $from, $subject, $type = "text/plain"){
$header = "Message-Id: <". date('YmdHis').".". md5(microtime()).".". strtoupper($from) ."> \n";
$header .= "From: <" . $from . "> \n";
$header .= "To: <".$to."> \n";
$header .= "Subject: ".$subject." \n";
$header .= "Date: ". date('D, d M Y H:i:s O') ." \n";
$header .= "Content-Type: ". $type . "; charset=iso-8859-1 \n";
return $header;
}
/*Funcao Close
Fechaa a conexao sock apos o envio ser concluido.
Nao e necessario implementar, pois ja esta implementada
na funcao Send*/
function Close(){
$this->Put("QUIT");
if($this->debug == true){
while (!feof ($this->conn)) {
//echo 'Olha: -> '.fgets($this->conn) . "<br>\n";
fgets($this->conn);
}
}
return fclose($this->conn);
}
}
?>Cara, você pode usar a classe PHPMailer, ela não exige essas configurações. Vou deixar aqui um hyperllink de um post que tem os arquivos para download. Só baixar e alterar as configurações.
Link não autorizado removido[/url]
Espero ter ajudado.
Amigo, nao funcionou. Ele demora cerca de 1 minuto para carregar mas nao envia nada.
Segue como configurei
$nome = $_POST['nome'];
$email = $_POST['email'];
$msg = $_POST['msg'];
$fone = $_POST['fone'];
// aqui comeca rotina disponibilizada pelo locaweb
$assunto = "Mensagem enviada pelo site.";
$quebra_linha = "\n";
$mensagemHTML = '<br>Nome: '.$nome.
'<br>E-mail: '.$email.
'<br>Tel.: '.$fone.
'<br>Mensagem: '.$msg.'<br>';
$headers = "MIME-Version: 1.1".$quebra_linha;
$headers .= "Content-type: text/html; charset=iso-8859-1".$quebra_linha;
$headers .= "From: ".$email.$quebra_linha;
$headers .= "Return-Path: " . $emailsender . $quebra_linha;
include ("smtp.class.php");
$host = "smtp.gmail.com"; /host do servidor SMTP /
$mail = "meuemail@gmail.com";//o endereço de e-mail deve ser válido, do dominio.
$senha = "XXXXXXXXXXXXXXXX";//senha do e-mail
/ Configuração da classe.e smtp.class.php /
$smtp = new Smtp($host, 587);
$smtp->user = $mail; /usuario do servidor SMTP /
$smtp->pass = $senha; / senha do usuario do servidor SMTP/
$smtp->debug = true; /ativa a autenticacao SMTP /
/ Prepara a mensagem para ser enviada. /
/quem envia/
$from = $email;
/Para quem vai/
$to = "meuemail@gmail.com";
/ faz o envio da mensagem /
$enviou = $smtp->Send($to, $from, $assunto, $mensagemHTML, "text/html");
smtp gmail ele não funciona, não sei pq, mas se você colocar o smtp de um site com dominio proprio ele funciona normalmente(pelo menos espero).
pois ele fica alocado no seu servidor por exemplo smtp."meudominio".com.br
emeus contato@meudominio.com.br
e a senha é para ele funcionar
estou utilizando o codigo em todos os sites que desenvolvo e está funcionando normalmente sendo que a maioria está nos servers da locaweb.
vou ver até o que o outro codigo postado aqui para ver se é melhor.
flw
Obrigado Zezinho. Acabei de fazer funcionar utilizando um email do meu dominio.
Agradeço a todos que tentaram ajudar !
Meu amigo bom dia.
Aqui na empresa onde trabalho, entre vários servidores que temos, um é Locaweb e realmente não precisamos configurar nada para utilizar o email. Porém, nós nunca utilizamos a função mail e sim a classe Phpmailer que tem o mesmo objetivo mas com eficiência comprovadamente maior.
Se sua função esta apresentando algum erro, poste o mesmo aqui para que possamos analisar.
Grande Abraço.