() translation by (you can also view the original English article)
В этой статье мы рассмотрим библиотеку Swift Mailer, которая позволяет отправлять электронные письма из приложений PHP. Начиная с установки и настройки, мы рассмотрим реальный пример использования, который демонстрирует различные аспекты отправки писем с использованием библиотеки Swift Mailer.
Что такое Swift Mailer?
Когда дело доходит до отправки писем в приложениях PHP, у вас есть множество вариантов на выбор. Возможно, вы даже создадите собственную оболочку, чтобы быстро настроить функции электронной почты. Тем не менее, вам повезло, если вы используете хорошую и многофункциональную библиотеку.
Swift Mailer - популярная библиотека для отправки электронных писем из приложений PHP, и она широко известна сообществу PHP. Это многофункциональная библиотека в том смысле, что она охватывает почти все аспекты отправки электронных писем, от настройки разных транспортов до настройки отправляемого сообщения.
Фактически, это простой процесс отправки электронной почты с использованием библиотеки Swift Mailer.
- Инициализируйте объект Transport (SMTP / Sendmail).
- Инициализируйте объект Mailer с помощью Transport.
- Инициализировать объект сообщения.
- Отформатируйте и отправьте сообщение.
В следующем разделе мы рассмотрим пример реального мира, чтобы продемонстрировать каждый из вышеупомянутых шагов.
Установка и настройка
В этом разделе мы рассмотрим установку и настройку библиотеки Swift Mailer. Установка довольно проста, поскольку она уже доступна в виде пакета Composer. Прежде чем идти дальше, убедитесь, что вы установили Composer, потому что нам понадобится установить библиотеку Swift Mailer.
После того, как вы установили Composer, перейдите и возьмите библиотеку Swift Mailer, используя следующую команду.
1 |
$composer require "swiftmailer/swiftmailer:^6.0" |
При этом должна быть установлена библиотека Swift Mailer вместе с необходимыми зависимостями в каталоге поставщика. И содержимое созданного composer.json должно выглядеть так:
1 |
{
|
2 |
"require": { |
3 |
"swiftmailer/swiftmailer": "^6.0" |
4 |
}
|
5 |
}
|
Итак, это часть установки, но как вы должны ее использовать? Фактически, это всего лишь вопрос о том, как файл autoload.php, созданный Composer в вашем приложении, показан в следующем фрагменте.
1 |
<?php
|
2 |
require_once './vendor/autoload.php'; |
3 |
|
4 |
// your application code...
|
5 |
?>
|
Как отправить письма
В предыдущем разделе мы рассмотрели, как установить библиотеку Swift Mailer с помощью Composer. В этом разделе мы приступим к реализации реального примера.
Идем дальше и создаем файл email.php со следующим содержимым.
1 |
<?php
|
2 |
require_once './vendor/autoload.php'; |
3 |
|
4 |
try { |
5 |
// Create the SMTP Transport
|
6 |
$transport = (new Swift_SmtpTransport('smtp.hostname', 25)) |
7 |
->setUsername('xxxxxxxx') |
8 |
->setPassword('xxxxxxxx'); |
9 |
|
10 |
// Create the Mailer using your created Transport
|
11 |
$mailer = new Swift_Mailer($transport); |
12 |
|
13 |
// Create a message
|
14 |
$message = new Swift_Message(); |
15 |
|
16 |
// Set a "subject"
|
17 |
$message->setSubject('Demo message using the SwiftMailer library.'); |
18 |
|
19 |
// Set the "From address"
|
20 |
$message->setFrom(['sender@gmail.com' => 'sender name']); |
21 |
|
22 |
// Set the "To address" [Use setTo method for multiple recipients, argument should be array]
|
23 |
$message->addTo('recipient@gmail.com','recipient name'); |
24 |
|
25 |
// Add "CC" address [Use setCc method for multiple recipients, argument should be array]
|
26 |
$message->addCc('recipient@gmail.com', 'recipient name'); |
27 |
|
28 |
// Add "BCC" address [Use setBcc method for multiple recipients, argument should be array]
|
29 |
$message->addBcc('recipient@gmail.com', 'recipient name'); |
30 |
|
31 |
// Add an "Attachment" (Also, the dynamic data can be attached)
|
32 |
$attachment = Swift_Attachment::fromPath('example.xls'); |
33 |
$attachment->setFilename('report.xls'); |
34 |
$message->attach($attachment); |
35 |
|
36 |
// Add inline "Image"
|
37 |
$inline_attachment = Swift_Image::fromPath('nature.jpg'); |
38 |
$cid = $message->embed($inline_attachment); |
39 |
|
40 |
// Set the plain-text "Body"
|
41 |
$message->setBody("This is the plain text body of the message.\nThanks,\nAdmin"); |
42 |
|
43 |
// Set a "Body"
|
44 |
$message->addPart('This is the HTML version of the message.<br>Example of inline image:<br><img src="'.$cid.'" width="200" height="200"><br>Thanks,<br>Admin', 'text/html'); |
45 |
|
46 |
// Send the message
|
47 |
$result = $mailer->send($message); |
48 |
} catch (Exception $e) { |
49 |
echo $e->getMessage(); |
50 |
}
|
Давайте рассмотрим, как работает этот код.
Инициализировать Swift Mailer
Библиотека Swift Mailer поддерживает различные транспорты, такие как SMTP и Sendmail, при отправке электронной почты. Итак, первое, что вам нужно сделать, это инициализировать transport
объект.
В приведенном выше примере я использовал транспорт SMTP для отправки писем.
1 |
$transport = (new Swift_SmtpTransport('smtp.hostname', 25)) |
2 |
->setUsername('xxxxxxxx') |
3 |
->setPassword('xxxxxxxx'); |
Конечно, если вы хотите использовать протокол Sendmail, вам нужно будет инициализировать соответствующий объект Swift_SendmailTransport
.
1 |
// Create the SendMail Transport
|
2 |
$transport = new Swift_SendmailTransport('/usr/sbin/sendmail -bs'); |
После создания транспорта нам необходимо инициализировать объект почтовой программы и передать уже созданный транспорт.
1 |
// Create the Mailer using your created Transport
|
2 |
$mailer = new Swift_Mailer($transport); |
Создать сообщение
После создания объектов транспорта и почтовой программы остается только создать экземпляр объекта Swift_Message
и украсить его необходимыми атрибутами.
1 |
// Create a message
|
2 |
$message = new Swift_Message(); |
Теперь мы будем использовать объект $message
для подготовки содержимого нашего сообщения. Для начала метод setSubject
позволяет задать тему письма.
1 |
// Set a "subject"
|
2 |
$message->setSubject('Demo message using the SwiftMailer library.'); |
Метод setFrom
используется для установки адреса "From" электронной почты.
1 |
// Set the "From address"
|
2 |
$message->setFrom(['sender@gmail.com' => 'Sender Name']); |
Двигаясь вперед, давайте установим адрес «Кому» по электронной почте. Фактически, существует несколько вариантов настройки получателей электронной почты. Если вы хотите установить одного получателя, вы можете использовать метод addTo
, а метод setTo
, с другой стороны, используется для установки нескольких получателей.
1 |
// Set the "To address" [Use setTo method for multiple recipients, argument should be array]
|
2 |
$message->addTo('recipient@gmail.com','receiver name'); |
Методы addCc
и addBcc
используются для установки адресов CC и BCC адреса электронной почты соответственно.
1 |
// Add "CC" address [Use setCc method for multiple recipients, argument should be array]
|
2 |
$message->addCc('recipient@gmail.com', 'recipient name'); |
3 |
|
4 |
// Add "BCC" address [Use setBcc method for multiple recipients, argument should be array]
|
5 |
$message->addBcc('recipient@gmail.com', 'recipient name'); |
Присоединение файлов
Затем давайте посмотрим, как вы можете прикреплять файл к электронному письму.
Сначала необходимо создать экземпляр объекта Swift_Attachment
с допустимым именем файла. После создания объекта вложения вы можете добавить его в электронное письмо с помощью метода attach
. Кроме того, вы можете использовать метод setFilename
, если хотите изменить имя файла, которое будет отображаться в приложении вложения.
1 |
// Add an "Attachment" (Also, the dynamic data can be attached)
|
2 |
$attachment = Swift_Attachment::fromPath('example.xls'); |
3 |
$attachment->setFilename('report.xls'); |
4 |
$message->attach($attachment); |
Наряду с обычными файловыми вложениями иногда вы хотите вставлять изображения в текст сообщения. Вы можете сделать это, используя метод embed
, как показано в следующем фрагменте. Метод embed
возвращает уникальный идентификатор внедренного объекта, который вы можете использовать позже в сообщении, ссылаясь на изображение с помощью свойства src
.
1 |
// Add inline "Image"
|
2 |
$inline_attachment = Swift_Image::fromPath('nature.jpg'); |
3 |
$cid = $message->embed($inline_attachment); |
Тело сообщения
Затем добавим тело электронной почты с помощью метода setBody
.
1 |
// Set the plain-text "Body"
|
2 |
$message->setBody("This is the plain text body of the message.\nThanks,\nAdmin"); |
Если вы хотите установить HTML-версию сообщения, вы можете использовать метод addPart
, как показано в следующем фрагменте. Как вы можете видеть, мы используем $cid
для ссылки на ранее встроенный образ.
1 |
// Set a "Body"
|
2 |
$message->addPart('This is the HTML version of the message.<br>Example of inline image:<br><img src="'.$cid.'" width="200" height="200"><br>Thanks,<br>Admin', 'text/html'); |
Отправить сообщение!
Наконец, мы будем использовать send
метод объекта Mailer для отправки электронной почты.
1 |
// Send the message
|
2 |
$result = $mailer->send($message); |
Попробуйте запустить скрипт, и вы должны получить электронное письмо! Сообщите мне в разделе комментариев, если у вас возникнут какие-либо проблемы.
Заключение
Сегодня мы рассмотрели одну из самых популярных библиотек PHP для отправки электронных писем: Swift Mailer. С помощью этой библиотеки вы можете легко отправлять письма со своих PHP-скриптов.
Не стесняйтесь публиковать свои мысли и пожелания ниже.