Enviar e-mails com a função mail() do PHP

Função para Envio de Mensagens mail

A função mail() possui algumas particularidades relacionadas ao cabeçalho da mensagem por isso recomendamos que o cabeçalho siga o padrão abaixo:

Hospedagem Linux

A quebra de linha para utilizar no cabeçalho deve ser “\n”

Para que a mensagem não seja bloqueada precisa colocar no from e no Return-pathum e-mail válido de seu domínio.
Hoje, todos os servidores Linux do Babidoos usam Postfix, e caso você não especifique o From na hora de enviar a mensagem, ele forja o from email@host.com.br (o host seria o nome do servidor onde seu site está hospedado), e isso em nossos servidores é bloqueado.Ou seja, sua mensagem não será enviada.

 

Em Linux é obrigatório o uso do parâmetro -r (concatenação do “From na linha de envio”) devido ao envio ser feito através do Postfix:

if(!mail($emaildestinatario, $assunto, $mensagemHTML, $headers ,"-r".$emailsender)){ // Se for Postfix $headers .= "Return-Path: " . $emailsender . $quebra_linha; // Se "não for Postfix" mail($emaildestinatario, $assunto, $mensagemHTML, $headers ); }
Hospedagem Windows

A quebra de linha para utilizar no cabeçalho deve ser “\r\n”

<?php
// 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/plain; charset=UTF-8\r\n";
$headers .= "From: eu@seudominio.com\r\n"; // remetente
$headers .= "Return-Path: eu@seudominio.com\r\n"; // return-path
$envio = mail("destinatario@algum-email.com", "Assunto", "Texto", $headers);
 
if($envio)
 echo "Mensagem enviada com sucesso";
else
 echo "A mensagem não pode ser enviada";
?>

Diferenças entre Linux e Windows 

É comum funcionar em uma versão e em outra não, pois cada uma possui uma caracteristica , além da quebra de linha citada no exemplo acima (\n em Linux e \r\n em Windows), existem também as diferenças no que deveremos especificar nos outros itens do cabeçalho.

Campo From (remetente)

Linux

Você pode definir o From das seguintes formas:

  •  $headers .= “From: eu@seudominio.com\n“;
  •  $headers .= “From: Meu Nome <eu@seudominio.com>\n“;

Windows


Enviar e-mails com a função mail() do PHP

Veremos neste artigo como realizar envios de e-mail através da função mail() do PHP, acompanhe os detalhes abaixo:

As mensagens devem ser enviadas dentro do padrão internacional RFC 822, e respeitando os limites de envio veja nossos termos de uso.

Veja os exemplos simples abaixo para saber o que deve ser especificado.

Função para Envio de Mensagens mail

A função mail() possui algumas particularidades relacionadas ao cabeçalho da mensagem por isso recomendamos que o cabeçalho siga o padrão abaixo:

Hospedagem Linux

A quebra de linha para utilizar no cabeçalho deve ser “\n”

Para que a mensagem não seja bloqueada precisa colocar no from e no Return-pathum e-mail válido de seu domínio.
Hoje, todos os servidores Linux da Locaweb usam Postfix, e caso você não especifique o From na hora de enviar a mensagem, ele forja o from email@host.com.br (o host seria o nome do servidor onde seu site está hospedado), e isso em nossos servidores é bloqueado.Ou seja, sua mensagem não será enviada.

 

Em Linux é obrigatório o uso do parâmetro -r (concatenação do “From na linha de envio”) devido ao envio ser feito através do Postfix:

if(!mail($emaildestinatario, $assunto, $mensagemHTML, $headers ,"-r".$emailsender)){ // Se for Postfix
    $headers .= "Return-Path: " . $emailsender . $quebra_linha; // Se "não for Postfix"
    mail($emaildestinatario, $assunto, $mensagemHTML, $headers );
}
Hospedagem Windows

A quebra de linha para utilizar no cabeçalho deve ser “\r\n”

<?php
// 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/plain; charset=UTF-8\r\n";
$headers .= "From: eu@seudominio.com\r\n"; // remetente
$headers .= "Return-Path: eu@seudominio.com\r\n"; // return-path
$envio = mail("destinatario@algum-email.com", "Assunto", "Texto", $headers);
 
if($envio)
 echo "Mensagem enviada com sucesso";
else
 echo "A mensagem não pode ser enviada";
?>

Diferenças entre Linux e Windows 

É comum funcionar em uma versão e em outra não, pois cada uma possui uma caracteristica , além da quebra de linha citada no exemplo acima (\n em Linux e \r\n em Windows), existem também as diferenças no que deveremos especificar nos outros itens do cabeçalho.

Campo From (remetente)

Linux

Você pode definir o From das seguintes formas:

  •  $headers .= “From: eu@seudominio.com\n“;
  •  $headers .= “From: Meu Nome <eu@seudominio.com>\n“;

Windows

  • $headers .= “From: eu@seudominio.com\r\n“;
Campos To, Cc e Bcc (destinatários)

A flexibilidade é maior em Linux, é possível usar os mesmos formatos acima para eles:

  • $headers .= “Cc: umemail@destinatario.com\n“;
  • $headers .= “Cc: Um Nome <umemail@destinatario.com>\n“;
  • $headers .= “Bcc: outroemail@destinatario.com\n“;
  • $headers .= “Bcc: Outro Nome <outroemail@destinatario.com>\n“;

Na função mail (ou seja, o campo To):

  • mail(“destinatario@algum-email.com“, “Assunto”, “Texto”, $headers);
  • mail(“Algum Nome <destinatario@algum-email.com>“, “Assunto”, “Texto”, $headers);

No Windows há algumas restrições, não sendo permitidos os formatos Algum Nome <destinatario@algum-email.com>, somente:

  • $headers .= “Cc: umemail@destinatario.com\r\n“;
  • $headers .= “Bcc: outroemail@destinatario.com\r\n“;

E na função mail (ou seja, o campo To):

  • mail(“destinatario@algum-email.com“, “Assunto”, “Texto”, $headers);
Outros campos

Os campos Reply-To, Return-Path e Disposition-Notification-To (serão detalhados adiante) também seguirão as mesmas regras dos campos To, Cc e Bcc:

Linux:

  • $headers .= “Reply-To: umemail@visitante.com\n“;
  • $headers .= “Return-Path: Um Nome <umemail@remetente.com>\n“;

Windows:

  •  $headers .= “Disposition-Notification-To: umemail@destinatario.com\r\n“;
Opções para o cabeçalho

É possível adicionar outros headers à função mail() além do From: como por exemplo:

  • Content-type: Formato do envio de mensagens, use “text/plain” para texto ou “text/html” para HTML.
  • Cc: Envio de cópia das mensagens.
  • Bcc: Envio de cópia oculta das mensagens.
  • Reply-To: E-mail que receberá a resposta caso quem a leu clicar em ‘Responder’.
  • X-Priority: Prioridade da mensagem: 1 é urgente, 5 é prioridade baixa, 3 é normal (padrão se não for especificado).
  • Disposition-Notification-To: E-mail que receberá confirmação de leitura (somente se recebido por algum cliente de e-mail, como o Outlook).

Exemplos com cabeçalhos

// Este sempre deverá existir para garantir a exibição correta dos caracteres
$headers = "MIME-Version: 1.1\n";
 
// Para enviar o e-mail em formato texto com codificação de caracteres Europeu Ocidental (usado no Brasil)
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
 
// Para enviar o e-mail em formato HTML com codificação de caracteres Europeu Ocidental (usado no Brasil)
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
 
// Para enviar o e-mail em formato HTML com codificação de caracteres Unicode (Usado em todos os países)
$headers .= "Content-type: text/html; charset=utf-8\n";
 
// E-mail que receberá a resposta quando se clicar no 'Responder' de seu leitor de e-mails
$headers .= "Reply-To: e-mailDeQuemPreencheuSeuFormulario@dominio.com\n"
 
// para enviar a mensagem em prioridade máxima
$headers .= "X-Priority: 1\n";
 
// para enviar a mensagem em prioridade mínima
$headers .= "X-Priority: 5\n";
 
// para enviar a mensagem em prioridade normal (valor padrão caso não seja especificada)
$headers .= "X-Priority: 3\n";

 

Evite que sua mensagem seja bloqueada

  • Campo From (RFC 822) deve ser um e-mail de seu domínio, do contrário, poderá ter problemas com o recebimento das mensagens também por conta do bloqueio de segurança dos servidores de diversos provedores;
  • Return-Path(RFC 822)deve ser o mesmo e-mail especificado em From, se ele não for especificado ou for especificado um e-mail diferente, a mensagem pode não chegar no destino por conta do bloqueio de segurança dos servidores de diversos provedores;
  • Campo Reply-To é ideal para formulários que tem como função enviar e-mail para uma caixa postal sua (@dominio.com), pois quando se responde, o destinatário será o e-mail do visitante. Se usar o e-mail do visitante no campo From, a mensagem poderá ser barrada por conta do tópico acima.
  • Não é necessário o uso de Reply-To quando se deseja usar o script para enviar um e-mail para o visitante, o próprio campo From, neste caso, será utilizado como e-mail a ser respondido.
  • É importante a utilização “Return-Path” para receber o retorno das mensagens e identificar mais rapidamente as falhas no envio.
  • 4 Usuários acharam útil
Esta resposta lhe foi útil?

Related Articles

Configuração de E-mail WINDOWS 10

A instalação para o e-mail que vem junto com o Windows, siga as imagens:1º passo2º passo3º passo...

Configurar Redirecionamento "Encaminhamento" de E-mail no cPanel

Para configurar o redirecionamento de e-mail no cPanel, siga essas etapas: 1. Faça login no...

Criar E-mail no cPanel

Para criar uma nova conta de e-mail no painel de gerenciamento cPanel, siga estas etapas: 1....

É Proibido Envio de E-mails em Massa (newsletters)?

Algumas vezes não recebemos nenhum questionamento por parte do cliente e o mesmo dispara uma...

Ler E-mails via Webmail do cPanel

Para ler e-mails via Webmail no cPanel, siga estas instruções: 1. Acesse o Webmail: Abra seu...