Статьи

Отправка электронной почты с помощью Swift Mailer

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

Swift Mailer, созданная в 2005 году, представляет собой библиотеку, которая предоставляет несколько классов, позволяющих отправлять электронные письма из сценариев PHP или веб-приложений. У Swift Mailer есть некоторые требования, но они минимальны; библиотека требует PHP 5.2 или выше с расширением SPL и минимальным пределом памяти 8 МБ.

Ссылаясь на официальную документацию , установка Swift Mailer тривиальна. Обычно это всего лишь случай загрузки извлеченных исходных файлов на ваш веб-сервер. Самый простой способ установить библиотеку — через PEAR или загрузку файлов через FTP.

Установка из канала PEAR — это просто команды второго типа:

  канал груши-обнаружите pear.swiftmailer.org
 груша установить swift / swift 

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

Семейство классов Swift Mailer

Swift Mailer состоит из более чем 150 классов и интерфейсов, сгруппированных в несколько компонентов. У каждого из них есть определенная цель.

  • Почтовик : почтовик, который реализуется классом Swift_Mailer , является центральным классом в библиотеке и тем, который фактически отправляет электронную почту через метод send() . Его конструктор принимает экземпляр класса, который реализует интерфейс Swift_Transport который позволяет отправлять электронную почту с использованием настраиваемого SMTP.
  • Транспортеры : они реализуют интерфейс Swift_Transport и их целью является взаимодействие со службой доставки сообщений электронной почты. Основными классами являются Swift_SmtpTransport который использует протокол SMTP, Swift_SendmailTransport который взаимодействует с локальным исполняемым файлом sendmail, и Swift_MailTransport который опирается на встроенную функцию PHP mail() .
  • MIME Entities : это ключевой компонент в библиотеке. Класс, который вы будете использовать для указания получателя, субъекта, тела и т. Д., Называется Swift_Message состоит из нескольких объектов, которые сгруппированы вместе. Два примера сущностей — это вложения и заголовок письма.
  • Кодеры : с этим компонентом вы не будете иметь дело, потому что он действует за кулисами. Существует два типа кодировщиков: Base64 и Quoted-Printable. Их цель — преобразовать содержимое в формат, соответствующий спецификациям RFC.
  • Плагины : они используются для расширения основных функций Swift Mailer. Некоторые из плагинов — это AntiFlood, который позволяет вам ограничивать количество сообщений, отправляемых во время одного SMTP-соединения, Logger, используемый для записи событий во время процесса отправки, и Decorator, замечательный плагин, который позволяет использовать шаблон электронной почты. и измените только несколько различий в тексте письма.

Основной пример

Со мной так далеко? Хорошо. Теперь, когда у вас есть представление о том, как компоненты организованы в библиотеке, давайте запачкаем руки и посмотрим, как воспользоваться мощью и гибкостью Swift Mailer. В этом первом и очень простом примере я покажу вам создание электронного письма с двумя получателями, темой и текстом. После создания он будет отправлен получателям.

В следующем коде используются три класса, упомянутых в предыдущем разделе: Swift_MailTransport , Swift_Mailer и Swift_Message . Кроме того, обратите внимание на первую строку кода, require_once который загружает автозагрузчик Swift Mailer, необходимый для использования библиотеки.

 <?php require_once 'lib/swift_required.php';  

Как видите, Swift_MailTransport используется для создания экземпляра транспортного уровня, который будет использовать встроенную функцию PHP mail() . Затем я создал экземпляр Swift_Message который вы можете рассматривать как объект электронной почты. В следующих строках я устанавливаю получателей с помощью setTo() , тему электронной почты с помощью setSubject() , тело письма с помощью setBody() и отправителя с помощью setFrom() . После определения слоя и создания электронного письма пришло время фактически отправить электронное письмо, что делается с помощью метода send() класса Swift_Mailer .

Пример с вложениями

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

  • Два дополнительных приемника, один в CC, а второй в BCC, используя setCc() и setBcc() .
  • Одно вложение получено с диска с помощью метода attach() .
  • Настраиваемая конфигурация SMTP с использованием класса Swift_SmtpTransport .
  • Узнайте, какие получатели не получили письмо, используя второй параметр метода send() .
 <?php require_once 'lib/swift_required.php';  

Я использовал другой транспортный уровень, SMTP, который устанавливается с помощью класса Swift_SmtpTransport . Он принимает два параметра: SMTP- сервер и порт подключения. Вы используете этот экземпляр для установки подходящего имени пользователя и пароля для доступа к серверу с помощью setUsername() и setPassword() . Затем, как и в первом примере, я создал объект Swift_Message и установил получателей, тему и так далее. Однако на этот раз я также воспользовался setCc() и setBcc() которые, как вы можете догадаться, позволяют вам устанавливать получателей setCc() копии и скрытой копии.

Ключевым методом этого примера является метод attach() который присоединяет файл, взятый с жесткого диска, используя статический метод fromPath() который принимает путь к файлу, который вы хотите прикрепить, в качестве параметра. Обратите внимание, что на этот раз я также печатаю количество неудачных получателей, полученных с помощью второго параметра метода send() .

Использование шаблона

Третий и последний пример показывает, как использовать плагин Decorator, идеально подходящий для таких вещей, как рассылка новостных рассылок вашим подписчикам. Это позволяет отправлять одно и то же электронное письмо нескольким получателям, имеющим небольшие различия, например, имя получателя внутри тела письма. Плагин будет смотреть внутри шаблона (тела) и заменит заполнители на заданные значения.

Чтобы использовать плагин, сначала необходимо зарегистрировать его с помощью метода registerPlugin() а затем создать и использовать массив значений замены. В следующем коде я добавлю два заполнителя, имя пользователя и транзакции , которые будут программно заменены значениями, относящимися к электронной почте пользователя.

 <?php require_once 'lib/swift_required.php';  

Конструктор плагина Decorator принимает один параметр: массив значений для замены заполнителей. Каждое значение этого массива использует электронную почту пользователя для своего ключа и подмассив, который содержит пары замены заполнителя. Это как раз и является целью массива $replacements . В приведенном выше примере в качестве заполнителей я использовал строку в двух скобках (т.е. {fullname} ), но вы можете использовать все, что захотите. На этот раз я не установил всех получателей в том же выражении, что и раньше, и использовал цикл for . Это сделано потому, что плагин перехватывает процесс отправки, читает электронную почту получателя и заменяет заполнители, используя значения массива замены.

Вывод

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

Изображение через Fotolia