mail

(PHP 4, PHP 5, PHP 7)

mailEnvia email

Descrição

mail ( string $to , string $subject , string $message [, mixed $additional_headers [, string $additional_parameters ]] ) : bool

Envia um email.

Parâmetros

to

Receptor, ou receptores do email.

O formato desta string precisa estar de acordo com » RFC 2822. Alguns exemplos:

  • user@example.com
  • user@example.com, anotheruser@example.com
  • User <user@example.com>
  • User <user@example.com>, Another User <anotheruser@example.com>

subject

Assunto do email a ser enviado.

Cuidado

Assunto deve satisfazer o » RFC 2047.

message

Mensagem a ser enviada.

Cada linha deve ser separada com um LF (\n). Linhas não deve ser maiores que 70 caracteres.

Cuidado

(Somente Windows) Quando PHP está usando o servidor SMTP diretamente, e uma parada total é encontrada no início de uma linha, ela é removida. Para se defender disto, substitua estas ocorrência com dois pontos seguidos.

<?php
$text 
str_replace("\n.""\n.."$text);
?>

additional_headers (opcional)

String a ser inserida no final do cabeçalho do email.

Esta é normalmente usada para adicionar cabeçalhos extras (From, Cc, e Bcc). Múltiplos cabeçalhos extra devem ser separados com um CRLF (\r\n). Se dados externos forem usados para compor este cabeçalho, os dados devem ser higienizados para que nenhum cabeçalho indesejado possa ser injetado.

Se um array for passado, suas chaves são os nomes dos cabeçalhos e seus valores são os respectivos valores dos cabeçalhos.

Nota:

Antes do PHP 5.4.42 e 5.5.27, respectivamente, additional_headers não tinha proteção de injeção de cabeçalho de email. Portanto, os usuários devem garantir que os cabeçalhos especificados sejam seguros e contenham apenas cabeçalhos. Ou seja, nunca inicie o corpo do e-mail colocando várias novas linhas.

Nota:

Quando enviando email, o email precisa conter um cabeçalho From. Este pode ser definido com o parâmetro additional_headers, ou um padrão pode ser definido no php.ini.

Um deslize fará com que resulte em uma mensagem de erro similar a Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. O cabeçalho From define também Return-Path em Windows.

Nota:

Se mensagens não são recebidas, tente usar somente um LF (\n). Alguns Unix mail transfer agents (mais notavelmente » qmail) modificam LF por CRLF automaticamente (que leva a duplicação de CR se CRLF é usado). Este deve ser um último recurso, como não está de acordo com » RFC 2822.

additional_parameters (opcional)

O parâmetro additional_parameters pode ser usado para passar um parâmetro adicional para o programa configurado para usa quando enviando email usando a configuração sendmail_path. Por exemplo, isto pode ser usado para definir o endereço do envelope remetente quando usando sendmail com a opção do sendmail -f.

Este parâmetro é escapado por escapeshellcmd() internamente para prevenir a execução do comando. escapeshellcmd() impede a execução de comandos, mas permite adicionar parâmetros adicionais. Por razões de segurança, é recomendado que o usuário higienize este parâmetro para evitar adicionar parâmetros indesejados ao comando shell.

Uma vez que escapeshellcmd() é aplicada automaticamente, alguns caracteres que são permitidos como endereços de e-mail por RFCs da Internet não podem ser usados. mail() não pode permitir tais caracteres, portanto, em programas onde o uso de tais caracteres é necessário, meios alternativos de envio de emails (como o uso de um framework ou biblioteca) são recomendados.

O usuário com o qual o servidor web roda deve ser adicionado como um usuário confiável à configuração do sendmail para evitar que um cabeçalho 'X-Warning' seja adicionado à mensagem quando o remetente do envelope (-f) é definido usando este método. Para usuários do sendmail, este arquivo é /etc/mail/trusted-users.

Valor Retornado

Retorna true se o email foi aceito com sucesso para entrega, false caso contrário.

É importante notar que somente pelo o email ser aceito para entrega, não significa que o email alcancará o destino esperado.

Changelog

Versão Descrição
7.2.0 The additional_headers parameter now also accepts an array.

Exemplos

Exemplo #1 Enviando email.

Usando mail() para enviar um simples email:

<?php
// The message
$message "Line 1\r\nLine 2\r\nLine 3";

// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message wordwrap($message70"\r\n");

// Send
mail('caffeinated@example.com''My Subject'$message);
?>

Exemplo #2 Enviando email com cabeçalhos extra.

A adição de cabeçalhos básicos, dizendo a MUA os endereços From e Reply-To:

<?php
$to      
'nobody@example.com';
$subject 'the subject';
$message 'hello';
$headers 'From: webmaster@example.com' "\r\n" .
    
'Reply-To: webmaster@example.com' "\r\n" .
    
'X-Mailer: PHP/' phpversion();

mail($to$subject$message$headers);
?>

Exemplo #3 Enviando email com um parâmetro adicional da linha de comando.

Este exemplo envia o mesmo e-mail que o exemplo imediatamente acima, mas passa os cabeçalhos adicionais como array (disponível a partir do PHP 7.2.0).

<?php
$to      
'nobody@example.com';
$subject 'the subject';
$message 'hello';
$headers = array(
    
'From' => 'webmaster@example.com',
    
'Reply-To' => 'webmaster@example.com',
    
'X-Mailer' => 'PHP/' phpversion()
);

mail($to$subject$message$headers);
?>

Exemplo #4 Enviando e-mail com um parâmetro de linha de comando adicional.

O parâmetro additional_parameters pode ser usado para passar um parâmetro adicional para o programa configurado para usar ao enviar e-mail usando o sendmail_path.

<?php
mail
('nobody@example.com''the subject''the message'null,
   
'-fwebmaster@example.com');
?>

Exemplo #5 Enviando email HTML

É também possível enviar email HTML com mail().

<?php
// Multiple recipients
$to 'johny@example.com, sally@example.com'// note the comma

// Subject
$subject 'Birthday Reminders for August';

// Message
$message '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Johny</td><td>10th</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
'
;

// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';

// Additional headers
$headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
$headers[] = 'From: Birthday Reminder <birthday@example.com>';
$headers[] = 'Cc: birthdayarchive@example.com';
$headers[] = 'Bcc: birthdaycheck@example.com';

// Mail it
mail($to$subject$messageimplode("\r\n"$headers));
?>

Nota:

Se a intenção é enviar email HTML ou outro formato complexo, é recomendado usar o pacote PEAR » PEAR::Mail_Mime.

Notas

Nota:

A implentação do Windows de mail() difere bastante da implentação Unix. Primeiro, ele não usa um binary local para compor mensagens mas apenas opera com sockets diretos o que significa que uma MTA é necessária monitorando um socket de rede (que pode ser ou o localhost ou uma máquina remota).

Segundo, cabeçalhos customizados como From:, Cc:, Bcc: e Date: not são interpretados pela MTA, mas são analiados pelo PHP.

Assim como, o parâmetro to não deve ser um endereço na forma de "Algo <alguem@example.com>". O comando de email poderia não analisar isso adequadamente enquanto se comunica com o MTA.

Nota:

É válido notar que a função mail() não é apropriada para um grande volume de email em um loop. Esta função abre e fecha um SMTP socket para cada email, o que não é muito eficiente.

Para enviar uma grande quantidade de email, veja os pacotes » PEAR::Mail, e » PEAR::Mail_Queue.

Nota:

O seguintes RFCs podem ser úteis: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049, e » RFC 2822.

Veja Também