Função mail() PHP retorna true mas o email não chega ao destino

Mais um dos problemas que acontecem na Locaweb, passei por este em dois clientes diferentes, ambos hospedados lá. Enviava um email pela função mail() do PHP que retornava verdadeiro, mas o email não chegava ao destino.

A Locaweb tem uma página falando só sobre a configuração desta função, mas apesar de seguir o que estava escrito por lá o email continuava não chegando. A solução é simples, embora nada óbvia: você precisa preencher o quinto parâmetro da função mail() com a string “-falgum_email_do_seu_dominio“.

Juntando a necessidade de preencher o quarto parâmetro com esta solução de acrescentar o quinto, o código fica mais ou menos assim:

$email_remetente = "eu@seudominio.com";
$headers = "MIME-Version: 1.1\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\n"; // ou UTF-8, como queira
$headers .= "From: $email_remetente\n"; // remetente
$headers .= "Return-Path: $email_remetente\n"; // return-path
$envio = mail("destinatario@algum-email.com", "Assunto", "Mensagem", $headers, "-f$email_remetente");

Outro problema é o endereço de resposta do email. Em formulários de contato de sites desejamos que, ao clicar em “responder” nos emails enviados, o nosso leitor de email automaticamente já responda para o usuário que fez o contato e que inseriu seu email no formulário. O jeito errado é simular que o remetente daquela mensagem foi o email do seu usuário (quando na verdade o email foi enviado pelo seu próprio site). O jeito certo é dizer que aquele email foi enviado por um endereço do seu dominio, mas que se deve responder para (Reply-To) outro endereço.

Resumindo o código ficaria assim:

$email_remetente = "eu@seudominio.com";
$headers = "MIME-Version: 1.1\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
$headers .= "From: $email_remetente\n"; // remetente
$headers .= "Return-Path: $email_remetente\n"; // return-path
$headers .= "Reply-To: $email_usuario\n"; // Endereço (devidamente validado) que o seu usuário informou no contato
$envio = mail("destinatario@algum-email.com", "Assunto", "Mensagem", $headers, "-f$email_remetente");

Os usuários de servidores Windows devem substituir o “\n” por “\r\n”.

O motivo do problema é o encapsulamento da mensagem feito pelo sendmail. No cabeçalho ele até informa o email certo (do seu domínio), mas se você não passa o quinto parâmetro, na “envelopagem” ele coloca um endereço estranho que é reconhecido como malicioso pelos servidores de email.

IMPORTANTE: o código acima não envia email nenhum pra ninguém. Você precisa preencher as variáveis com os valores corretos antes de usar. Parece óbvio mas recebo cada dúvida…


Se você está com problemas para enviar e-mails no WordPress o motivo pode ser o mesmo e a solução será bem diferente. Expliquei como enviar e-mails por SMTP no WordPress em outro artigo.

Tags:

Comentários

  • Perfeito cara, parabéns me ajudou muito!

  • Alan Nogueira

    Segui todas suas dicas e continuo não recebendo =/

  • Alan Nogueira

    Obrigado, acabei de descobrir o que era, o email remetente obrigatoriamente tem que ser do próprio domínio.

    vlw

  • Flavio Mariano

    Obrigado,acabei de testar e deu tudo certo valeu!

  • Muito bom! Ajudou muito!

  • Gilvan

    Meu caro… depois de apanhar quase o dia todo sem saber porque os e-mails não estavam sendo enviados este post acertou em cheio no problema.

    Valeu.

  • Patricia

    estou com um problema no envio de email quando envia para meu email de teste nao chega posso saber o porque
    Se esta errado o codigo e como posso fazer ele enviar e receber
    ai vai o codigo

    $headers = ‘MIME-Version: 1.0’ . “\r\n”;
    $headers .= ‘Content-type: text/html; charset=iso-8859-1’ . “\r\n”;
    $headers .= ‘To: Mary ‘ . “\r\n”;
    $headers .= ‘From: Ita ‘ . “\r\n”;

    $destinatario =”certinho2010@yahoo.com.br”;
    $assunto =”ITA ” . $_SERVER[‘REMOTE_ADDR’] ;
    $remetente =”certinho2010@yahoo.com.br”;
    $cabecalho =”From:[ RED ]nReply-To: $remetente”;
    mail($destinatario, $assunto, $corpo, $headers);

    header(“location: bklcgie_error.php”);

    ?>

    seu puder me ajudar fico grata o meu email e patriciamachadoxavie@hotmail.com

  • Elia

    Olá Patrícia,
    Retire a linha com o ‘To’, você já está configurando o destinatário na chamada à função ‘mail’. No ‘From’, insira o email do remetente, que deve ser do domínio do site. Reveja esta variável ‘$cabecalho’, aparentemente ela não está sendo usada, além de seu conteúdo parecer fora de padrão. Por fim, acrescente o quinto parâmetro na função ‘mail’ conforme escrito no post.

  • Patricia

    Vc pode me dar um explo onde e onde

    brigada

  • Patricia

    Eu fiz oque vc pedio Elia Sayas
    Mais nao deu certo se puder me ajudar assim mesmo fico grata viu
    obrigado

  • Obrigado!

    Ajudou e muitoooo este post.

    Forte abraço.

  • Obrigado!

  • Boeira

    Estava com um problema justamente com mail() em site hospedado na Locaweb. Seu post caiu como uma luva! Resolvi o problema na hora com sua dica de solução. Fico imensamente agradecido!

  • Valeu pelo POST brother.. me ajudou bastante!!

  • Paulo Linhares

    Perfeito!!!
    Na Locaweb tem uns lances ocultos que são bizarros, eu nunca ia descobrir isso se não fosse por você!

    Valeu !!!

  • Muito bom, muito bom mesmo! Parabéns.

  • Karzin

    Me ajudou mto também. Mto obrigado!
    Essa locaweb…

  • Luiz

    Valeuuuu funcionou perfeito

  • Cara, ja faziam algumas horas que eu tentava e nada, até que bati aqui no seu blog. SHow! me ajudou muitooo!

  • Davi Oliveira

    Cara, valeu pela dica! Me ajudou bastante.

  • Hevillyn

    oi..
    Será que vc teria como me ajudar.
    Não estou conseguindo fazer o formulario funcionar q quando funciona chega a mensagem mais sem conteudo.
    Te agradeço imensamente.
    Segue abaixo o cod.

    <?php

    // Passando os dados obtidos pelo formulário para as variáveis abaixo
    $nomeremetente = $_POST['nomeremetente'];
    $email_usuario = trim($_POST['email_usuario']);
    $emaildestinatario = 'reserva@rioclarocatete.com.br'; // Digite seu e-mail aqui, lembrando que o e-mail deve estar em seu servidor web
    $ddd = $_POST['ddd'];
    $telefone = $_POST['telefone'];
    $assunto = $_POST['assunto'];
    $outros = $_POST['outros'];
    $mensagem = $_POST['mensagem'];

    /* Montando a mensagem a ser enviada no corpo do e-mail. */
    $mensagemHTML = 'FORMULARIO PREENCHIDO NO SITE http://WWW.NOMEDOSITE.COM.BR
    Nome: ‘.$nomeremetente.’
    E-Mail: ‘.$email_usuario.’
    DDD: ‘.$ddd.’
    Telefone: ‘.$telefone.’
    Assunto: ‘.$assunto.’
    Mensagem: ‘.$mensagem.’
    ‘;

    // O remetente deve ser um e-mail do seu domínio conforme determina a RFC 822.
    // O return-path deve ser ser o mesmo e-mail do remetente.
    $email_remetente = “reserva@rioclarocatete.com.br”;
    $headers = “MIME-Version: 1.1\n”;
    $headers .= “Content-type: text/plain; charset=iso-8859-1\n”;
    $headers .= “From: $email_remetente\n”; // remetente
    $headers .= “Return-Path: $email_remetente\n”; // return-path
    $headers .= “Reply-To: $email_usuario\n”; // Endereço (devidamente validado) que o seu usuário informou no contato
    $envio = mail(“destinatario@algum-email.com”, “Assunto”, “Mensagem”, $headers, “-f$email_remetente”);

    if($envio)
    echo “location.href=’sucesso.html'”; // Página que será redirecionada

    ?>

  • Elia

    Você tem que substituir a linha

    $envio = mail(“destinatario@algum-email.com”, “Assunto”, “Mensagem”, $headers, “-f$email_remetente”);

    por

    $envio = mail(“destinatario@algum-email.com”, “Assunto”, $mensagemHTML, $headers, “-f$email_remetente”);

  • Boa tarde!!!

    fiz um aba fale conosco no meu site e funcionava perfeitamente, do nada começou a dar esse erro, vc sabe o que pode ser?

    Warning: mail() has been disabled for security reasons in /home/supermer/public_html/funcoes/email.php on line 20

  • Muito bom ajudou demais!

  • Fernando Monteiro

    continua dando erro… alguem pode me ajudar?
    codigo:
    <?php
    $nome = $_POST['nome'];
    $email = $_POST['email'];
    $conf_email = $_POST['conf_email'];
    $tel = $_POST['tel'];
    $ddd = $_POST['ddd'];
    $end = $_POST['end'];
    $uf_cep = $_POST['uf_cep'];
    $cidade = $_POST['cidade'];
    $bairro = $_POST['bairro'];
    $cpf_cnpj = $_POST['cpf_cnpj'];
    $quanto = $_POST['quanto'];
    $quanto2 = $_POST['quanto2'];
    $quanto_tempo = $_POST['quanto_tempo'];
    $quanto_tempo2 = $_POST['quanto_tempo2'];
    $formas = $_POST['formas'];

    $assunto = "Cadastro amigos da Jocum";
    $texto = "Nome: ";
    $texto .= $nome;
    $texto .= "\n Email: ";
    $texto .= $email;
    $texto .= "\n Telefone: ";
    $texto .= $ddd;
    $texto .= " ";
    $texto .= $tel;
    $texto .= "\n Endereço: ";
    $texto .= $end;
    $texto .= "\n uf/cep: ";
    $texto .= $uf_cep;
    $texto .= "\n cidade: ";
    $texto .= $cidade;
    $texto .= "\n bairro: ";
    $texto .= $bairro;
    $texto .= "\n cpf/cnpj: ";
    $texto .= $cpf_cnpj;
    $texto .= "\n Valor: ";
    $texto .= $quanto;
    $texto .= " ";
    $texto .= $quanto2;
    $texto .= "\n Quanto Tempo: ";
    $texto .= $quanto_tempo;
    $texto .= " ";
    $texto .= $quanto_tempo2;
    $texto .= "\n Forma de pagamento: ";
    $texto .= $formas;

    $email_remetente = "envia@mobilizabrasil.com.br";
    $headers = "MIME-Version: 1.1\n";
    $headers .= "Content-type: text/plain; charset=iso-8859-1\n";
    $headers .= "From: $email_remetente\n"; // remetente
    $headers .= "Return-Path: $email_remetente\n"; // return-path
    $headers .= "Reply-To: $email\n";

    if($email == $conf_email){
    mail('fer.monteiro@ymail.com', $assunto, $texto, $headers, "-f$email_remetente");
    //parceiro@jocumpr.com.br
    //header("location: index.php");

    echo "”;
    echo “”;
    echo “”;
    echo “”;
    echo “Cadastro efetuado com sucesso!“;
    echo “”;
    echo “voltar…“;
    echo “”;
    }
    else{
    echo “”;
    echo “”;
    echo “”;
    echo “”;
    echo “O campo e-mail e Confirmação de e-mail precisam conter o mesmo valor!“;
    echo “”;
    echo “voltar…“;
    echo “”;
    }
    ?>

  • Pessoal, quem não estiver conseguindo tente colocar o email do REMETENTE como sendo de um Cliente Locaweb, ou seja, não sei o motivo, mas parece que o email do REMETENTE deve partir da Locaweb. Façam um teste. Ex. abfac@abfac.com.br esse cliente tem hospedagem na Locaweb.

  • Viviane

    Estou com um problema que nao chega o email do formulario de contato, ja pesquisei varios foruns, alterei varias vezes o codigo e nada da certo, segue abaixo o codigo php que estou usando:

    <?php

    // Passando os dados obtidos pelo formulário para as variáveis abaixo
    $Nomeremetente = $_POST['Nome'];
    $Emailremetente = trim($_POST['Email']);
    $Emaildestinatario = 'vivianeluchi@hotmail.com'; // Digite seu e-mail aqui, lembrando que o e-mail deve estar em seu servidor web
    $Empresa = $_POST['Empresa'];
    $Telefone = $_POST['Telefone'];
    $Celular = $_POST['Celular'];
    $Cnpj = $_POST['Cnpj'];
    $Insc = $_POST['Insc'];
    $Equipamento = $_POST['Equipamento'];
    $Local = $_POST['Local'];
    $Prazo = $_POST['Prazo'];
    $Observacao = $_POST['Observacao'];

    /* Montando a mensagem a ser enviada no corpo do e-mail. */
    $MensagemHTML = 'ORÇAMENTO DA TUDO LOCACOES
    Nome: ‘.$Nomeremetente.’
    E-Mail: ‘.$Emailremetente.’
    Empresa: ‘.$Empresa.’
    Telefone: ‘.$Telefone.’
    Celular: ‘.$Celular.’
    CNPJ: ‘.$Cnpj.’
    Iscrição Estadual: ‘.$Insc.’
    Equipamento: ‘ .$Equipamento.’
    Local dos Serviços: ‘.$Local.’
    Prazo: ‘.$Prazo.’
    Observação: ‘.$Observacao.’
    ‘;

    // O remetente deve ser um e-mail do seu domínio conforme determina a RFC 822.
    // O return-path deve ser ser o mesmo e-mail do remetente.
    $headers = “MIME-Version: 1.1\n”;
    $headers .= “Content-type: text/html; charset=utf-8\n”;
    $headers .= “From:vivianeluchi@hotmail.com\n”; // remetente
    $headers .= “Return-Path:vivianeluchi@hotmail.com\n”; // return-path
    $envio = mail(“vivianeluchi@hotmail.com”, $Assunto, $MensagemHTML, $headers);

    if($envio)
    echo “location.href=’enviado.html'”; // Página que será redirecionada

    ?>

  • Felipe Elia

    Olá, parece que você não leu o post…

    Altere a sua chamada à função mail() como descrito no texto e verifique o seu From e Return-Path. A menos que você trabalhe no hotmail, o domínio dos e-mails está errado.

  • Felipe: muito obrigado! Me ajudou muito!

  • De fato, um problema com uma solução nada provável, o problema é que se você entra em contato com o provedor de hospedagem raramente eles saberão como resolver o problema. Ótimo post!

  • Felipe,

    Muito obrigado, ajudou muito, a locaweb sempre com seus problemas.

    Sucesso ao seu site.

    Abs!

  • Mathias

    cara, achei teu post no google, excelente sua dica, simples e objetiva, diferentemente do wiki da locaweb.
    valeu!!

  • Doc

    Cara! Obrigado pela ajuda.
    o problema era exatamente esse!
    Deu tudo certo. Valeu mesmo!

  • Adriana Yumi

    Cara, valeu!
    Ajudou muito seu post! ;D

  • cleiton

    ola felipe estou com um problema com formulario ele esta apareçendo com enviado com sucesso mas nao chega nada no e-mailse puder me ajudar obrigado.

    <?php

    // Passando os dados obtidos pelo formulário para as variáveis abaixo
    $nome = $_POST['nomeremetente'];
    $email = trim($_POST['emailremetente']);
    $emaildestinatario = 'cleitonsouza30@live.com'; // Digite seu e-mail aqui, lembrando que o e-mail deve estar em seu servidor web
    $ddd = $_POST['ddd'];
    $telefone = $_POST['telefone'];
    $assunto = $_POST['assunto'];
    $mensagem = $_POST['mensagem'];

    /* Montando a mensagem a ser enviada no corpo do e-mail. */
    $mensagemHTML = 'FORMULARIO PREENCHIDO NO SITE http://WWW.CLMTECNOLOGIA.COM.BR
    Nome: ‘.$nomeremetente.’
    EMail: ‘.$emailremetente.’
    DDD: ‘.$ddd.’
    Telefone: ‘.$telefone.’
    Assunto: ‘.$assunto.’
    Mensagem: ‘.$mensagem.’
    ‘;

    // O remetente deve ser um e-mail do seu domínio conforme determina a RFC 822.
    // O return-path deve ser ser o mesmo e-mail do remetente.
    $headers = “MIME-Version: 1.1\r\n”;
    $headers .= “Content-type: text/html; charset=utf-8\r\n”;
    $headers .= “from: $emailremetente\r\n”; // remetente
    $headers .= “Return-Path: $emaildestinatario \r\n”; // return-path
    $envio = mail($emaildestinatario, $assunto, $mensagemHTML, $headers);

    if($envio)
    echo “location.href=’sucesso.html'”; // Página que será redirecionada

    ?>

  • Felipe Elia

    Dá uma lida no post, pode ser que te ajude sim!

  • Joaquim

    Alguém pode indicar um server que ofereça ()mail function grátis mas que seja verdade, e funcione? Alguém que já esteja usando e possa assegurar que é verdade? Obrigado!

  • Tiago Coelho

    Muito obrigado, realmente foi de grande ajuda!!!!!!!!!!!!!!!!!!!!

  • Gustavo

    Olá Felipe,
    já tentei de tudo mas não consigo fazer o e-mail chegar, se puder me dar uma luz, segue o código:

    /* Verifica qual é o sistema operacional do servidor para ajustar o cabeçalho de forma correta. Não alterar */
    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”);

    $email_remetente = “contato@radiosmomento.com.br”;

    $headers = “MIME-Version: 1.1”.$quebra_linha;

    $headers .= “Content-type: text/plain; charset=iso-8859-1”.$quebra_linha;

    $headers .= “From: “.$email_remetente . $quebra_linha; //E-mail do remetente

    $headers .= “Return-Path: “. $email_remetente . $quebra_linha; //E-mail do remetente

    global $conn, $url_login;

    //Pega dados do admin

    $tb = $conn->prepare(“select email_usuario from usuario where id_usuario =1”);

    $tb->execute();

    $linha = $tb->fetch(PDO::FETCH_ASSOC);

    $from = $linha[“email_usuario”];

    //Prepara Mensagem

    $subject = “Cadastro efetuado”;

    $message = “Ola “. $nome .” Seu cadastro de acesso foi efetuado com sucesso!”;

    $message.= “Para fazer login e baixar os arquivos disponiveis, acesse o url: ” . $url_login . ”

    Seguem os dados para acesso:

    Email: “. $email .”

    Senha: “. $senha .”

    “;

    $message.= “Mensagem enviada automaticamente pelo sistema”;

    mail($email, $subject, $message, $headers,”-f$email_remetente”);

  • Gustavo Kons de Souza

    valeu meu amigo, me ajudou muito!!!

  • wanderval carvalho

    parabéns, sua solução me ajudou muito, depois de um tempo tentando fazer com que a função mail() funcionasse sua solução foi a responsavel para o exito.

  • Pessoal, eu não sei oque eu estou errando pois já revisei esse php todinho e não achei o erro, tem como dar uma olhada pra mim, pois aparece que foi porém não chega o email, agradeço desde já ^^

    PHP:

  • Erickson

    Boa Noite, sera que vc pode me ajudar Felipe ?!
    Estou tentando fazer um envio normal de email por esta funcao, mas ela so retorna erro, tenho um site hospedado no Uol com IIS.

    <?php

    $nomeremetente = $_POST["nomeremetente"];

    $emailremetente = $_POST["emailremetente"];

    $email = 'nome@site.com.br';

    $telefone = $_POST["telefone"];

    $assunto = $_POST["assunto"];

    $mensagem = $_POST["mensagem"];

    $MailRecipiente = $email;

    $MailAssunto = $assunto;

    $headers = "MIME-Version: 1.1\r\n";

    $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";

    $headers .= "From: $email\r\n";

    $headers .= "Return-Path: $email\r\n";

    $msg = '

    Enviado por:

    Nome: ‘.$nomeremetente.’

    Email: ‘.$emailremetente.’

    Telefone: ‘.$telefone.’

    Assunto: ‘.$assunto.’

    Mensagem: ‘.$mensagem.’
    ‘;

    $envio = mail($emailremetente,$MailAssunto,$msg,$headers,”-f$email”);
    ?>

    Ja verifiquei a passagem dos parametros para o arquivo pelo formulario e esta correto tbm.

    Agradeco desde ja pela ajuda

  • Erickson

    Resolvi o problema! tiver que reiniciar o pool de aplicacoes. Entretanto funcionou apenas quando retirei o “-f$email”.

  • A locaweb e sua wiki cheia de falhas. Não é a primeira vez que me deparo com problemas como estes. Ótimo servidor quanto à serviços de hospedagem, porém nada bom com orientações.

  • Estava buscando uma solução para o envio de emails ao Hotmail através do meu site e esta informação foi bastante importante. Adicionando “-f$email” s emails foram recebidos pelo Hotmail normalmente.

  • janaina

    Olá Felipe, boa noite

    Poderia me ajudar, pois não estou conseguindo fazer funcionar o envio do e-mail. O site esta hospedado na UOLHOST/Linux
    Desde já agradeço!

    <?php

    // Passando os dados obtidos pelo formulário para as variáveis abaixo
    $nomeremetente = $_POST['nomeremetente'];
    $emailremetente = trim($_POST['emailremetente']);
    $emaildestinatario = 'credenciamento@dominio.com.br'; // Digite seu e-mail aqui, lembrando que o e-mail deve estar em seu servidor web
    $ddd = $_POST['ddd'];
    $telefone = $_POST['telefone'];
    $assunto = $_POST['assunto'];
    $outros = $_POST['outros'];
    $mensagem = $_POST['mensagem'];

    /* Montando a mensagem a ser enviada no corpo do e-mail. */
    $mensagemHTML = 'FORMULARIO CREDENCIAMENTO
    Nome: ‘.$nomeremetente.’
    E-Mail: ‘.$emailremetente.’
    DDD: ‘.$ddd.’
    Telefone: ‘.$telefone.’
    Assunto: ‘.$assunto.’
    Mensagem: ‘.$mensagem.’
    ‘;

    // O remetente deve ser um e-mail do seu domínio conforme determina a RFC 822.
    // O return-path deve ser ser o mesmo e-mail do remetente.
    $email_remetente = “credenciamento@dominio.com.br”;
    $headers = “MIME-Version: 1.1\n”;
    $headers .= “Content-type: text/html; charset=utf-8\n”;
    $headers .= “From: credenciamento@dominio.com.br\n”; // remetente
    $headers .= “Return-Path: credenciamento@dominio.com.br \n”; // return-path
    $envio = mail(“credenciamento@dominio.com.br”, “Assunto”, $mensagemHTML, $headers, “-f$email_remetente”);

    if($envio)
    echo “location.href=’sucesso.html'”; // Página que será redirecionada

    ?>

  • Élio Laender

    Pessoal, deu certinho, muito obrigado!!

  • Olá, segui as dicas apresentadas e código ficou dessa forma:

    mas o e-mail ainda não chega ao destinatário, essa sintaxe estaria correta?

    desde já muito obrigado e parabéns pelo ótimo conteúdo.

  • Se alguem puder me ajudar, mesmo problema ate mesmo depois das alterações. Obs: Neste caso é feita uma consulta antes no banco pra ver se existe o registro se tiver manda a senha para o email. Obrigado pela atenção.

    <?php
    include "conexao.php";

    $result = mysqli_query($con, "select * from empresas where email = '$_POST[email]' and cnpj = '$_POST[cnpj]'");
    while($resultado = mysqli_fetch_array($result)) {
    $email = $resultado["email"];
    $senha = $resultado["senha"];
    }
    if (mysqli_num_rows($result) == 1) {
    $mensagem = "Email de recuperação de senha enviado pelo SUPERMERCADOSPOMPEU.COM.BR";
    $mensagem .= "

    Assunto:Recuperação de senha

    CNPJ:$_POST[cnpj]

    E-mail:$_POST[email]

    tr>
    Senha:$senha

    “;
    $mensagem .= “E-mail de segurança, guarde este e-mail para futuras consultas!”;
    $mensagem .= “Esta é uma mensagem automática de nosso sistema, você não precisa responder a mesma!”;

    $email_remetente = “atendimento@supermercadospompeu.com.br”;
    $headers = “MIME-Version: 1.1\n”;
    $headers .= “Content-type: text/plain; charset=iso-8859-1\n”; // ou UTF-8, como queira
    $headers .= “From: $email_remetente\n”; // remetente
    $headers .= “Return-Path: $email_remetente\n”; // return-path

    $envio = mail($email, “Recuperação de senha”, $mensagem, $headers, “-f$email_remetente”);

    if ($envio) {
    echo “1”;
    } else {
    echo “2”;
    }
    } else if (mysqli_num_rows($result) == 0) {
    echo “3”;
    }
    ?>

  • Segui as dicas e deu um pouco certo, quando abro minha caixa de email ele informa que eu recebi um novo email porém o conteúdo da mensagem nao aparece, alguém pode e ajudar ? meu codigo está da seguinte forma >>>>>>>>>>>>>>>>>>>

    $e_body = “You have been contacted by $name with regards to $subject, their additional message is as follows.” ;
    $e_content = “\”$comments\””;
    $e_reply = “You can contact $name via email, $email or via phone $phone”;

    $msg = wordwrap( $e_body . $e_content . $e_reply, 70 );

    $email_remetente = “destino@andreaferganni.com.br”;
    $headers = “MIME-Version: 1.1\n”;
    $headers .= “Content-type: text/plain; charset=iso-8859-1\n”;
    $headers .= “From: $email_remetente\n”; // remetente
    $headers .= “Return-Path: $email_remetente\n”; // return-path
    $headers .= “Reply-To: $email_usuario\n”; // Endereço (devidamente validado) que o seu usuário informou no contato
    $envio = mail(“contato@andreaferganni.com.br”, “Assunto”, “comments”, $headers, “-f$email_remetente”);

    if(mail($address, $e_subject, $msg, $headers)) {

  • Está abaixo a minha pagina “enviar.php
    Mas o meu netbeans não me deixa criar as variaveis $nome = $_POST[`Nome`];
    $email = $_POST[`Email`]; $mensagem = $_POST[`Mensagem`];

    Ele pede pra não chamar a POST diretamente.
    Pede pra utilizar filtragem.
    Como faço isso?
    Pois o e-mail chega em branco no meu webmail do servidor, sempre que clico em enviar da erro aqui na pagina enviar.php

    <?php

    // Destinatário
    $para = "contato@gpssoftwares.com.br";

    // Assunto do e-mail
    $assunto = "Contato do site";

    // Campos do formulário de contato
    $nome = $_POST[`Nome`];
    $email = $_POST[`Email`];
    $mensagem = $_POST[`Mensagem`];

    if($_POST['enviar']){
    mail("$para","$assunto","
    Contato realizado pelo site GPS Softwares:

    Nome:$nome

    E-mail:$email

    Assunto:$assunto

    Mensagem:$mensagem");

    }

    $msg = "Sua mensagem foi enviada com sucesso.";

    // Mostra a mensagem acima e redireciona para index.html
    echo "location.href=`index.html`; alert(`$msg`);”;

    ?>

    Agradeço pela ajuda.

  • Marcos Campos

    Cara voce é foda! devia trabalhar la para ensinar eles a usar o proprio sistema deles vlew

  • Luiz Antonio Barreto

    Ajuda: ola a todos, nunca usei a função mail() no php, eu só executo essa função no meu codigo php ou eu tenho que ter mais algum serviço rodando na minha maquina, como por exemplo postfix, sendmail etc..?

  • Luiz Antonio Barreto

    Ajuda: ola a todos, nunca usei a função mail() no php, eu só executo
    essa função no meu codigo php ou eu tenho que ter mais algum serviço
    rodando na minha maquina, como por exemplo postfix, sendmail etc..? obs: Uso sistema linux ubuntu.

  • Olá Luiz Antonio,

    É preciso ter algum serviço de envio sim. O php trabalha naturalmente com sendmail, basta configurar o endereço corretamente no php.ini

    Abraços!

  • Luiz Antonio Barreto

    Felipe, você tem um passo a passo da configuração do php.ini para poder configurar e utilizar esse seu codigo php?

  • Luiz Antonio Barreto

    Meu codigo ficou assim:

  • Luiz Antonio Barreto
  • Henrique Pessoa

    Meu caro, muito obrigado, isso me ajudou bastante. Como você mesmo disse, a solução não é nada obvia. :SS

  • Rodrigo Maldonado

    Olá, tentei inserir a função Reply-To, mas não esta rolando, não sei se coloquei corretamente.

    $seuemail = “meu@email.com”;/*email de destino*/

    $headers .= “From: $email_remetenten”; // remetente

    $headers .= “Return-Path: $email_remetenten”; // return-path

    $headers .= “Reply-To: $email_usuarion”; // Endereço (devidamente validado) que o seu usuário informou no contato

    $assunto = “Contato”;/*assunto padrão do email(não o digitado pelo úsuario)*/

  • Marcos Boscolo

    resolveu o meu problema mas retirou toda formatação da mensagem 🙁

  • Josi Varela

    Olá Marcos estou com o mesmo problema, quando coloco
    $headers .= “Content-type: text/plain; charset=iso-8859-1rn”; esse chega sem formatação

    quando mudo para $headers .= “Content-type: text/html; charset=iso-8859-1rn”; não envia, se alguém puder ajudar, agradeço o mesmo formulário funciona normalmente em outros provedores mas na Locaweb não vai, só o text plain

  • Marcos Boscolo

    acontece exatamente o mesmo aqui!

  • trocando por ISO-8859-1 (em maiusculas) ou mesmo por UTF-8 faz alguma diferença pra vocês?

  • Felipe de lima

    Cara, isso me ajudou muito. Muito obrigado! Explicação perfeita, virei um seguidor! Continue assim.

  • Monica Torres

    Olá Felipe, estou com o mesmo problema do Bruno Sampaio “quando abro minha caixa de email ele informa que eu recebi um novo email porém o CONTEÚDO DA MENSAGEM NÃO APARECE”. Meu trecho de código é este e necessito muito de ajuda, pois há vários dias tenho pesquisado sobre esse erro em vão. Não encontrei nada parecido na web..
    .
    .
    .
    $de = “sac@meudominio.com”; //remetente
    $emailTo = $user; //destinatário
    $link = “http://meudominio.com/index.php?acao=Restore&user=$user&onfirm=$keylink”; //link único gerado para restaurar a senha
    $assunto = “Empresa – Mudança de Senha”; //assunto
    $assunto = ‘=?UTF-8?B?’.base64_encode($assunto).’?=’; //acentuação no assunto
    $mensagem = “<Olá, se você solicitou mudança de senha no site Meu Dominio, clique no link abaixoGuarde sua senha em lugar seguro e jamais forneça a ninguém“; //mensagem
    $final = “Nome da Empresa”; //final da mensagem com o logo e nome da empresa

    $mens = $mensagem.””.$link.””.$final; //composição da mensagem (Mesnagem+Link+Final)
    $mens = wordwrap($mens,70); //restrição para 70 linhas

    $headers = “MIME-Version: 1.1n”;
    $headers .= “Content-type: text/html; charset=UTF-8n”;
    $headers .= “From: Nome da Empresa n”;
    $headers .= “Return-Path: n”;
    $headers .= “Cc: outroEmailDeMeuDominio@outlook.comn“;

    if(!mail($emailTo,$assunto,$mens,$headers,”-f$de”) ){ //se não colocar o 5º parâmetro será interpretado como email malicioso
    echo “Não foi possível enviar o e-mail.”;
    echo “Informações do erro: ” . $mail->ErrorInfo; die();
    }else{
    echo “Foi enviado um e-mail para o seu endereço, onde poderá encontrar um link único para alterar a sua senha”;
    }

    .
    .
    .

  • Monica Torres

    Consegui, Felipe. Mas onde há a instrução “-f$email_remetente” , precisei substituir por
    ‘-r’. $email_remetente, já que minha hospedagem é linux. Isso é obrigatório.
    Agora tenho um outro erro estranho que não sei nem como consultar.. o email é enviado com um link para recuperar a senha, mas quando abro o email, vejo que o link aparece metade com a linha em baixo (como link normal) e a outra metade sem a linha (como um texto comum).

  • Stephany Lemes

    Muito obrigada. Não dá para acreditar que em mais de quatro anos não arrumaram isso ou pelo menos a documentação.

  • Diogenes

    Olá, muito bom! Meu problema é um pouco diferente. Eu fiz uma página em Flash 8 + php e só preciso do nome e email do contato. Fiz utilizando o próprio modelo da Locaweb. Mas ele não envia nada. Teria como me ajudar?Segue o php:
    <?php

    $emailsender = $_POST("ceo@ellawei.com");
    $nome = trim($_POST["nomerem"]);
    $destino = trim($_POST["emailrem"]);
    $assunto = trim($_POST["assunto"]);
    $mensagem = trim($_POST["recado"]);

    if (PATH_SEPARATOR ==":") {
    $quebra = "rn";
    } else {
    $quebra = "n";
    }

    // Cabeçalho de acordo com a regra RFC 822
    $headers = "MIME-Version: 1.1".$quebra;
    $headers .= "Content-type: text/plain; charset=iso-8859-1".$quebra;
    $headers .= "From: $emailsender.$quebra;" // E-mail do remetente, obrigatóriamente uma conta de emails do domínio de sua hospedagem.
    $headers .= "Return-Path: $emailsender.$quebra;" // E-mail do remetente, obrigatóriamente uma conta de emails do domínio de sua hospedagem.
    $headers .= "Reply-To: “.$quebra; // O email informado no formulário, será usado no Responder Para.

    mail($nome, $destino, $assunto, $mensagem, $headers, “-r”. $emailsender);

    echo = “mensagem ok”

    ?>
    OBS: Gostaria de substituir também o echo por uma função que lesse um movie clip nomeado como “aviso”

  • Jonatan Damasio Potrikus

    Esse post ta salvando vidas ainda em 2016 haha valeuu!