Статьи

Отправка писем в PHP с помощью Swift Mailer

В этой статье мы собираемся изучить библиотеку Swift Mailer, которая позволяет отправлять электронные письма из приложений PHP. Начиная с установки и настройки, мы рассмотрим реальный пример, демонстрирующий различные аспекты отправки электронной почты с использованием библиотеки Swift Mailer.

Когда дело доходит до отправки электронной почты в приложениях PHP, у вас есть множество вариантов на выбор. Вы можете даже создать свою собственную оболочку для быстрой настройки функций электронной почты. Однако вам всегда везет, если вы используете ухоженную и многофункциональную библиотеку.

Swift Mailer — популярная библиотека для отправки писем из приложений PHP, и она широко принята сообществом PHP. Это многофункциональная библиотека в том смысле, что она охватывает практически все аспекты отправки электронной почты, от настройки различных транспортных средств до настройки отправляемого сообщения.

На самом деле это довольно простой процесс отправки электронных писем с использованием библиотеки Swift Mailer.

  1. Инициализируйте объект транспорта (SMTP / Sendmail).
  2. Инициализируйте объект Mailer с этим транспортным средством.
  3. Инициализируйте объект сообщения.
  4. Отформатируйте и отправьте сообщение.

В следующем разделе мы рассмотрим пример из реальной жизни, чтобы продемонстрировать каждый из вышеупомянутых шагов.

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

Не стесняйтесь оставлять свои мысли и вопросы, используя форму ниже.