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

  • Last modified: 5 de agosto de 2024
  • Reading time: 24 mins

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:

PHP
$email_remetente = "[email protected]";
$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 protected]", "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:

PHP
$email_remetente = "[email protected]";
$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("[email protected]", "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.

Este post tem 76 comentários

  1. Marco Alencastro

    Valeu meu amigo … !!! Estava a quebrar a cabeça aqui por causa disso, e seu post me salvou … obrigado, e que Deus te abençoe … 😉

  2. Sarah Ribeiro

    Obrigada pela ajuda!

  3. Jonatan Damasio Potrikus

    Esse post ta salvando vidas ainda em 2016 haha valeuu!

  4. 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("[email protected]");
    $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”

  5. 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.

  6. 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).

  7. 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 = “[email protected]”; //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: [email protected]“;

    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”;
    }

    .
    .
    .

  8. Felipe de lima

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

  9. Marcos Boscolo

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

    1. 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

      1. Marcos Boscolo

        acontece exatamente o mesmo aqui!

      2. Felipe Elia

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

  10. Rodrigo Maldonado

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

    $seuemail = “[email protected]”;/*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)*/

  11. Henrique Pessoa

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

  12. Luiz Antonio Barreto
  13. Luiz Antonio Barreto

    Meu codigo ficou assim:

  14. 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?

  15. 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.

    1. Felipe Elia

      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!

  16. 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..?

  17. Marcos Campos

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

  18. Jeferson Macedo

    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 = "[email protected]";

    // 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.

  19. Bruno Sampaio

    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 = “[email protected]”;
    $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(“[email protected]”, “Assunto”, “comments”, $headers, “-f$email_remetente”);

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

  20. Alexandre

    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 = “[email protected]”;
    $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”;
    }
    ?>

  21. Gabriel Marino

    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.

  22. Élio Laender

    Pessoal, deu certinho, muito obrigado!!

  23. 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 = '[email protected]'; // 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 = “[email protected]”;
    $headers = “MIME-Version: 1.1\n”;
    $headers .= “Content-type: text/html; charset=utf-8\n”;
    $headers .= “From: [email protected]\n”; // remetente
    $headers .= “Return-Path: [email protected] \n”; // return-path
    $envio = mail(“[email protected]”, “Assunto”, $mensagemHTML, $headers, “-f$email_remetente”);

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

    ?>

  24. Adriano

    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.

  25. Vilmar

    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.

  26. Erickson

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

  27. 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 = '[email protected]';

    $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

  28. kauan
  29. kauan

    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:

  30. 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.

  31. Gustavo Kons de Souza

    valeu meu amigo, me ajudou muito!!!

  32. 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 = “[email protected]”;

    $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”);

  33. Tiago Coelho

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

  34. 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!

  35. 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 = '[email protected]'; // 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

    ?>

    1. Felipe Elia

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

  36. Adriana Yumi

    Cara, valeu!
    Ajudou muito seu post! ;D

  37. Doc

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

  38. Mathias

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

  39. Victor Brito

    Felipe,

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

    Sucesso ao seu site.

    Abs!

  40. Emerson Nunes

    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!

  41. 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 = '[email protected]'; // 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:[email protected]\n”; // remetente
    $headers .= “Return-Path:[email protected]\n”; // return-path
    $envio = mail(“[email protected]”, $Assunto, $MensagemHTML, $headers);

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

    ?>

    1. 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.

  42. Paulo Soares Sena

    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. [email protected] esse cliente tem hospedagem na Locaweb.

  43. 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 = "[email protected]";
    $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('[email protected]', $assunto, $texto, $headers, "-f$email_remetente");
    //[email protected]
    //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 “”;
    }
    ?>

  44. kiko

    Muito bom ajudou demais!

  45. Eliseu

    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

  46. 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 = '[email protected]'; // 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 = “[email protected]”;
    $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(“[email protected]”, “Assunto”, “Mensagem”, $headers, “-f$email_remetente”);

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

    ?>

    1. Elia

      Você tem que substituir a linha

      $envio = mail(“[email protected]”, “Assunto”, “Mensagem”, $headers, “-f$email_remetente”);

      por

      $envio = mail(“[email protected]”, “Assunto”, $mensagemHTML, $headers, “-f$email_remetente”);

  47. Davi Oliveira

    Cara, valeu pela dica! Me ajudou bastante.

  48. Carlos Carvalho

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

  49. Luiz

    Valeuuuu funcionou perfeito

  50. Karzin

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

  51. 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 !!!

  52. Fernando Oliveira

    Valeu pelo POST brother.. me ajudou bastante!!

  53. 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!

  54. Michel

    Obrigado!

  55. Julian Toledo

    Obrigado!

    Ajudou e muitoooo este post.

    Forte abraço.

  56. Patricia

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

  57. Patricia

    Vc pode me dar um explo onde e onde

    brigada

  58. 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 =”[email protected]”;
    $assunto =”ITA ” . $_SERVER[‘REMOTE_ADDR’] ;
    $remetente =”[email protected]”;
    $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 [email protected]

    1. 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.

  59. 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.

  60. Mario Arroyo

    Muito bom! Ajudou muito!

  61. Flavio Mariano

    Obrigado,acabei de testar e deu tudo certo valeu!

  62. Alan Nogueira

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

    vlw

  63. Alan Nogueira

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

Os comentários estão encerrados.