Nota
Atualmente, a documentação desta página não é suportada em português.
Por favor, sinta-se a vontade para nos enviar um pull request para o Github ou use o botão IMPROVE THIS DOC para propor suas mudanças diretamente.
Você pode consultar a versão em inglês deste tópico através do seletor de idiomas localizado ao lado direito do campo de buscas da documentação.
Aviso
Antes da versão 3.1, as classes Email e Transport estavam com o
namespace Cake\Network\Email em vez do namespace Cake\Mailer.
Cake\Mailer\Email(mixed $profile = null)¶Email é uma nova classe para enviar E-mail. Com essa classe você pode enviar
e-mail de qualquer lugar em sua aplicação.
Primeiro de tudo, você deve garantir que a classe está carregada:
use Cake\Mailer\Email;
Depois que você carregou Email, you pode enviar um e-mail com o seguinte:
$email = new Email('default');
$email->from(['[email protected]' => 'Meu Site'])
    ->to('[email protected]')
    ->subject('Assunto')
    ->send('Minha mensagem');
Com os métodos construtores da classe Email, você é capaz de definir suas
propriedades com o encadeamento de método.
Email tem vários métodos para definir os destinatários - to(), cc(),
bcc(), addTo(), addCc() e addBcc(). A diferença é que os três
primeiros irão substituir o que já foi definido antes e mais tarde será apenas
como adicionar mais destinatários ao seu respectivo campo:
$email = new Email();
$email->to('[email protected]', 'To Example');
$email->addTo('[email protected]', 'To2 Example');
// Os destinatários são: [email protected] and [email protected]
$email->to('[email protected]', 'ToTest Example');
// O destinatário é: [email protected]
Quando enviamos um e-mail em nome de outra pessoa, é uma boa ideia definirmos
quem é o remetente original usando o cabeçalho Sender. Você pode fazer isso
usando sender():
$email = new Email();
$email->sender('[email protected]', 'MyApp emailer');
Nota
É também uma boa ideia para definir o envelope remetente quando enviar um correio em nome de outra pessoa. Isso as impede de obter quaisquer mensagens sobre a capacidade de entrega.
A configuração de Email padrão é criada usando config() e
configTransport(). Você deve colocar as predefinições de e-mail no arquivo
config/app.php. O arquivo config/app.default.php é um exemplo deste
arquivo. Não é necessário definir a configuração de e-mail em
config/app.php. Email pode ser usado sem ele e usar os respectivos
métodos para definir todas as configurações separadamente ou carregar uma
variedade de configurações.
Ao definir perfis e transportes, você pode manter o código do aplicativo livre dos dados de configuração, e evitar a duplicação que faz manutenção e implantação mais difícil.
Para carregar uma configuração pré-definida, você pode usar o método profile()
ou passá-lo para o construtor de Email:
$email = new Email();
$email->profile('default');
// Ou no Construtor
$email = new Email('default');
Em vez de passar uma string que corresponde a um nome de configuração predefinida, você também pode apenas carregar uma variedade de opções:
$email = new Email();
$email->profile(['from' => '[email protected]', 'transport' => 'my_custom']);
// Ou no Construtor
$email = new Email(['from' => '[email protected]', 'transport' => 'my_custom']);
Alterado na versão 3.1: O perfil default do e-mail é automaticamente setado quando uma instância
Email` é criada.
Cake\Mailer\Email::configTransport($key, $config = null)¶As mensagens de email são entregues por transportes. Diferentes transportes
permitem o envio de mensagens via funções PHP mail do PHP servidores SMTP
(ou não em todos, que é útil para depuração. Configurar transportes permite-lhe
manter os dados de configuração fora de seu código do aplicativo e torna a
implantação mais simples, como você pode simplesmente mudar os dados de
configuração. Um exemplo de configuração de transporte é parecido com:
use Cake\Mailer\Email;
// Configuração Simples de Email
Email::configTransport('default', [
    'className' => 'Mail'
]);
// Configuração smtp Simples
Email::configTransport('gmail', [
    'host' => 'ssl://smtp.gmail.com',
    'port' => 465,
    'username' => '[email protected]',
    'password' => 'secret',
    'className' => 'Smtp'
]);
Você pode configurar servidores SSL SMTP, como o Gmail. Para fazer isso, colocar
o prefixo ssl:// no hospedeiro e configurar o valor de porta em
conformidade. Você também pode ativar TLS SMTP usando o tls opção:
use Cake\Mailer\Email;
Email::configTransport('gmail', [
    'host' => 'smtp.gmail.com',
    'port' => 587,
    'username' => '[email protected]',
    'password' => 'secret',
    'className' => 'Smtp',
    'tls' => true
]);
A configuração acima possibilita uma comunicação TLS para mensagens de e-mail.
Aviso
Você vai precisar ter ativado o acesso para aplicações menos seguras em sua conta do Google para que isso funcione: Permitindo aplicações menos seguras para acessar sua conta.
Nota
Para usar SSL + SMTP, você precisará ter o SSL configurado no seu PHP.
As opções de configuração também pode ser fornecido como uma string DSN. Isso é útil quando se trabalha com variáveis de ambiente ou prestadores PaaS:
Email::configTransport('default', [
    'url' => 'smtp://[email protected]:[email protected]:465?tls=true',
]);
Ao usar uma string DSN você pode definir quaisquer parâmetros/opções adicionais como argumentos de string de consulta.
Cake\Mailer\Email::dropTransport($key)¶Uma vez configurado, os transportes não pode ser modificado. A fim de modificar um transporte, você deve primeiro soltá-lo e, em seguida, configurá-lo.
Definição de perfis de entrega permitem consolidar as configurações de e-mail comuns em perfis reutilizáveis. Seu aplicativo pode ter tantos perfis como necessário. As seguintes chaves de configuração são usados:
'from': E-mail ou array do remetente. Visto Email::from().
'sender': E-mail ou array do Remetente original. Visto
Email::sender().
'to': E-mail ou array do Destinatário. Visto Email::to().
'cc': E-mail ou array da Copia de Carbono. Visto Email::cc().
'bcc': E-mail ou array da cópia oculta. Visto Email::bcc().
'replyTo': Email ou array do E-mail de respostas. Visto
Email::replyTo().
'readReceipt': Endereço de E-mail ou array de endereços para receber a
recepção de leitura. Visto Email::readReceipt().
'returnPath': Endereço de E-mail ou um array de endereços para retornar se
teve alguns erros. Visto Email::returnPath().
'messageId': ID da mensagem do e-mail. Visto Email::messageId().
'subject': Assunto da mensagem. Visto Email::subject().
'message': Conteúdo de mensagem. Não defina este campo se você estiver
usando o conteúdo processado.
'headers': Cabeçalhos sejam incluídas. Visto Email::setHeaders().
'viewRender': Se você estiver usando conteúdo renderizado, definir o nome
da classe da view. Visto Email::viewRender().
'template': Se você estiver usando conteúdo renderizado, definir o nome do
template. Visto Email::template().
'theme': Tema usado quando o template é renderizado. Visto
Email::theme().
'layout': Se você estiver usando conteúdo renderizado, definir o layout
para renderizar. Se você quer renderizar um template sem layout, definir este
campo como null. Visto Email::template().
'viewVars': Se você estiver usando conteúdo renderizado, definir o array
com as variáveis para serem usadas na view. Visto Email::viewVars().
'attachments': Lista de arquivos para anexar. Visto
Email::attachments().
'emailFormat': Formato do e-mail (html, text ou both). Visto
Email::emailFormat().
'transport': Nome da configuração de transporte. Visto
Mailer\Email::configTransport().
'log': Nível de log para registrar os cabeçalhos de e-mail e mensagem.
true usará LOG_DEBUG. Visto tabmém como CakeLog::write()
'helpers': Array de helpers usado no template do e-mail.
Todas essas configurações são opcionais, exceto 'from'.
Nota
Os valores das chaves acima usando e-mail ou array, como from, to, cc, etc
será passado como primeiro parâmetro de métodos correspondentes. O
equivalente de: Email::from('my@example.com', 'My Site') pode ser
difinido como  'from' => ['my@example.com' => 'My Site'] na sua
configuração.
Em Email você está livre para definir os cabeçalhos que você deseja. Quando
migrar usando e-mail, não se esqueça de colocar o prefixo X- em seus
cabeçalhos.
Visto como Email::setHeaders() e Email::addHeaders().
E-mails são frequentemente muito mais do que apenas uma simples mensagem de texto. A fim de facilitar, o CakePHP fornece uma maneira de enviar e-mails usando o CakePHP. Veja em view layer.
Os templates para e-mails residir em uma pasta especial em sua aplicação no
diretório Template chamado Email. Visualizações de e-mail também pode
usar layouts e os elementos assim como vistas normais:
$email = new Email();
$email->template('welcome', 'fancy')
    ->emailFormat('html')
    ->to('[email protected]')
    ->from('[email protected]')
    ->send();
O acima usaria src/Template/Email/html/welcome.ctp para a vista e src/Template/Layout/E-mail/html/fancy.ctp para o layout. Você pode enviar mensagens de e-mail com templates de várias partes, veja:
$email = new Email();
$email->template('welcome', 'fancy')
    ->emailFormat('both')
    ->to('[email protected]')
    ->from('[email protected]')
    ->send();
Este usaria os seguintes arquivos de template:
src/Template/Email/text/welcome.ctp
src/Template/Layout/Email/text/fancy.ctp
src/Template/Email/html/welcome.ctp
src/Template/Layout/Email/html/fancy.ctp
Ao enviar e-mails com templates, você tem a opção de enviar qualquer text,
html ou both.
Você pode definir as váriaveis da view com Email::viewVars():
$email = new Email('templated');
$email->viewVars(['value' => 12345]);
Em seus templates de e-mail, você pode usar isso com:
<p>Aqui está o seu valor: <b><?= $value ?></b></p>
Você pode usar helpers em e-mails, bem como você pode em arquivos de modelo
normais. Por padrão, somente o HtmlHelper é carregado. Você pode carregar
helpers adicionais usando os métodos helpers():
$email->helpers(['Html', 'Custom', 'Text']);
Ao definir ajudantes se esqueça de incluir ‘Html’ ou ele será removido do helpers carregado no seu template de e-mail.
Se você quiser enviar e-mail usando templates em um plugin, você pode usar o familiar Sintaxe Plugin para faze-lô:
$email = new Email();
$email->template('Blog.new_comment', 'Blog.auto_message');
O acima usaria templates a partir do plug-in Blog como um exemplo.
Em alguns casos, pode ser necessário substituir o template padrão fornecido pelo
plugins. Você pode fazer isso usando temas, dizendo par ao E-mail usar o tema
apropriado usando o método Email::theme():
$email = new Email();
$email->template('Blog.new_comment', 'Blog.auto_message');
$email->theme('TestTheme');
Isso permite que você substituir o new_comment em seu tema, sem modificar o
plug-in Blog. O arquivo de template precisa ser criado no seguinte caminho:
src/Template/Plugin/TestTheme/Blog/Email/text/new_comment.ctp.
Cake\Mailer\Email::attachments($attachments = null)¶Você pode anexar arquivos a mensagens de email também. Há alguns diferentes formatos, dependendo do tipo de arquivos que você tem, e como você quer os nomes dos arquivos para aparecer no email do destinatário:
String: $email->attachments('/full/file/path/file.png') irá anexar este
arquivo com o nome file.png.
Array: $email->attachments(['/full/file/path/file.png']) tem o mesmo
comportamento como o uso de uma String.
Array com chave:
$email->attachments(['photo.png' => '/full/some_hash.png']) irá anexar
alguns hash.png com o nome photo.png. O destinatário verá photo.png, não
hash.png.
Arrays aninhados:
$email->attachments([
    'photo.png' => [
        'file' => '/full/some_hash.png',
        'mimetype' => 'image/png',
        'contentId' => 'my-unique-id'
    ]
]);
O acima irá anexar o arquivo com diferentes mimetypes e com identificação de conteúdo personalizado (quando definir o ID de conteúdo do anexo é transformado para linha). O mimetype e contentId são opcionais nessa forma.
4.1. Quando você estiver usando o contentId, você pode usar o arquivo no
corpo HTML como <img src="cid:my-content-id">.
4.2. Você pode usar a opção contentDisposition conteúdo para desativar
cabeçalho Content-Disposition para um anexo. Isso é útil quando é feito o
envio de convites para o iCal para clientes usando o Outlook.
4.3 Em vez de a opção file você pode fornecer o conteúdo do arquivo como
uma string usando a opção data. Que lhe permite anexar arquivos sem a
necessidade de caminhos de arquivo para eles.
Transportes são classes atribuídas a enviar o e-mail sobre algum protocolo ou método. CakePHP suporta o o transporte de Mail (padrão), Debug e SMTP.
Para configurar o método, você deve usar o método
Cake\Mailer\Email::transport() ou ter o transporte em sua
configuração:
$email = new Email();
// Usar um transporte chamado já configurado usando Email::configTransport()
$email->transport('gmail');
 // Usando um método Construtor
$transport = new DebugTransport();
$email->transport($transport);