Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Используем Mandrill для отправки электронной почты в WordPress

by
Difficulty:IntermediateLength:LongLanguages:

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

На большинстве сайтов WordPress отправка электронной почты - это не то, о чем вы часто думаете. Функциональность по умолчанию просто прекрасна: электронная почта отправляется непосредственно с вашего веб-хоста с использованием функции PHP mail, и большую часть времени она просто отлично достигает получателя.

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

В таких случаях вам необходимо изучить транзакционные почтовые службы, такие как Mandrill и Postmark. В этом уроке мы сосредоточимся на Mandrill: услуга отправки электронной почты, разработанная компанией популярной службы рассылки MailChimp. Mandrill является быстрым и надежным, и, самое главное, он может бесплатно получать до 12 000 сообщений каждый месяц, а это значит, что небольшие веб-сайты и бизнесы (почти) никогда не будут оплачивать обслуживание.

В этом уроке я покажу вам, как подключить Mandrill к WordPress, чтобы он выполнял всю отправку электронной почты для нас. Затем мы сделаем еще один шаг интеграции и заменим стандартное новое приветственное сообщение пользователя приятным HTML-сообщением, отправленным с использованием API Mandrill.

Требования к API Mandrill следующие:

  • PHP 5.2.x или выше
  • Расширение PHP cURL

Давайте начнем.

Создание плагина WordPress

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

Чтобы начать работу, давайте создадим плагин и введем некоторые основные функции.

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

Шаг 1. Создание плагина.

Сначала создайте каталог для плагина и назовите его mandrill_emailer.

В этом каталоге создайте два файла PHP: index.php для функций плагина и mandrill_settings.php, чтобы сохранить страницу настроек для плагина.

В index.php добавьте базовое объявление плагина и строку, чтобы включить страницу настроек в плагин. Исходный файл для страницы настроек, mandrill_settings.php, все еще может быть пустым.

Шаг 2. Загрузите и включите API Mandrill.

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

Однако, если вы планируете пройти весь путь и использовать API для отправки приятных сообщений электронной почты, теперь самое время установить API.

Вы можете загрузить API Mandrill со страницы загрузки либо в виде zip-файла, либо с помощью менеджера зависимостей PHP, Composer. Zip-файл прост, поэтому, если вы не знакомы с Composer, просто запустите пакет, распакуйте его, а затем скопируйте его содержимое (файл Mandrill.php и подкаталог Mandrill) в каталог плагина.

Теперь, когда вы разместили библиотеку API Mandrill внутри базы кода плагина, вам все равно нужно включить ее в проект. Чтобы сделать это, добавьте новую строку в index.php прямо над строкой, которая импортирует страницу настроек Mandrill:

API Mandrill теперь включен в проект, и у нас есть базовый плагин. Давайте активируем его в настройках WordPress, если хотите (он еще ничего не делает).

Шаг 3: Создание страницы настроек

Прежде чем вникать в функции электронной почты, давайте сделаем последний шаг настройки и добавим некоторый контент в mandrill_settings.php.

Вот список опций, которые я определил как полезные для нашего плагина на этом этапе:

Название опции Описание
mandrill_emailer_use_mandrill Общий флажок для включения и отключения функций Mandrill.
mandrill_emailer_username
Имя пользователя Mandrill
mandrill_emailer_api_key
Ваш ключ API Mandrill
mandrill_emailer_from_name
Имя, которое будет использоваться в качестве отправителя (заголовок From) в сообщениях электронной почты, отправленных через Mandrill
mandrill_emailer_from_email
Адрес электронной почты для использования в качестве отправителя (заголовок From) в сообщениях электронной почты, отправленных через Mandrill.

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

Поскольку этот учебник посвящен отправке электронной почты, а не настройкам, я кратко пройдусь по коду страницы настроек. Вы можете более подробно ознакомиться с тем, как страница была построена, изучая файл mandrill_settings.php в прилагаемой загрузке. Для хорошего руководства по созданию страниц настроек ознакомьтесь с полным руководством к серии API-интерфейсов WordPress, написанным Томом МакФарлином.

Создайте функцию для инициализации страницы параметров и зарегистрируйте ее как действие с помощью хука действия action_menu :

Давайте рассмотрим ключевые моменты функции:

Во-первых, на строках 7-12 мы создаем страницу настроек, делая ее по умолчанию как подменю на странице параметров WordPress. mandrill_emailer_settings_page - это имя функции обратного вызова, которая будет выполнять рендеринг для страницы настроек:

Во-вторых, по-прежнему в mandrill_emailer_settings_init, в строках 18-30, мы создаем два раздела настроек, один для общих настроек Mandrill, таких как ключ API и имя пользователя, и один для имен шаблонов, которые будут использоваться при отправке электронной почты HTML. Здесь также оба раздела настроек нуждаются в функции обратного вызова для их рендеринга:

Наконец, остальная часть mandrill_emailer_settings_init предназначена для создания и регистрации полей реальных настроек.

В качестве примера, вот определение для настройки ключа Mandrill API:

И функция обратного вызова, которая отображает поле ввода для параметра:

Проверьте оставшиеся настройки кода плагина (вложения). И, наконец, когда все они будут готовы, вот как будет выглядеть страница настроек:

Теперь, с готовым плагином и его страницей настроек, мы можем, наконец, приступить к работе над Mandrill и отправкой электронной почты.

Начнем с того, что все исходящие письма пойдут через Mandrill.

Использование SMTP для маршрутизации всей исходящей электронной почты через Mandrill

Если все, о чем мы беспокоимся, это доставка и отслеживание, мы можем удалить немного кода: нам просто нужно направить исходящую электронную почту, чтобы она прошла через почтовый сервер Mandrill. На самом деле, как я уже упоминал выше, нам даже не понадобится API (нам нужны две из приведенных выше настроек: ключ API и имя пользователя. Имя От кого и адрес электронной почты являются необязательными, но их приятно иметь).

SMTP (сокращение от Simple Mail Transfer Protocol) является стандартным почтовым протоколом для отправки электронной почты, который используется с самого начала электронной почты (сначала определенный в 1982 году!). Таким образом, отправка почты с Mandrill с использованием протокола SMTP на самом деле похожа на отправку почты через обычного поставщика услуг электронной почты.

Вот как вы можете это сделать в WordPress.

Шаг 1. Создание действия для настройки инициализации PHPMailer.

В WordPress вся отправка электронной почты выполняется через функцию wp_mail (вы можете найти ее определение в pluggable.php). Функция выполняет все виды проверки параметров и форматирования электронной почты, а затем передает сообщение классу PHPMailer, который, наконец, и отправляет сообщение. По умолчанию PHPMailer настроен на отправку электронной почты с помощью функции PHP mail.

Но мы не ограничиваемся использованием конфигурации по умолчанию: WordPress предоставляет хук действия, phpmailer_init, который мы можем использовать для настройки PHPMailer любым способом. В этом случае мы хотим использовать протокол SMTP и сервер Mandrill (smtp.mandrillapp.com, порт 587):

В строках 8-13 мы настраиваем PHPMailer для использования аутентифицированной версии SMTP-протокола и указываем URL-адрес сервера Mandrill и порт.

В строчках 16-17 мы извлекаем имя пользователя и пароль из параметров WordPress и передаем их в PHPMailer

Наконец, мы устанавливаем заголовки From с использованием настроек, которые мы создали ранее. Если в настройках не сохранено значение, имя и адрес From генерируются так же, как и в функции wp_mail по умолчанию, используя URL-адрес сайта.

Шаг 2. Поиск и сохранение учетных данных API

Теперь мы создали действие, чтобы настроить PHPMailer на использование Mandrill вместо функции mail PHP, но прежде чем он сможет функционировать, нам нужно дать ему правильные имя пользователя и пароль.

Для этого войдите в Mandrill (или создайте учетную запись, если у вас ее еще нет). После входа в систему, нажмите SMTP & API Credentials в верхнем правом раскрывающемся меню:

На странице SMTP и API Credentials создайте новый ключ API.

Для этого начните с нажатия кнопки + Новый ключ API. На ее месте появится меню для создания нового ключа API.

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

Ключ API добавляется в список ключей API. Скопируйте только что созданный ключ API и сохраните его в параметрах WordPress, используя страницу настроек Mandrill Emailer, которую мы создали ранее. Адрес электронной почты, который вы используете для входа в свою учетную запись Mandrill, является вашим именем пользователя.

С сохраненными настройками, я уверен, что вы захотите проверить, действительно ли электронная почта была доставлена через Mandrill, а не вашим веб-сервером. Чтобы сделать это, зайдите в блог WordPress как зарегистрированный пользователь и оставьте комментарий. Затем проверьте свой почтовый ящик для входящих сообщений, чтобы узнать, откуда пришли электронные письма с комментариями:

Как показано на снимке экрана выше, по крайней мере, если вы используете Gmail, вы увидите, что mandrillapp.com упоминается как фактический отправитель сообщения, обозначенный словом «через» сразу после информации, которую вы предоставили в качестве имени From и электронной почты в настройках.

Тест подтверждает это: сообщения электронной почты теперь отправляются Mandrill.

Здорово, но мы все равно можем сделать лучше ... Пришло время посмотреть на шаблоны!

4. Создавайте красивые электронные письма с помощью HTML-шаблонов

Теперь, когда мы заставили WordPress отправлять все наши письма через SMTP-сервер Mandrill, пришло время сделать еще один шаг интеграции и использовать API Mandrill для отправки электронной почты HTML.

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

Теперь мы предпримем одно из действий электронной почты по умолчанию в потоке WordPress - приветствие нового пользователя и заменим его собственным электронным сообщением HTML, отправленным через Mandrill.

Шаг 1. Создание электронной почты HTML.

Начнем с разработки HTML-сообщения. Я пройду через эти шаги довольно быстро, но если вы хотите больше узнать о дизайне электронных писем, вы можете ознакомиться с замечательными учебниками и курсами, которые можно найти здесь, в Tuts +.

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

Используя эскиз в качестве ориентира, мы теперь создадим базовый шаблон HTML.

Как вы видите в приведенном ниже коде, при написании HTML для электронных писем вам нужно отказаться от многих лучших практик и написать HTML, как будто это было в 1995 году: просто продолжайте использовать таблицы, встройте свой CSS и делайте все ужасные вещи, которые вы уже давно не делаете.

Если вы это не сделаете, то некоторые получатели почты не смогут увидеть красивый дизайн, который вы создали для них ...

Здесь много HTML, но ничего необычного - в основном только вложенные таблицы и некоторые строки, созданные с помощью встроенного CSS.

При открытии в веб-браузере наш HTML-шаблон выглядит довольно красиво. Но у нас все еще есть чем заняться: вся информация, представленная в шаблоне, жестко запрограммирована и должна быть заменена переменными.

Шаг 2: Поместите переменные в шаблон

С разработанным шаблоном HTML наша следующая задача - отметить разделы, которые будут меняться от одного сообщения к другому:

  • Имя
  • Фамилия
  • Имя пользователя
  • Адрес электронной почты
  • Ссылка для входа

В шаблонах Mandrill вы можете пометить содержимое переменной двумя способами (оба они также используются в шаблонах MailChimp, поэтому, если вы когда-либо разрабатывали шаблон для рассылки, вы уже это видели):

Формат Как это работает?
*|VARIABLE|* Используя эту нотацию, вы можете вставлять переменные в любом месте шаблона. Полезно для встроенного текста в строки текста. Это также единственный способ включить переменные в текстовое сообщение.
mc:edit="VARIABLE"
Эта нотация может использоваться в HTML-элементах для определения того, что содержимое элемента будет заменено значением, переданным в VARIABLE.

Полезно, когда вам нужно изменить более длинные блоки контента, даже переходя в некоторый HTML.

Теперь давайте рассмотрим фрагменты в HTML, которые мы хотим изменить на переменные.

Во-первых, заголовок. Здесь мы хотим использовать имя пользователя, который только что зарегистрировался. Создайте «переменную слияния» и назовите ее FIRST_NAME:

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

Поместите переменные USER_NAME, PASSWORD, FIRST_NAME, LAST_NAME и EMAIL:

Наконец, включите ссылку для входа на сайт (LOGIN_URL):

Вот и все. Шаблон готов к использованию.

Шаг 4. Загрузите шаблон в Mandrill

Теперь, когда мы создали наш HTML-шаблон, давайте загрузим его в Mandrill, чтобы мы могли отправить его новым пользователям.

Чтобы создать новый шаблон в Mandrill, начните с выбора элемента «Шаблоны» в раскрывающемся меню «Исходящий»:

На следующей странице вам будет предложено указать ваш шаблон. Окончательный идентификатор шаблона будет построен с использованием этого имени и не может быть изменен, поэтому подумайте о том, как вы хотите назвать шаблон. Я называю свой «Tutsplus New User Welcome», который потом превратится в идентификатор tutsplus-new-user-welcome.

Нажмите «Начать кодирование».

Теперь вы можете ввести свой HTML-код. Скопируйте и вставьте HTML-шаблон в большое текстовое поле справа:

Сохраните шаблон, используя кнопку «Сохранить черновик».

Шаг 5: Включите текстовую версию

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

Для этого используйте вкладку «Текст» на странице редактирования шаблона в Mandrill:


Помимо того факта, что вы не можете использовать HTML в текстовой версии, все почти так же, как и раньше. Используя те же теги шаблонов, что и выше, давайте создадим шаблон для простого текста:


Сохраните шаблон и сделайте его доступным для плагина, нажав «Опубликовать». Скопируйте идентификатор шаблона и сохраните его в настройках плагина.

И теперь все готово для отправки сообщения. Пришло время написать код.

Заставляем WordPress Отправлять HTML-сообщение

Теперь, когда мы создали наш HTML-шаблон и загрузили его в Mandrill, пришло время его использовать. Для этого сначала создадим функцию для вызова API, а затем заменим функцию уведомления пользователя WordPress, чтобы использовать новую функцию.

Шаг 1. Создание функции отправки электронной почты с использованием API-интерфейса Mandrill.

Начнем с создания функции, которая отправит сообщение электронной почты через API Mandrill с использованием HTML-шаблона.

А теперь давайте рассмотрим вышеописанный код.

Во-первых, в строке 13 мы инициализируем API Mandrill. Ключ API извлекается из параметров WordPress.

В строках 15-30 вы найдете ту же функциональность для настройки информации отправителя, которую мы уже реализовали в настройке электронной почты SMTP. (Это было бы хорошим местом для некоторого рефакторинга, перемещая парсинг from_name и from_name в свои собственные функции ...).

Оттуда мы переходим к созданию массива получателей электронной почты (строка 33). Если вы отправляете более одному получателю, вы можете добавить их в массив следующим образом:

Затем, когда данные теперь отформатированы правильно (строки 35-44), мы собираем параметры в массив, который мы назвали $message. Большая часть массива не требует пояснений, но последний параметр требует некоторого объяснения.

Это одно из двух мест, где мы передаем наши данные в шаблон. Как вы помните из шаблона, который мы создали выше, шаблон Mandrill может содержать два типа полей для размещения данных. Чтобы упростить работу дизайнера, мы отправляем один и тот же набор переменных для обеих параметров, сначала здесь, как global_merge_vars, а затем снова в строке 46 в качестве второго параметра функции отправки электронной почты sendTemplate.

Это простой пример использования метода sendTemplate API, и все, что нам нужно для функциональности, созданной в этом учебнике. С остальными доступными параметрами ознакомьтесь с документацией по API. Одним из наиболее интересных является merge_vars (который позволяет отправлять конкретные параметры получателя - полезно при отправке электронной почты нескольким пользователям одновременно).

Шаг 2: Замените функцию уведомлений

Одна из приятных (и не слишком известных) функций в WordPress с точки зрения разработчиков плагинов заключается в том, что каждая функция, определенная в pluggable.php, может быть заменена в плагине. Если функция определена в плагине, эта версия функции будет использоваться вместо одной из ядра WordPress.

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

Уведомления электронной почты при добавлении нового пользователя отправляются в функцию wp_new_user_notification. Итак, вот та, которую нам нужно заменить нашей собственной функцией, если мы хотим отправить наше собственное приветственное сообщение через Mandrill.

Для этого в index.php добавьте следующую функцию:

Первая часть функции точно такая же, как и оригинал от pluggable.php (строки 12-25). Этот блок кода отправляет администратору уведомление о новом пользователе.

После этого все становится интереснее.

Теперь вместо отправки сообщения через wp_mail, как мы это делаем, при отправке уведомления администратора, чтобы отправить приветственное сообщение, мы используем mandrill_send_mail и шаблон, который мы только что создали.

Наиболее интересной частью этой функции является раздел на строках 28-36, где мы инициализируем параметры, предназначенные для использования в шаблоне HTML. Параметры передаются как массив, содержащий массивы, каждый массив представляет одну переменную:

Как вы видите выше, определение переменной хранится как массив, состоящий из двух элементов: имя переменной (name) и текст, который заменит его в шаблоне (content).

Шаг 3: Тест

Теперь весь функционал готов, поэтому давайте попробуем: в администраторе WordPress с помощью меню «Пользователи»> «Добавить нового» создайте нового пользователя. Обязательно выберите адрес электронной почты, к которому у вас есть доступ, чтобы вы получили приветственное письмо и смогли его проверить.

Создайте нового пользователя и дождитесь приветствия на своей электронной почте. Оно должно быстро появиться и выглядеть следующим образом:

Что дальше?

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

Следующим естественным шагом в расширении плагина будет добавление похожих шаблонов ко всем другим сообщениям WordPress. Сначала для уведомления администратора о новом пользователе, которое мы все еще оставили нетронутым, а затем три других функции обмена сообщениями в pluggable.php: wp_notify_postauthor, wp_notify_moderator и wp_password_change_notification.

Еще одна идея для дальнейшего развития заключалась бы в улучшении обработки ошибок плагина: хотя вы всегда можете использовать страницу администрирования Mandrill для отслеживания доставки и выяснить, не удалось ли некоторым вашим исходящим сообщениям связаться с пользователем (например, если он ошибся при вводе своего адреса), Mandrill также предоставляет набор веб-хуков, которые вы можете использовать, чтобы Mandrill уведомил ваш сайт WordPress об этих событиях. Внедрение веб-хука выходит за рамки этого руководства, но это хороший способ получить больше информации о том, что происходит с вашей электронной почтой после ее отправки.

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

Удачи в отправке писем!

Advertisement
Advertisement
Advertisement
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.