Tabela de conteúdos
Mail com Laravel
Introdução
Laravel provê uma API construida sobre a biblioteca SwiftMailer com drivers para STMP, Mailgun, SparkPost, Amazon SES, funções PHP's mail e sendmail, permitindo rapidamente implementar o envio de e-mail, seja localmente, quer seja por serviços em nuvem.
Pré-requisitos
A API baseada nos drives Mailgun e SparkPost são geralmente mais simples e rápidos que os serviços SMTP. Se possível, deve-se usar um desses drivers. Todos os driver da API requerem a biblioteca Guzzle HTTP, que pode ser instalada via gerenciador de pacotes Composer.
composer require guzzlehttp/guzzle
Mailgun Driver
Para usar o Driver Mailgun, deve-se primeiramente instalar o Guzzle, então, atribui-se a opção driver
no arquivo de configuração config/mail.php
para mailgun
. Em seguida, deve-se verificar se o arquivo de configuração config/serveces.php
contêm as seguintes opções:
'mailgun' ⇒ [
'domain' ⇒ 'your-mailgun-domain',
'secret' ⇒ 'your-mailgun-key',
],
SparkPost Driver
Para usar o Driver SparkPost, deve-se primeiramente instalar o Guzzle, então, atribui-se a opção driver
no arquivo de configuração config/mail.php
para sparkpost
Em seguida, deve-se verificar se o arquivo de configuração config/serveces.php
contêm as seguintes opções:
'sparkpost' ⇒ [
'secret' ⇒ 'your-sparkpost-key',
],
SES Driver
Para usar o Driver Amazon SES, deve-se primeiramente instalar o Amazon AWS SDK
para PHP. Para isso, deve-se adicionar a linha de código a seguir no arquivo composer.json
na seção require
e executar o comando composer update
:
“aws/aws-sdk-php”: “~3.0”
Em seguida, atribui-se a opção driver
no arquivo de configuração config/mail.php
para ses
e verifica-se o arquivo de configuração config/serveces.php
para assegurar se o mesmo contêm as seguintes opções:
'ses' ⇒ [
'key' ⇒ 'your-ses-key',
'secret' ⇒ 'your-ses-secret',
'region' ⇒ 'ses-region',
],
Gerando Mailables
Em Laravel, cada tipo de email enviado pela aplicação é representada como uma classe mailable
. Essa classe está armazenada no diretório app/Mail
. Para criar um mailable, pode-se usar o comando make:mail
:
php artisan make:mail OrderShipped
Escrevendo Mailables
Toda a configuração de uma classe mailable é feito no método build
. Com este método, pode-se chamar vários outros métodos como from
, subject
, view
e attach
para configurar o email.
Configurando o Sender
Usando o método from
Há duas formar de configurar o sender. Primeiramente, pode-se usar o método from
com o método build
da classe mailable:
public function build()
{
return $this→from('example@example.com')
→view('emails.orders.shipped');
}
Usando um endereço from global
Toda via, se a aplicação usa um mesmo endereço remetente para qualquer envio, pode-se tornar custoso chamar o método from em cada classe mailable. Contudo, pode-se especificar um endereço remetente global no arquivo de configuração config/mail.php
. Este endereço é usado se nenhum outro endereço remetente for especificado na classe mailable.
from' ⇒ ['address' ⇒ 'example@example.com', 'name' ⇒ 'App Name'],
Configurando a View
Em um método build
de uma classe mailable, pode-se utilizar o método view
para especificar qual template deve ser usado quando renderizar o conteúdo do e-mail. Uma vez que cada e-mail tipicamente usa um blade template
para renderizar o conteúdo, tem-se toda a conveniência do blade
para construir e-mails com HTML.
public function build()
{
return $this→view('emails.orders.shipped');
}
Você talvez deseja criar um diretórioresources/views/emails
para hospedar todos os seus templates de emails; toda via, você é livre para armazená-los onde você desejar, desde que dentro do diretórioresources/views
.
Enviando e-mail
Para enviar um email, usa-se o método to
no facade Mail
. O método to
aceita um endereço de email, uma instância de user
, ou uma coleção de users
. Se for passado um objeto ou uma coleção deles, o mailer irá usar suas propriedades email
e name
quando configurar o e-mail, devendo confirmar que esses atributos estão disponíveis no objeto passado. Uma vez especificados, pode-se passar uma instância da classe mailable para o método send
:
class OrderController extends Controller {
public function ship(Request $request, $orderId){
$order = Order::findOrFail($orderId);
Mail::to($request→user())→send(new OrderShipped($order));
}
}