Версия фреймворка:
5.4 4.2
Прогресс перевода
Перевод немного отстаёт от оригинала. Коммитов не переведено: 1

Работа с e-mail

Настройка

Laravel предоставляет простой интерфейс к популярной библиотеке SwiftMailer. Главный файл настроек - app/config/mail.php - содержит всевозможные параметры, позволяющие вам менять SMTP-сервер, порт, логин, пароль, а также устанавливать глобальный адрес from для исходящих сообщений. Вы можете использовать любой SMTP-сервер, либо стандартную функцию PHP mail - для этого установите параметр driver в значение mail. Кроме того, доступен драйвер sendmail.

Основы использования

Метод Mail::send используется для отправки сообщения:

Mail::send('emails.welcome', $data, function($message)
{
	$message->to('foo@example.com', 'Джон Смит')->subject('Привет!');
});

Первый параметр - имя шаблона, который должен использоваться для текста сообщения. Второй - массив переменных, передаваемых в шаблон. Третий - функция-замыкание, позволяющая вам внести дополнительные настройки в сообщение.

Примечание: переменная $message всегда передаётся в ваш шаблон и позволяет вам прикреплять вложения. Таким образом, вам не стоит передавать одноимённую переменную в массиве $data.

В дополнение к шаблону в формате HTML вы можете указать текстовый шаблон письма:

Mail::send(array('html.view', 'text.view'), $data, $callback);

Вы также можете оставить только один формат, передав массив с ключом html или text:

Mail::send(array('text' => 'view'), $data, $callback);

Вы можете указывать другие настройки для сообщения, например, копии или вложения:

Mail::send('emails.welcome', $data, function($message)
{
	$message->from('us@example.com', 'Laravel');

	$message->to('foo@example.com')->cc('bar@example.com');

	$message->attach($pathToFile);
});

При добавлении файлов можно указывать их MIME-тип и/или отображаемое имя:

$message->attach($pathToFile, array('as' => $display, 'mime' => $mime));
Примечание: Объект $message, передаваемый функции-замыканию метода Mail::send, наследует класс собщения SwiftMailer, что позволяет вам вызывать любые методы для создания своего сообщения.

Добавление встроенных вложений

Обычно добавление встроенных вложений в письмо обычно утомительное занятие, однако Laravel делает его проще, позволяя вам добавлять файлы и получать соответствующие CID.

Встроенные (inline) вложения - файлы, не видимые получателю в списке вложений, но используемые внутри HTML-тела сообщения; CID - уникальный идентификатор внутри данного сообщения, используемый вместо URL в таких атрибутах, как src - прим. пер.

Добавление картинки в шаблон сообщения

<body>
	Вот какая-то картинка:

	<img src="<?php echo $message->embed($pathToFile); ?>">
</body>

Добавление встроенной в html картинки (data:image)

<body>
	А вот картинка, полученная из строки с данными:

	<img src="<?php echo $message->embedData($data, $name); ?>">
</body>

Переменная $message всегда передаётся шаблонам сообщений классом Mail.

Очереди отправки

Помещение сообщения в очередь отправки

Из-за того, что отправка множества писем может сильно повлиять на время отклика приложения, многие разработчики помещают их в очередь на отправку. Laravel позволяет делать это, используя единое API очередей. Для помещения сообщения в очередь просто используйте метод Mail::queue():

Mail::queue('emails.welcome', $data, function($message)
{
	$message->to('foo@example.com', 'Джон Смит')->subject('Привет!');
});

Вы можете задержать отправку сообщения на нужное число секунд методом later:

Mail::later(5, 'emails.welcome', $data, function($message)
{
	$message->to('foo@example.com', 'Джон Смит')->subject('Привет!');
});

Если же вы хотите поместить сообщение в определённую очередь отправки, то используйте методы queueOn и laterOn:

Mail::queueOn('queue-name', 'emails.welcome', $data, function($message)
{
	$message->to('foo@example.com', 'Джон Смит')->subject('Привет!');
});

Локальная разработка

При разработке приложения обычно предпочтительно отключить доставку отправляемых сообщений. Для этого вы можете либо вызывать метод Mail::pretend, либо установить параметр pretend в значение true в файле настроек app/config/mail.php. Когда это сделано, сообщения будут записываться в файл журнала вашего приложения, вместо того, чтобы быть отправленными получателю.

Включение симуляции отправки

Mail::pretend();