Advertisement
  1. Code
  2. PHP

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

Scroll to top
Read Time: 6 min

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-скриптов.

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

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.