В этой статье мы собираемся изучить библиотеку 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-скриптов.
Не стесняйтесь оставлять свои мысли и вопросы, используя форму ниже.