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.
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
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',
],
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',
],
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',
],
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
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.
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');
}
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'],
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/emailspara hospedar todos os seus templates de emails; toda via, você é livre para armazená-los onde você desejar, desde que dentro do diretórioresources/views.
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)); }
}