1. Code
  2. PHP

Отправить электронную почту в PHP, с использованием Swift Mailer

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

Russian (Pусский) translation by Dima (you can also view the original English article)

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

Что такое Swift Mailer?

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

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

Фактически, это простой процесс отправки электронной почты с использованием библиотеки Swift Mailer.

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

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

Установка и настройка

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

Не стесняйтесь публиковать свои мысли и пожелания ниже.