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