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!"; ?>
  • 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.
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.