Статьи

Отправка писем с помощью Laravel 4 и Gmail

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

Итак, мы возьмем это приложение для аутентификации (вы можете загрузить исходный код предыдущего урока на Github, чтобы дать вам отправную точку), которое мы закончили в прошлый раз, и добавим новую функцию, чтобы всякий раз, когда пользователь регистрируется на сайте, мы вышлю им подтверждение по электронной почте, приветствуя их в приложении!


Прежде чем мы сможем отправлять электронные письма с помощью Laravel 4, нам нужно настроить файл app/config/mail.php . В этом файле мы можем установить следующие параметры:

вариант Описание
driver Почтовый драйвер, который вы хотели бы использовать. По умолчанию это значение SMTP, но вы также можете изменить его, чтобы использовать функцию почты PHP или Sendmail.
host Это адрес вашего SMTP-сервера.
port Ваш порт SMTP.
from Это позволяет вам установить поле from в вашем письме, чтобы все письма отправлялись с одного адреса.
encryption Это протокол шифрования, который будет использоваться при отправке электронных писем.
username Это ваше имя пользователя SMTP.
password Это ваш пароль SMTP.
sendmail Это путь, по которому Sendmail можно найти на сервере при использовании драйвера sendmail.
pretend Если установлено значение true , сообщения электронной почты будут записываться в файл журнала, а не отправлять реальное сообщение электронной почты.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
return array(
 
    ‘driver’ => ‘smtp’,
 
    ‘host’ => ‘smtp.gmail.com’,
 
    ‘port’ => 587,
 
    ‘from’ => array(‘address’ => ‘authapp@awesomeauthapp. com’, ‘name’ => ‘Awesome Laravel 4 Auth App’),
 
    ‘encryption’ => ‘tls’,
 
    ‘username’ => ‘your_gmail_username’,
 
    ‘password’ => ‘your_gmail_password’,
 
    ‘sendmail’ => ‘/usr/sbin/sendmail -bs’,
 
    ‘pretend’ => false,
 
);

Здесь я оставил driver установленным для smtp . Я настроил host на использование smtp.gmail.com который является SMTP-сервером Gmail. Я установил port на 587 , from фальшивого адреса электронной почты, который подходит для нашего приложения. Я оставил для encryption значение tls и, наконец, вы захотите ввести свое username и password Gmail для своей учетной записи и оставить для false значение false .


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

1
2
3
Mail::send(‘folder.view’, $data, function($message) {
    $message->to(‘registered-user@gmail. com’, ‘Jon Doe’)->subject(‘Welcome to the Laravel 4 Auth App!’);
});

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

Довольно легко, верно?

Давайте теперь UsersController действие postCreate() нашего UsersController и возьмем то, что мы узнали об отправке электронных писем, чтобы отправлять приветственное электронное сообщение нашим пользователям всякий раз, когда они регистрируются в приложении.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
if ($validator->passes()) {
    $user = new User;
    $user->firstname = Input::get(‘firstname’);
    $user->lastname = Input::get(‘lastname’);
    $user->email = Input::get(’email’);
    $user->password = Hash::make(Input::get(‘password’));
    $user->save();
 
    Mail::send(‘users.mails.welcome’, array(‘firstname’=>Input::get(‘firstname’)), function($message){
        $message->to(Input::get(’email’), Input::get(‘firstname’).’ ‘.Input::get(‘lastname’))->subject(‘Welcome to the Laravel 4 Auth App!’);
    });
 
    return Redirect::to(‘users/login’)->with(‘message’, ‘Thanks for registering!’);
} else {
    return Redirect::to(‘users/register’)->with(‘message’, ‘The following errors occurred’)->withErrors($validator)->withInput();
}

Здесь мы вызвали метод Mail::send() и сказали ему использовать users.mails.welcome представления users.mails.welcome . Затем мы передаем массив в качестве данных, которые должны быть доступны в файле представления, в этом случае мы просто отправили имя пользователя, используя метод Input::get('firstname') . Затем мы создаем наше закрытие и устанавливаем его для отправки электронного письма на адрес электронной почты пользователя. Мы также устанавливаем имя, используя имя и фамилию пользователя из формы. Наконец, мы просто даем этому довольно общий предмет (вы можете использовать любой предмет, который вам нравится), чтобы пользователь знал, о чем идет речь.

Теперь нам нужно создать наш welcome почтовый файл. В app/views/users создайте новую папку с именем mails и внутри нее создайте новый файл с именем welcome.blade.php и добавьте следующий код:

1
2
3
<h1>Hi, {{ $firstname }}!</h1>
 
<p>We’d like to personally welcome you to the Laravel 4 Authentication Application.

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

Убедитесь, что ваш веб-сервер запущен с использованием php artisan serve и мы можем посетить localhost:8000/users/register , а затем создать нового пользователя:

Laravel-аутентификации создать пользователь

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

Laravel-Auth-Emai посланного

Отлично! Наше письмо было отправлено.


И это все, что нужно для отправки сообщений электронной почты с помощью Laravel 4 и Gmail. Конечно, вы можете настроить свои почтовые сообщения так, как вам хочется, чтобы почта была более привлекательной.

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

Для получения дополнительной информации об отправке электронной почты с Laravel ознакомьтесь с онлайн-документацией . Спасибо за прочтение.