Laravel отправка почты: обзор 5 основных драйверов

Дата публикации: 13.09.2017

laravel-pochtaВсем привет! 🙂

Те, кто подписан на обновления проекта, и следит за выходом статей знают, что в прошлой публикации мы на примере создания формы обратной связи рассмотрели реализацию популярной технологии AJAX в Laravel.

В ней мы реализовали отправку запроса серверу и сценарий действий на сайте после получения ответа. Осталось только написать скрипт Laravel, отправляющий email сообщение администратору на сервере, вместо которого у нас сейчас стоит заглушка в виде вывода параметров запроса.

Сделать это я обещал в следующей статье, т.е. в текущей. Однако, при подготовке материала пришёл к выводу, что одной статьи будет мало для детального обзора всех способов Laravel email sending и полноценной реализации одного из них.

Поэтому я решил разнести написанное на две части: полноценный обзор всех способов отправки почты Laravel, который вас сегодня ждёт, и реализацию отправки письма одним из них с попутным обзором методов фасада Laravel Mail.

Прошу извинить меня тех, кто настраивался увидеть отправку почты сегодня, но я считаю, что поступаю правильно. Ещё спасибо мне скажете 😉

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

Поехали!

Особенности отправки почты в Laravel

Поскольку Laravel — PHP framework, то отправить email в коде можно средствами PHP, воспользовавшись функцией mail(). Или можно вообще воспользоваться сторонними приложениями типа sendmail, развернув их у себя на ПК в виде локального почтового сервера.

Эти способы рабочие, универсальные и гибкие в настройке, но на этом, по правде говоря, их преимущества заканчиваются. Спрашивается — «А что ещё нужно-то?» 🙂 Ответ большинства разработчиков будет прост — удобство.

К примеру, вам хочется украсить своё письмо, добавив туда HTML-разметку и CSS-стили. Отправка такого письма с помощью PHP mail() будет выглядеть примерно так:

<?php
$to = 'receiver@test.com';
$subject = 'Тестовое письмо с HTML';

$message = '
<html>
    <head>
        <title>Тестовое письмо с HTML</title>
        <meta charset="utf8">
    </head>
    <body>
        <p>Пример таблицы</p>
        <table>
            <tr>
                <th>Колонка 1</th><th>Колонка 2</th><th>Колонка 3</th><th>Колонка 4</th>
            </tr>
            <tr>
                <td>Ячейка 1</td><td>Ячейка 2</td><td>Ячейка 3</td><td>Ячейка 4</td>
            </tr>
            <tr>
                <td>Ячейка 5</td><td>Ячейка 6</td><td>Ячейка 7</td><td>Ячейка 8</td>
            </tr>
        </table>
    </body>
</html>
';

$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf8';
$headers[] = 'To: Receiver <receiver@test.com>';
$headers[] = 'From: Sender <sender@test.com>';
$headers[] = 'Cc: copy@test.com';

$result = mail($to, $subject, $message, implode("\r\n", $headers));
echo $result ? 'OK' : 'Error';

Если же воспользоваться API Laravel, то отправка такого же сообщения будет занимать всего пару строчек кода:

http://cccp-blog.com/wp-includes/images/banners/templatemonster/banner_content.jpg

Mail::send('emails.test', [], function ($message) {
            $m->from('sender@test.com', 'Sender');
            $m->to('receiver@test.com', 'Receiver')->subject('Тестовое письмо с HTML');
            $m->cc('copy@test.com', '');
        });

Единственное, HTML код шаблона будет размещаться в отдельном файле /resources/views/emails/test.blade.php, который указан в качестве первого аргумента.

В целом, как по мне, данный пример очень убедительно демонстрирует удобство API Laravel для отправки email.

Кстати, данная АПИ-шка в Laravel реализована на базе популярной библиотеки SwiftMailer, являющейся компонентом Symfony PHP framework, которые очень любят использовать разработчики Laravel.

Поэтому она уже входит в его комплект из коробки, и ставить её нет нужды.

Единственный минус, который я смог найти при настройке отправки почты в Laravel через его API, — это обильная порой возня с настройками и установкой дополнительных пакетов, чтобы тот или иной способ заработал. Но это частный минус.

Плюсов же по сравнению с нативными методами намного больше.

Во-первых, это — удобство использования.

Во-вторых, куча примочек в виде создания специальных Mailable классов, которые придают удобство при массовых рассылках однотипных писем в различных местах кода.

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

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

Laravel почта — настройка

Я сейчас говорю об использовании специальных драйверов для различных способов отправки писем в Laravel и экспериментов с файлами конфигураций .env, /config/mail.php и /config/services.php.

Если о драйверах мы поговорим далее, то со структурой файлов познакомимся сейчас.

Библиотека курсов

Из коробки в файле .env уже существует специальный блок переменных окружения для настроек отправки почты. Их легко узнать по приставке MAIL:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Ну, а что по поводу /config/mail.php и /config/services.php?

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

Практически все содержащиеся в нём параметры по умолчанию берут свои значения из файла окружения .env, расположенного в корне сайта, с помощью Laravel функции-хэлпера env().

Исключение составляют только следующие:

'from' => [
    'address' => 'hello@example.com',
    'name' => 'Example',
],

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

По поводу остальных параметров из mail.php — я буду изменять их в своём файле файле окружения, т.к. если я буду править сам конфиг, то мои настройки зальются в общий репозиторий и только будут вас сбивать.

Ну, и в файле services.php ситуация не сильно отличается от mail.php: практически все параметры берутся из .env.

Так что в дальнейшем я буду править .env, а вы просто повторяйте за мной. Кстати, поскольку для различных способов отправки email в Laravel будут требоваться различные переменные из стандартного набора, то те, которые содержатся у нас в .env сейчас с приставкой MAIL я просто удалю, чтобы не путаться.

Исключение составит только переменная окружения MAIL_ADMIN_EMAIL (если вы, конечно, создаёте сайт вместе во всеми по данному Laravel курсу и уже добавили её), которая нужна для указания email администратора для отображения его в сообщении об ошибке в форме обратной связи.

Ну, а в сами файлы конфигураций mail.php и services.php мы будем заглядывать лишь за тем, чтобы узнать имена необходимых переменных с целью их добавления или редактирования в .env.

Вот на этой ноте мы и переходим к обзору способов отправки почты в Ларавел и необходимых для этого настроек, где поговорим обо всём вышеперечисленном выше подробнее.

Отправка писем в Laravel через API почтовых сервисов

Первый способ отправки email в Laravel, который я решил рассмотреть, это — использование различных почтовых сервисов через их API.

Всё, что от вас потребуется для его реализации — это наличие аккаунта Mailgun, Mandrill, SparkPost или Amazon SES (на данным момент Laravel из коробки поддерживает только их) и установка необходимого пакета для реализации совместимости сервиса с Laravel.

Кстати, если вы там не зарегистрированы и не хотите к ним привязываться, то предлагаю сразу пропустить данный способ и попробовать следующие, которые более универсальны.

Настройки Laravel Mailgun

Для отправки почты через данный сервис в первую очередь необходимо установить в Laravel Guzzle HTTP library. Делать мы это будем, естественно, через пакетный менеджер Composer.

Итак, открываем консоль и переходим в каталог, где расположен наш Laravel проект. Выполняем следующую команду:

composer require guzzlehttp/guzzle

В консоли будет описываться порядок установки. После успешного завершения всё, что нам останется для завершения настроек — это дополнить файл окружения .env следующим кодом:

MAIL_DRIVER=mailgun
MAILGUN_DOMAIN = ваш_домен
MAILGUN_SECRET = ваш_ключ

Переменным MAILGUN_DOMAIN и MAILGUN_SECRET нужно указать значения, полученные после регистрации в Mailgun для использования его АПИ.

Настройки Laravel Mandrill

Для настройки отправки почты Laravel через данный сервис процедура будет во многом схожа с предыдущим. Для начала устанавливаем Guzzle HTTP library.

А затем идём в Laravel .env и добавляем следующее:

MAIL_DRIVER=mandrill
MANDRILL_SECRET = ваш_ключ

Переменной MANDRILL_SECRET нужно указать значение, полученное вами при регистрации в Mandrill для использования его АПИшки.

Кстати! Процедура настройки Mandrill в официальной документации Laravel в последний раз была описана для версии Laravel 5.2, но, судя по коду движка, использование данного сервиса доступно до сих пор (видимо, решили оставить для работы старых приложений).

Поскольку в новых версиях фреймворка создатели Laravel по каким-то причинам решили отказаться от Mandrill, то придётся немного пошаманить и добавить в /config/services.php следующий блок для успешной отправки писем:

'mandrill' => [
    'secret' => env('MANDRILL_SECRET'),
],

Настройка Laravel SparkPost

Поддержка данного сервиса, если верить официальной документации, появилась в Laravel 5.3. Поэтому если у вас приложение использует более раннюю версию фреймворка, то данный способ у вас не сработает. Либо обновите Laravel, либо воспользуйтесь другим способом (благо, их хватает).

Для успешного использования SparkPost нам потребуется всё та же Guzzle HTTP library и следующие переменные окружения в файле .env:

MAIL_DRIVER=sparkpost
SPARKPOST_SECRET = ваш_ключ

Настройка Laravel Amazon SES

Данный почтовый сервис, как и SparkPost, появился в Laravel 5.3, придя на замену Mandrill. Поэтому, если вы используете более раннюю версию движка, то вам стоит либо обновиться, либо использовать другой способ отправки email в Laravel.

Его настройка будет слегка отличаться от предыдущих почтовых сервисов, т.к. для его поддержки в Laravel потребуется не знакомая уже Guzzle HTTP library, а другой пакет — Amazon AWS SDK for PHP, который устанавливается следующей командой в консоли:

composer require aws/aws-sdk-php:3.*

После установки дополняем файл .env следующими переменными окружения:

MAIL_DRIVER=ses
SES_KEY=ваш_ключ
SES_SECRET=ваш_секретный_ключ

Думаю, и так понятно, что значения ключей вам должны быть доступны после регистрации в Amazon SES. Кстати, не забудьте проверить код своего региона, сгенерированный Amazon. Если он будет не ‘us-east-1’, то зайдите в файл /config/services.php и задайте необходимое значение параметру ‘ses'[‘region’].

На этом обзор поддерживаемых Laravel API почтовых сервисов подходит к концу. Переходим к обзору следующего способа отправки почты.

Отправка почты в Laravel через SMTP

Думаю, что многие в курсе о протоколе передачи почты SMTP. Так же, многие знают, что практически все современные почтовые сервисы предоставляют свои SMTP-сервера для отправки почты с сайтов через них.

По сути, предыдущий способ отправки почты в Laravel через почтовые сервисы — это то же самое, что и текущий. За тем лишь исключением, что в первом случае мы отправляем письма через API сервиса, а во втором — обращаясь к почтовому серверу напрямую.

Ну, и при отправке через SMTP вы можете пользоваться любым почтовым сервисом, который предоставляет такую возможность (Gmail, Яндекс Почта и т.д.), а взаимодействую с сервисом по АПИ, вы имеете доступ лишь к избранным, которые поддерживает Laravel. Вот и вся разница 🙂

Всё, что нужно сделать пользователям, чтобы воспользоваться возможностью отправки писем в Laravel через SMTP — это зарегистрироваться в сервисе и узнать настройки подключения к SMTP-серверу (адрес или доменное имя сервера, порт, шифрование и т.д.).

Ну, и ввести их в Laravel должным образом:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=ваше_имя_пользователя
MAIL_PASSWORD=ваш_пароль
MAIL_ENCRYPTION=tls

Выше приведён пример настроек Laravel для отправки почты через SMTP сервер почтового сервиса Google — Gmail. Я решил выбрать именно его, т.к. почтовый ящик gmail.com есть, наверное, практически у всех, поэтому данный способ подойдёт большинству.

Laravel почта — отправка с помощью PHP mail()

Спрашивается — «Что это за ерунда?» :-). Зачем использовать PHP mail() в качестве драйвера для отправки почты, если можно напрямую вызвать эту функцию в коде? Ответ всё тот же, что и ранее — для удобства, т.к. при использовании драйвера мы получаем возможность использовать API Laravel для «прокачанной» и более удобной отправки писем.

Итак, какой будет порядок настройки?

Для данного способа он будет самым что ни на есть примитивным. Достаточно будет содержания в файле окружения .env следующей строки:

MAIL_DRIVER=mail

Отправка письма в Laravel через sendmail

Скажу честно, о том, что с sendmail я познакомился сравнительно недавно. Ровно тогда, когда узнал, что в Laravel есть возможность отправлять email с помощью данной штуки.

Поэтому позволю сделать небольшое вступление для таких же, как я, о том, что такое sendmail.

Sendmail, как гласит Wikipedia — это один из древнейших агентов отправки почты на уровне ОС.
На данным момент существуют версии данного приложения практически под все операционные системы и аппаратные платформы.

Почти во всех Unix-подобных системах имеется в базовой комплектации. Для запуска под Windows, насколько я успел заметить, нужно дополнительно скачивать.

Распространяется бесплатно в виде исполняемого файла с конфигами и исходным кодом. Таким образом, для запуска sendmail необходимо будет запустить его исполняемый файл.

Ну, а для отправки почты в Laravel с помощью sendmail во-первых, нужно указать соответствующий драйвер в файле окружения .env:

MAIL_DRIVER=sendmail

И поскольку отправка email будет осуществляться с помощью системной утилиты, то фреймворку необходимо указать путь к её исполняемому файлу. Для этого в конфиге /config/mail.php есть специальный параметр, в качестве значения которого прописываем путь к sendmail на сервере (или локальной машине):

'sendmail' => '/usr/sbin/sendmail -bs',

В данном примере приведён код по умолчанию, который будет работать на Unix-подобных системах.

Laravel почта — запись логов

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

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

Чтобы включить данную возможность в Laravel, необходимо выполнить примитивную настройку, как и в случае использования PHP mail(). Достаточно всего лишь указать драйвер отправки почты в .env:

MAIL_DRIVER=log

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

[2017-09-12 08:23:06] local.DEBUG: Message-ID: <1e820046bbb4076f545196829aa701eb@laravel.portfolio>
Date: Tue, 12 Sep 2017 08:23:06 +0000
Subject: Your Subject
From: Sender <receiver@test.com>
To: Receiver <receiver@test.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Test  

Напоминаю, что при использовании данного драйвера отправка письма на почту пользователя не производится, поэтому им пользоваться можно только при локальной разработке для настройки итогового сообщения, и ни в коем случае не в Production окружении.

А также, запись производится в файл логов Laravel /storage/logs/laravel.log, а не в логи сервера.

Выбираем оптимальный способ отправки email в Laravel

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

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

Итак, на повестке для у нас отправка email через почтовые сервисы по их API, через SMTP сервера, с помощью PHP mail() и sendmail. Запись в логи по понятным причинам способом отправки email мы не считаем, т.к. она при использовании драйвера log не производится. Однако, совсем игнорировать использование данного драйвера тоже не стоит, т.к. он представляет собой удобный инструмент дебага, и им рекомендуется пользоваться перед реальной отправкой почты, чтобы излишне не нагружать сервер и почтовые сервисы не заблокировали ваш сайт, как генератор спама.

Другое дело, что записи в логах позволят вам отследить сам факт оправки email и возникающих при этом ошибок, однако никак не помогут в коррекции вёрстки шаблона письма. Но, для этого в Laravel есть удобный инструмент предпросмотра письма в браузере, о котором мы с вами обязательно поговорим в дальнейшем.

Итак, какой же способ отправки писем в Laravel нам выбрать?

Отправка email в Laravel через почтовые сервисы с помощью API и через SMTP сервера — это, по сути, одно и то же, т.к. в обоих случаях письма будут отправляться не с сервера на котором расположен сайт, а со стороннего. Единственное различие в них — это порядок взаимодействия. В первом случае вы общаетесь с почтовым сервисом путём специальных API-методов, а во втором — посылаете запрос на сервер для отправки почты.

Таким образом, при использовании API список возможностей у вас может быть немного шире, чем при отправке email через SMTP. Но, по крайней мере, при стандартном использовании API Laravel для отправки писем и библиотеки SwiftMailer мы этих возможностей не ощутим.

Также, как утверждают некоторые разработчики, при отправке писем через SMTP сервер фиксируется IP адрес, с которого идёт обращение к серверу, что может быть нежелательно в отдельных случаях.

Ну, и при работе через API скорость взаимодействия может быть слегка выше, чем при использовании SMTP серверов. По крайнем мере, так утверждает Mailgun. А как оно на самом деле — честно говоря, не проверял 🙂 Так что если вы располагаете более точной и полной информацией по данному поводу, то прошу поделиться ей в комментариях.

По поводу использования PHP mail() и sendmail — эти подходы, как и предыдущие, довольно похожи. Их главным сходством является отправка писем на сервере, на котором расположен сайт. Остальные различия заключаются в субъективном удобстве настройки, потреблению серверных ресурсов и т.д.

Но, как по мне, эти расхождения настолько мизерны, что стремятся к нулю, поэтому углубляться в их описание я не стану. Тем более, что многие из них просто стирает Laravel при использовании его API для настройки и использовании перечисленных способов.

Если вдруг я забыл о чём-то принципиально важном — просьба исправить меня в комментариях под статьёй.

Рассылка писем в Laravel на сервере приложения или через сторонний?

Итак, наши четыре основных способа отправки писем в Laravel разделились на две группы, главным различием которых является подход к рассылке почты.

В первую попали использование почтовых сервисов через АПИ и их SMTP серверов, а во вторую — эксплуатация PHP mail() и sendmail. Внутри групп отличия между способами незначительны, а вот при сравнении групп в целом есть что сказать.

К неоспоримым преимуществам отправки email на сервере приложения (сервер, на котором работает приложение/сайт) над использованием стороннего можно отнести неограниченное количество отправляемых сообщений (может быть ограничено лишь возможностями сервера и тарифным планом хостинга). Но, в то же время, часть писем (если не все) попадают в папку «Спам» на почтовом клиенте и, следовательно, шансы, что получатель ознакомится с вашей корреспонденцией вовремя, катастрофически мизерны.

По крайней мере, так пишут, ссылаясь на изменение серверами заголовков запроса перед отправкой. Хотя лично у меня при использовании PHP mail() таких ситуаций не было благодаря корректному указанию заголовков в коде.

Ну, и ещё к минусам отправки почты с сервера приложения можно отнести расход серверных ресурсов, что при использовании виртуального хостинга и больших объёмов писем может стать существенным недостатком.

Если говорить о второй группе способов отправки писем в Laravel (использование API и SMTP серверов почтовых сервисов), то у них данный момент является самым главным преимуществом, т.к. письма отсылаются на сторонних серверах, т.е. расходуются их ресурсы, а не ваши. Зато вы будете постоянно упираться в ограничения, т.к. при использовании бесплатных тарифов количество email лимитировано и колеблется в пределах от 10000 в месяц для MailGun, заканчивая 60000 у Gmail и Amazon SES.

У некоторых почтовых сервисов, кстати, вообще нет бесплатных тарифов, как у SparkPost, к примеру. Естественно, вас будут уверять в других преимуществах использования почтовых сервисов, которые становятся доступными в премиум-аккаунтах… Не удивлюсь, если выяснится, что мифы о спамности PHP mail() выдуманы ими же 😉

Всё может быть… Нужно же им как-то существовать и конкурировать не только друг с другом, но и с бесплатными аналогами. Но я более не намерен продолжать данный разговор, т.к. ни первые, ни вторые за рекламу мне не платят 🙂

Вернёмся к реальным и объективным особенностям. И тут хочется сказать, что даже если закрыть глаза на искусственные ограничения числа писем, отправка почты через сторонний сервис сама обладает рядом недостатков. К числу одним из самых главных хочется отнести большую продолжительность процедуры отправки email, в частности, через SMTP Gmail, которую я заметил на практике.

Ну сами посудите: если для отправки письма на сервере приложения вам нужно отправить локальный запрос и получить от него ответ, то при использовании сторонних сервисов их сервера могут располагаться в другой стране, а то и на другом континенте (чуть не написал планете :-)), куда запрос и ответ на него будет идти намного дольше первого варианта.

Прибавьте к этому ещё время ожидания очереди (вас же не одного обслуживают!) и самой обработки запроса. Думаю, понятно, к чему я веду 🙂

Возможно, что при рассылке сообщений порциями время запроса к локальному серверу и удалённому будут примерно равны, но при отправке одиночных сообщений почтовые сервисы проигрывают PHP mail(), sendmail и другим локальным средствам рассылки писем.

Да, во время этого действа тратятся ресурсы сторонних серверов, но за этот плюс приходится расплачиваться временем.

Но, тем не менее, отправка писем через API и SMTP сервера почтовых сервисов всё равно очень популярна среди разработчиков и клиентов. Тем более, что большие порции писем (массовые рассылки) часто производятся в фоновом режиме, и при этом абсолютно всё равно, сколько времени они занимают. Зато на больших проектах, где ресурсы серверов экономятся до предела ввиду большого количества выполняемых задач, возможность вынести часть процессов на сторонний ресурс весьма привлекательна и обоснованна.

Поэтому, исходя из данных соображений, я при дальнейшей разработке буду использовать отправку почты в Laravel через сторонние почтовые сервисы. А точнее, через SMTP Gmail. Почему именно этот способ? Потому что у меня там уже есть учётная запись, настроенная для использования SMTP сервера, а на других почтовиках нет, и мне лень её создавать 🙂

Это абсолютно не значит, что данный метод идеален (сами могли убедиться, сколько минусов у него удалось найти). Даже сам заголовок о выборе наиболее оптимального способа отправки почты в Laravel не совсем корректен, но нужно же было вас как-то заинтересовать прочитать весь материал 🙂 Тем более, что теперь вы познакомились с достоинствами и недостатками каждого подхода и сможете самостоятельно выбрать то, что вам больше по душе или подходит в конкретной ситуации.

На этом сегодняшняя статья с обзором способов отправки почты в Laravel подходит к концу. Надеюсь, вы теперь понимаете моё желание разделить теорию и практику реализации отправки email в Ларавель на разные публикации, т.к. одна статья обо всё этом была бы просто необъятной и вы бы половину её не читали бы… А так есть мизерный шанс, что вы дошли до этих строк 🙂 Если да — с вас лайк под статьёй.

Ну, а следующую публикацию я уже целенаправленно посвящу реализации отправки email через API Laravel, для чего воспользуюсь методами фасада Mail и подробно опишу его возможности. Остальные возможности API рассмотрим уже дальше, когда у нас будет готовый к работе сайт. Да и, возможно, не все этого и захотят…

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

До скорой встречи!

P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.

Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.

Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.

И с друзьями не забудьте поделиться 😉

Понравилась статья? Поделись с друзьями:
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
30 голосов, в среднем: 4.9 из 5

Похожие темы

23 комментария к статье "Laravel отправка почты: обзор 5 основных драйверов"

  1. Илья

    Спасибо за труды, сейчас как раз начинаю изучать Laravel, и эти статьи пожалуй самое актуальное и понятное, что я пока нашёл, по оф. документации, в которой нет реальных примеров, изучить что-либо крайне сложно. Очень хотелось бы почитать про работу с БД (миграции, модели и т.п.), это ведь одна из важнейших частей для проектов. Надеюсь, там тоже всё будет ок, и можно будет уже уверенно признать превосходство фреймворка над нативным php.

    1. Pashaster Автор

      Спасибо и Вам за тёплые слова 🙂

      По поводу работы с БД — данный материал обязательно будет.

  2. Edred

    Да, очень странный способ выбора тем для уроков. Рассказали про роуты, хорошо рассказали. Объяснили про контроллеры, самое начало, только как подключать. И все. И куда-то в сторону понесло — отправка почты, формы обратной связи… Я ждал, что узнаю про модели, про распределение кода между моделями и контроллерами (что-то там читал про «толстые контроллеры», не хочется повторять чужие ошибки), а тут подробно описывается взаимодействие с четырьмя зарубежными почтовыми сервисами (про три из которых я слышу первый и последний раз в жизни). И два урока сплошной воды, до самой отправки почты дело вообще не дошло (не говоря уж о том, что отправка почты сайтами — дело в десятки раз менее важное, чем взаимодействие с базами данных).

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

    1. Pashaster Автор

      Ну почему же странный выбор… Как по мне, то вполне логично. Только логика у всех разная, поэтому и не все мои действия понятны 🙂

      Я сейчас иду по логической цепочке разработки сайта, и дошёл до отправки почты через контактную форму, о которой захотелось рассказать поподробнее. Тем более, что здесь не всё так просто и будут рассматриваться различные примочки Laravel типа Mailable классов и организации очередей.

      А модели с их связями — до них ещё время не дошло, планирую подробно их рассматривать при создании админки и записей для блога. Жаль только, что моментов, о которых хочется рассказать, больше, чем свободного времени 🙂

      1. Edred

        Постараюсь сформулировать свою мысль яснее. Вы собирались рассказать о Laravel на примере создания сайта-визитки с личным блогом. И начали это делать. Но потом почему-то в первую очередь акцентировались на форме обратной связи. Обратная связь — это когда люди хотят высказать свое мнение, замечания и пожелания по сайту, который они уже посмотрели. По блогу, который почитали. Но у нас нет еще никакого сайта, нет никакого блога — значит, нет и желающих что-то написать в форме обратной связи. Думать о этой форме просто слишком рано, надо сначала наполнить сайт, то есть написать шаблоны, подключить базу данных, написать нужные процедуры обработки материалов, а потом уже думать о письмах и прочем. ИМХО, естественно.

        Я легко могу быть неправ. Но я лично пришел сюда в поисках знаний о том зачем мне фреймворк, Laravel в частности, нужен. Чем он лучше программирования на чистом php. Какие дает плюсы. Что-то из этого я узнал, что-то нет. Дальше я хотел узнать как все устроено в фреймворке, что мне надо делать когда я соберусь переписывать свои сайты на нем. Частично ответ я на это получил — я уже понял как мне обрабатывать адреса, как маршрутизировать запросы, более-менее понятна идея шаблонов (хотя об этом рассказано лишь чуть-чуть), почерпнул прекрасные знания о токенах для форм (это очень нужно), но дальше дело застопорилось. Потому что мне бы разобраться как работать с БД через Laravel, куда девать кучу кода по обработке полученных из mysql данных, прежде чем выводить их в шаблонах страниц, а здесь идет рассказ о форме обратной связи и отправке писем. Вот, например, один из моих сайтов: bpnf.ru — на нем вообще нет формы обратной связи! Зачем? У меня прицеплен форум, это гораздо удобнее и лучше. И письма можно функциями форума отправлять. Да и вообще, я пользуюсь и пользовался услугами трех разных хостеров — у всех есть smtp-сервера, то есть настройка отправки почты заключается в прописывании четырех констант, а потом две строчки кода отправки самого письма. Сайты, писать которые вы учите, они же не на локальных компьютерах располагаются, в OpenServer их можно писать и отлаживать, но потом их же надо где-то в интернете размещать, а это хостинг — и там всегда есть как отправить письма.

  3. Руслан

    Не все используют хостинги, некоторые и выделенные/виртуальные сервера используют, где все окружение самому накатывать приходится, и тогда довольно часто проще использовать сервисы типо mandrill, чем поднимать свой почтовый сервер. Проекты ведь разных уровней бывают, и часто выделенные/виртуальные сервера проще масштабировать/контролировать/гибче настраивать и они дешевле обходятся. А по поводу последовательности изложения материала, думаю это личное дело автора, денег вроде он за свои труды ни с кого не берет, да и не всегда думаю есть свободное время на написание материала, что-то откладывается, что-то меняется местами и т.д.

    1. Edred

      Безусловно, вы правы. Я ведь не требую у автора изменить последовательность написания уроков, я лишь сожалею о том, что, с моей личной точки зрения, это немного непоследовательно. Что мне придется искать другие материалы для обучения в интернете, а я бы предпочел прочитать то, что мне нужно, тут, так как автор этих статей принадлежит к весьма немногочисленному сообществу людей, которые умеют излагать материал внятно и доходчиво. К сожалению, авторы подавляющего большинства разных уроков по Laravel в русском сегменте интернета такими качествами не обладают (а на английском языке мне читать учебные материалы некомфортно, я не владею английским в совершенстве).

      1. Pashaster Автор

        Спасибо за признание моих заслуг 🙂 Собственно говоря, я и начал заниматься тем, чем занимаюсь, т.к. в своё время, когда осваивал Laravel, не мог ничего путного найти в Рунете. Максимум — куски кода без всяких объяснений, что с ними делать.

        А по поводу остального — как я уже и говорил, мне катастрофически не хватает времени, т.к. данный проект — это всего лишь моё хобби наряду с остальными.

        Если бы оно приносило мне те деньги, что и основная работа, то я бы с удовольствием занимался исключительно написанием статей. Но, к сожалению, это далеко не так 🙁

  4. Vit

    Уважаемый Автор! для какой версии Laravel актуален материал?

  5. алик

    Sorry, за дилетантский вопрос. Расскажите пожалуйста так же детально как получить домен и ключ на сервисах Mandrill и других. Ведь без них тормоза в самом начале.

    1. Pashaster Автор

      Всё просто — зарегистрироваться на самом почтовом сервисе 🙂 А дальше — если информацию явно найти не получится, то для этого есть ихний саппорт.

  6. utro00

    Спасибо!
    Прекрасная статья, ничего лишнего, все внятно и по делу. Чувствуется, что автор не сторонник SEO халтуры.
    Единственное, хочется предложить. Попробую объяснить.
    Я попал сюда в поисках документации по отправке писем в Laravel. Прочел интересную статью по теме, тем более в конце обещали приступить к конкретике. Но ссылки на продолжение темы нет, пришлось искать. Я думаю, если в конце статьи будут прямые ссылки в развитие описанной тематики, а не только на другие статьи, трафик к вам только увеличится.
    Еще раз спасибо за материал.

    1. Pashaster Автор

      Добрый день! Спасибо за отзыв.

      А что конкретно об отправке писем вы хотели ещё узнать?

      1. utro00

        Доброго дня!
        С отправкой почты с Laravel через PHP mail() справился, так что моя проблемка решена. Но если вы планируете статьи по теме Laravel, то, на мой взгляд малоопытного PHP-ника, в Laravel документации «Работа с e-mail» невнятно прописана, поэтому я не стал заморачиваться(как всегда дефицит времени), а «додавил» почту через стандартные средства PHP. Если будет время и желание, то небольшая статья с коротенькими примерами(как в этой), возможно была бы актуальна.

        1. Pashaster Автор

          Похоже, я вас понял 🙂 То, что вы хотите увидеть, написано в статье про Laravel Mail.

          Единственное, чем отличается данная информация от той, что изложена в официальной документации, что я не использовал фасад Laravel Mailable, который появился сравнительно недавно — в Laravel 5.3, и разработчики рекомендуют его использовать вместо Laravel Mail.

          В будущем я о них тоже статью напишу, но тогда, когда появится необходимость их реального использования в рамках тестового проекта, который я создаю в рамках данных Laravel публикаций. Для отправки разовых email мне лично Laravel Mail нравится больше, чем Laravel Mailable.

    1. me

      ты что, угараешь? это PHP функция, ларик то тут причем?))

      1. Pashaster Автор

        Если речь об отправке почты в Laravel с помощью mail драйвера, то, как я и говорил, функция используется из набора PHP — mail(), но обёрточные методы для указания отправителя, получателя и прочих параметров используются из API Laravel.

        Так что никакого подвоха 🙂 Читайте информацию внимательнее.

  7. Александр

    Доброго времени суток. Можно в общих чертах узнать, что значит «…благодаря корректному указанию заголовков в коде»? Какие заголовки можно считать корректными и не корректными? Спасибо.

    1. Pashaster Автор

      Здравствуйте. В начале статьи пример использования функции mail() с корректными заголовками, защищающими от попадания письма в спам.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *