Может войдёшь?
Черновики Написать статью Профиль

Работа с e-mail

перевод документация 4.x

  1. 1. Настройка
    1. 1.1. Драйверы API
    2. 1.2. Драйвер Log
  2. 2. Основы использования
  3. 3. Добавление строчных вложений
  4. 4. Очереди отправки
  5. 5. Локальная разработка
Этот перевод актуален для англоязычной документации на (ветка 4.2) , (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.

Настройка

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

+ 4.2

добавлено в 4.2 ()

Драйверы API

Также Laravel включает в себя драйверы для HTTP API Mailgun и Mandrill. Эти API часто работают проще и быстрее, чем SMTP-сервера. Для работы обоих драйверов необходимо, чтобы в вашем приложении была установлена HTTP-библиотека Guzzle 4. Вы можете добавить Guzzle 4 в свой проект, добавив такую строку в файл composer.json:

conf"guzzlehttp/guzzle": "~4.0"

Драйвер Mailgun

Для использования драйвера Mailgun установите для параметра driver значение mailgun в конфигурационном файле app/config/mail.php. Затем создайте конфигурационный файл app/config/services.php, если такого ещё нет в вашем проекте. Проверьте, что в нём есть следующие параметры:

conf'mailgun' => array(
  'domain' => 'your-mailgun-domain',
  'secret' => 'your-mailgun-key',
),

Драйвер Mandrill

Для использования драйвера Mandrill установите для параметра driver значение mandrill в конфигурационном файле app/config/mail.php. Затем создайте конфигурационный файл app/config/services.php, если такого ещё нет в вашем проекте. Проверьте, что в нём есть следующие параметры:

conf'mandrill' => array(
  'secret' => 'your-mandrill-key',
),

Драйвер Log

Если параметр driver в вашем конфигурационном файле app/config/mail.php имеет значение log, то все сообщения e-mail будут заноситься в ваши журналы и не будут отправляться адресатам. Это полезно в первую очередь для быстрой, локальной отладки и проверки данных.

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

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

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

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

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

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

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

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

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

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

PHP
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-тип и/или отображаемое имя:

PHP
$message->attach($pathToFile, array('as' => $display'mime' => $mime));

Объект, передаваемый замыканию метода PHPMail::send(), наследует класс собщения SwiftMailer, что позволяет вам вызывать любые методы для создания своего сообщения.

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

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

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

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

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

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

Добавление файла из потока данных

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PHP
Mail::pretend();

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.