В этой статье мы собираемся изучить библиотеку 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([‘sender@gmail.com’ => ‘sender name’]);
// Set the «To address» [Use setTo method for multiple recipients, argument should be array]
$message->addTo(‘recipient@gmail.com’,’recipient name’);
// Add «CC» address [Use setCc method for multiple recipients, argument should be array]
$message->addCc(‘recipient@gmail.com’, ‘recipient name’);
// Add «BCC» address [Use setBcc method for multiple recipients, argument should be array]
$message->addBcc(‘recipient@gmail.com’, ‘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([‘sender@gmail.com’ => ‘Sender Name’]);
|
Продвигаясь вперед, давайте установим адрес электронной почты «Кому». На самом деле, есть несколько вариантов установки получателей электронной почты. Если вы хотите установить одного получателя, вы можете использовать метод addTo , а метод setTo , с другой стороны, используется для установки нескольких получателей.
|
1
2
|
// Set the «To address» [Use setTo method for multiple recipients, argument should be array]
$message->addTo(‘recipient@gmail.com’,’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(‘recipient@gmail.com’, ‘recipient name’);
// Add «BCC» address [Use setBcc method for multiple recipients, argument should be array]
$message->addBcc(‘recipient@gmail.com’, ‘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-скриптов.
Не стесняйтесь оставлять свои мысли и вопросы, используя форму ниже.