Отправка электронной почты с помощью SMTP-сервера Gmail и библиотеки Swift Mailer
Вы хотите отправлять электронные письма с помощью SMTP-сервера Gmail? Когда вы используете SMTP-сервер для своих писем, высока вероятность того, что ваши письма попадут в почтовый ящик пользователя, а не в спам. SMTP-сервер предотвращает пометку ваших писем как спам. В этой статье мы изучаем, как отправлять электронную почту с помощью SMTP-сервера Gmail и библиотеки Swift Mailer.
Как владелец сайта, вы всегда хотите, чтобы ваша электронная почта попадала прямо в почтовый ящик пользователя, а не в спам или нежелательную почту. Это увеличивает вероятность того, что пользователь прочитает вашу электронную почту и выполнит желаемое действие.
Зачем нужен SMTP-сервер?
Для веб-сайта нормально иметь форму, которая отправляет электронное письмо пользователям или администраторам. Это может быть ваш информационный бюллетень, контактная форма или процесс регистрации, когда вам нужно отправить электронное письмо в качестве подтверждения.
PHP предоставляет mail()
функцию для отправки электронных писем. Однако, если ваш сервер неправильно настроил параметры почты, этот метод не работает. Другая возможность – когда вы отправляете электронные письма с использованием mail()
метода, они могут оказаться в спаме.
Чтобы преодолеть эти 2 ситуации, вам следует использовать SMTP-сервер для отправки писем.
Используя библиотеку Swift Mailer, пользователь может использовать любой SMTP-сервер, такой как Gmail, Sendgrid, Mandrill или ваш собственный хостинг, предоставленный SMTP-сервером, для отправки электронных писем. В этом руководстве я выбираю SMTP-сервер Gmail.
Сказав это, давайте посмотрим, как использовать библиотеку Swift Mailer для отправки электронных писем.
Установка Swift Mailer
Чтобы использовать библиотеку Swift Mailer, на вашем сервере должен быть PHP версии 7.2 или выше. Если вы используете старую версию, обновите ее до последней версии PHP. Большинство хостинг-провайдеров, таких как Bluehost, обновляют версию PHP по запросу. Вам не нужно тратить время на обновление версии.
В дальнейшем я рекомендую использовать Composer для установки библиотеки Swift Mailer. Откройте терминал в корневом каталоге вашего проекта и выполните команду:
composer require swiftmailer/swiftmailer
Поскольку мы собираемся использовать Gmail SMTP, вам необходимо изменить некоторые настройки в своей учетной записи Google. Войдите в свою учетную запись Google и нажмите «Учетная запись». Перейдя на страницу учетной записи Google, нажмите «Безопасность». Прокрутите вниз, и вы найдете настройки «Небезопасный доступ к приложениям». Установите его в положение ВКЛ.
Отправка электронной почты с помощью SMTP-сервера Gmail и библиотеки Swift Mailer
На этом этапе вы готовы к работе с библиотекой Swift Mailer, а также изменили настройки учетной записи Gmail. Теперь вы можете идти вперед.
Допустим, у вас есть файл, в sendmail.php
котором нужно написать код для отправки электронных писем. Напишите приведенный ниже код в свой файл PHP.
sendmail.php
<?php
require_once 'vendor/autoload.php';
try {
// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.googlemail.com', 465, 'ssl'))
->setUsername('YOUR_GMAIL_USERNAME')
->setPassword('YOUR_GMAIL_PASSWORD')
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$body = 'Hello, <p>Email sent through <span style="color:red;">Swift Mailer</span>.</p>';
$message = (new Swift_Message('Email Through Swift Mailer'))
->setFrom(['FROM_EMAIL_ADDRESS' => 'FROM_NAME'])
->setTo(['RECEPIENT_1_EMAIL_ADDRESS'])
->setCc(['RECEPIENT_2_EMAIL_ADDRESS'])
->setBcc(['RECEPIENT_3_EMAIL_ADDRESS'])
->setBody($body)
->setContentType('text/html')
;
// Send the message
$mailer->send($message);
echo 'Email has been sent.';
} catch(Exception $e) {
echo $e->getMessage();
}
В приведенном выше коде я передал следующие значения для настроек SMTP-сервера Gmail.
- Адрес SMTP-сервера Google: smtp.googlemail.com
- Порт Gmail SMTP: 465
- Шифрование: ssl
Помимо этих значений, вам необходимо изменить другие заполнители, такие как YOUR_GMAIL_USERNAME, YOUR_GMAIL_PASSWORD и т.д.
После замены всех значений запустите этот файл в браузере. Вы должны получить письмо во входящих, а не в спаме.
Отправка одного или нескольких вложений по электронной почте
Иногда вам может потребоваться отправить вложения по электронной почте. Используя Swift Mailer, вы можете отправлять одно или несколько вложений следующим образом:
$message->attach(Swift_Attachment::fromPath(__DIR__. '/sample.png')); //absolute path for your attachment
$message->attach(Swift_Attachment::fromPath(__DIR__. '/sample-ebook.pdf'));
Все, что вам нужно сделать, это использовать attach
метод и передать абсолютный путь к файлу, который нужно отправить в качестве вложения. Я предполагаю, что вам нужно отправить файлы «sample.png» и «sample-ebook.pdf» в виде вложений.
Итак, наш окончательный код выглядит следующим образом.
sendmail.php
<?php
require_once 'vendor/autoload.php';
try {
// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.googlemail.com', 465, 'ssl'))
->setUsername('YOUR_GMAIL_USERNAME')
->setPassword('YOUR_GMAIL_PASSWORD')
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$body = 'Hello, <p>Email sent through <span style="color:red;">Swift Mailer</span>.</p>';
$message = (new Swift_Message('Email Through Swift Mailer'))
->setFrom(['FROM_EMAIL_ADDRESS' => 'FROM_NAME'])
->setTo(['RECEPIENT_1_EMAIL_ADDRESS'])
->setCc(['RECEPIENT_2_EMAIL_ADDRESS'])
->setBcc(['RECEPIENT_3_EMAIL_ADDRESS'])
->setBody($body)
->setContentType('text/html')
->attach(Swift_Attachment::fromPath(__DIR__. '/sample.png'))
->attach(Swift_Attachment::fromPath(__DIR__. '/sample-ebook.pdf'))
;
// Send the message
$mailer->send($message);
echo 'Email has been sent.';
} catch(Exception $e) {
echo $e->getMessage();
}
Все дело в отправке электронной почты через библиотеку Swift Mailer. Вы также можете использовать Symfony Swift Mailer для отправки сообщений через несколько SMTP-серверов, таких как Mailgun, Mandrill и т.д. Я хотел бы услышать ваши мысли и предложения в разделе комментариев ниже.
Статьи по Теме
- Отправка электронной почты с помощью SMTP-сервера Gmail из сценария PHP
- Как отправить электронную почту WordPress с помощью SMTP-сервера
- Отправка электронной почты через SMTP-сервер Gmail в Laravel