PHP Email · 4 min read · Oct 25, 2025
Enviando Email a Partir do PHP
Enviando Email a Partir do PHP
Este tutorial mostra como você pode facilmente enviar mensagens de email a partir de um servidor web habilitado para PHP. Ele pode ser utilizado para processar dados de formulários, enviar alertas, etc. Também explica um pouco sobre a formatação dos cabeçalhos de email.
Configuração do Sistema
Obviamente, você precisa ter um servidor web instalado junto com o PHP. Você também precisa garantir que seu sistema operacional tenha algum agente de email instalado (por exemplo, Sendmail no Linux ou serviço SMTP sob IIS). E certifique-se de que a porta 25 não está sendo bloqueada. Isso é necessário mesmo que você retransmita mensagens através de um segundo servidor.
O PHP tem a função mail habilitada por padrão. No entanto, você pode especificar as opções adicionais no arquivo ‘php.ini’ na seção [mail function] (linha # em torno de 700).
Sintaxe
Aqui está a sintaxe completa do comando mail():
bool mail ( string $email_address_to, string $subject, string $message_contents [, string $additional_headers [, string $additional_parameters]] );Os primeiros 3 parâmetros não requerem explicação: endereço de email do destinatário, assunto da mensagem, conteúdo da mensagem. O parâmetro $additional_headers inclui cabeçalhos de email que listarei mais tarde. $additional_parameters é usado para passar opções específicas para o programa usado para enviar email (como sendmail) e é raramente utilizado. Você precisa verificar as páginas de manual do sendmail para a lista de opções.
O mínimo absoluto exige que você especifique estes:
mail ( $email_address_to , $subject, $message_contents );No entanto, é recomendado definir cabeçalhos adicionais por razões de conformidade. A mensagem de email deve ser compatível com o RFC #822.
O exemplo abaixo mostra alguns cabeçalhos de email que podem ser usados:
- From: O endereço de email do remetente.
- Reply-To: O endereço de email para onde as respostas devem ser enviadas.
- Return-Path: Isso é usado caso a mensagem não seja entregue e precise ser retornada.
- Subject: Assunto do email.
- CC: Cópia Carbono. Uma lista separada por vírgulas de mais destinatários que será vista por todos os outros destinatários.
- BCC: Cópia Carbono Oculta. Uma lista separada por vírgulas de mais destinatários que não será vista por nenhum outro destinatário.
- Content-type: Define o tipo MIME da mensagem.
- X-Mailer: Especifica o cliente de email usado para enviar a mensagem.
A coisa importante a lembrar é que os nomes dos cabeçalhos são sensíveis a maiúsculas e minúsculas e que cada cabeçalho deve ser terminado com caracteres de retorno e nova linha.
Cada mensagem é roteada através de no mínimo 2 servidores de email (remetente e destinatário). No entanto, pode haver mais servidores de email na rota, como servidores de retransmissão, servidores antiSPAM, etc. Cada um deles adicionará seus próprios cabeçalhos à sua mensagem. Você também deve ter em mente que seu servidor web pode, dependendo das configurações, trocar alguns campos de cabeçalho, como Return-Path. Note que este campo não afeta o endereço de resposta.
Exemplo
Aqui está um exemplo simples que enviará uma mensagem de email:
Exemplo Completo
Este exemplo mostra uma estrutura mais organizada com mais opções e mais cabeçalhos:
";
$email_return_to = "[email protected]";
$email_content_type = "text/html; charset=us-ascii";
$email_client = "PHP/" . phpversion();
// ------------------------- //
// --- DEFINIR CABEÇALHOS --- //
$email_header = "From: " . $email_sender . "\r\n";
$email_header .= "Reply-To: " . $email_return_to . "\r\n";
$email_header .= "Return-Path: " . $email_return_to . "\r\n";
$email_header .= "Content-type: " . $email_content_type . "\r\n";
$email_header .= "X-Mailer: " . $email_client . "\r\n";
// ---------------------- //
// --- ASSUNTO E CONTEÚDOS --- //
$email_subject = "Assunto do email de teste";
$email_contents = "";
$email_contents .= "Email de Teste
";
$email_contents .= "
Remetente: " . $email_sender;
$email_contents .= "
Destinatário: " . $email_recipient;
$email_contents .= "";
// ---------------------------- //
$email_result = mail($email_recipient, $email_subject, $email_contents, $email_header);
if ($email_result) echo "Email foi enviado!";
else echo "Email falhou!";
?>
[email protected]>- Nota: A implementação do mail() no Windows difere em muitos aspectos da implementação no Unix. Primeiro, não usa um binário local para compor mensagens, mas opera apenas em soquetes diretos, o que significa que um MTA é necessário ouvindo em um soquete de rede (que pode estar no localhost ou em uma máquina remota). Segundo, os cabeçalhos personalizados como From:, Cc:, Bcc: e Date: não são interpretados pelo MTA em primeiro lugar, mas são analisados pelo PHP. Assim, o parâmetro to não deve ser um endereço na forma de “Algo < [email protected] >”. O comando mail pode não analisar isso corretamente ao se comunicar com o MTA.
- Nota: Vale a pena mencionar que a função mail() não é adequada para volumes maiores de email em um loop. Esta função abre e fecha um soquete SMTP para cada email, o que não é muito eficiente.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.