{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11}} == Введение == Laravel предоставляет простой API к популярной библиотеке ((http://swiftmailer.org/ SwiftMailer)) c драйверами для SMTP, Mailgun, Mandrill (для Laravel 5.2 и ранее), SparkPost, Amazon SES, функции PHP ((php:mail)), и %%(t)sendmail%%, поэтому вы можете быстро приступить к рассылке почты с помощью локального или облачного сервиса на ваш выбор. === Требования для драйверов === Драйверы на основе API, такие как Mailgun и SparkPost, зачастую работают проще и быстрее, чем SMTP-серверы. По возможности лучше использовать именно их. Для работы таких драйверов необходима HTTP-библиотека Guzzle, которую можно установить через менеджер пакетов Composer: %%(sh) composer require guzzlehttp/guzzle %% **Драйвер Mailgun** Для использования драйвера Mailgun установите Guzzle и задайте для параметра %%(t)driver%% значение %%(t)mailgun%% в конфигурационном файле %%(t)config/mail.php%%. Затем проверьте, что в конфигурационном файле %%(t)config/services.php%% есть следующие параметры: %% 'mailgun' => [ 'domain' => 'your-mailgun-domain', 'secret' => 'your-mailgun-key', ], %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) **Драйвер Mandrill** Для использования драйвера Mandrill установите Guzzle и задайте для параметра %%(t)driver%% значение %%(t)mandrill%% в конфигурационном файле %%(t)config/mail.php%%. Затем проверьте, что в конфигурационном файле %%(t)config/services.php%% есть следующие параметры: ~%% 'mandrill' => [ 'secret' => 'your-mandrill-key', ], ~%% %% %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) **Драйвер SparkPost** Для использования драйвера SparkPost установите Guzzle и задайте для параметра %%(t)driver%% значение %%(t)sparkpost%% в конфигурационном файле %%(t)config/mail.php%%. Затем проверьте, что в конфигурационном файле %%(t)config/services.php%% есть следующие параметры: ~%% 'sparkpost' => [ 'secret' => 'your-sparkpost-key', ], ~%% %% **Драйвер SES** Чтобы использовать драйвер Amazon SES, сначала установите Amazon AWS SDK для PHP. Вы можете установить эту библиотеку, добавив следующую строку в раздел %%(t)require%% файла %%(t)composer.json%% и выполнив команду %%(sh)composer update%%: %% "aws/aws-sdk-php": "~3.0" %% Затем задайте для параметра %%(t)driver%% значение %%(t)ses%% в конфигурационном файле %%(t)config/mail.php%% и проверьте, что в конфигурационном файле %%(t)config/services.php%% есть следующие параметры: %% 'ses' => [ 'key' => 'your-ses-key', 'secret' => 'your-ses-secret', 'region' => 'ses-region', // например, us-east-1 ], %% %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) == Создание отправляемых объектов == В Laravel каждый отправляемый приложением тип email-сообщения представлен "отправляемым" классом. Эти классы хранятся в папке %%(t)app/Mail%%. Если у вас нет такой папки, она будет сгенерирована при создании первого отправляемого класса командой %%(sh)make:mail%%: %%(sh) php artisan make:mail OrderShipped ~%% == Написание отправляемых объектов == Все настройки отправляемого класса происходят в методе %%build()%%. В этом методе вы можете вызывать различные другие методы, такие как %%from()%%, %%subject()%%, %%view()%% и %%attach()%%, для настройки содержимого и доставки email-сообщения. === Настройка отправителя === **Используя метод %%from()%%** Сначала давайте рассмотрим настройку отправителя email. Другими словами - от кого будет приходить email. Есть два способа настроить отправителя. Первый - с помощью метода %%from()%% в методе %%build()%% вашего отправляемого класса: ~%% /** * Создание сообщения. * * @return $this */ public function build() { return $this->from('example@example.com') ->view('emails.orders.shipped'); } ~%% **Используя глобальный адрес %%(t)from%%** Если ваше приложение использует одинаковый адрес отправителя для всех своих email-сообщений, то будет излишне вызывать метод %%from()%% в каждом генерируемом классе. Вместо этого вы можете указать глобальный адрес %%(t)from%% в файле настроек %%(t)config/mail.php%%. Этот адрес будет использован тогда, когда в отправляемом классе не указан никакой другой адрес отправителя: ~%% 'from' => ['address' => 'example@example.com', 'name' => 'App Name'], ~%% === Настройка представления === В методе %%build()%% отправляемого класса вы можете использовать метод %%view()%% для указания шаблона для построения содержимого email-сообщения. Поскольку обычно для построения содержимого всех email-сообщений используется ((//docs/v5/blade Blade-шаблон)), вам доступна вся мощь и всё удобство шаблонизатора Blade для создания HTML-кода ваших email-сообщений: ~%% /** * Создание сообщения. * * @return $this */ public function build() { return $this->view('emails.orders.shipped'); } ~%% .(alert) Вы можете создать папку %%(t)resources/views/emails%% для размещения всех ваших email-шаблонов, или любую другую папку в каталоге %%(t)resources/views%%. **Текстовые email-сообщения** Если вы хотите определить текстовую версию вашего email, используйте метод %%text()%%. Подобно методу %%view()%% метод %%text()%% принимает имя шаблона, который будет использован для построения содержимого email-сообщения. Вы можете определить обе версии вашего сообщения - HTML и текстовую: ~%% /** * Создание сообщения. * * @return $this */ public function build() { return $this->view('emails.orders.shipped') ->text('emails.orders.shipped_plain'); } ~%% === Данные представления === **Через общедоступные свойства** Обычно необходимо передать какие-либо данные в представление, которые можно использовать при построении HTML-кода email-сообщения. Есть два способа сделать данные доступными для вашего представления. Первый - любое общедоступное (%%(t)public%%) свойство, определённое в вашем отправляемом классе, автоматически станет доступным для представления. Например, вы можете передать данные в конструктор вашего отправляемого класса и поместить эти данные в общедоступные свойства, определённые в классе: ~%% order = $order; } /** * Создание сообщения. * * @return $this */ public function build() { return $this->view('emails.orders.shipped'); } } ~%% Когда данные помещены в общедоступное свойство, они автоматически станут доступны в вашем представлении, и вы можете обращаться к ним как к любым другим данным Blade-шаблонах: ~%%