Статьи

Альтернативные списки рассылки с помощью PHP: использование API Mailgun’s List

Конечный продукт
Что вы будете создавать

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

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

Mailgun — это облачная пушка электронной почты SaaS, такая как SendGrid . Это на самом деле бесплатно до 10000 электронных писем в месяц. Mailgun невероятно мощный и предлагает хорошо документированный API на различных популярных языках. Он предоставляет возможности как отправки, так и получения, последнее из которых может быть довольно сложно разработать с нуля. Хотя Mailgun не предоставляет шаблонов для насыщенных HTML-рассылок, он предоставляет платформу, на которой вы можете построить что угодно.

Домашняя страница Mailgun

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

В этом руководстве я собираюсь рассказать вам о ListApp, апплете, который основан на API Списка Mailgun . В следующем уроке я покажу вам, как создать собственную схему списка адресов электронной почты на собственном PHP и MySQL. У каждого подхода есть свои преимущества.

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

Пример веб-интерфейса пользователя Mailguns

Используя ListApp, основная копия вашего списка хранится в облаке на Mailgun и синхронизируется локально через API с вашей установкой ListApp.

Если вы хотите создать групповые списки адресов электронной почты или хотите получить более детальный контроль над своей электронной почтой и нуждами адресации, то вы можете узнать, как создавать функции списков с нуля. В следующем уроке мы все еще будем полагаться на движок Mailgun и API, но мы будем управлять списками в приложении, а не с помощью Mailgun’s List API. Это также позволяет избежать сложности синхронизации.

ListApp предоставляет простой веб-интерфейс для распространенных сценариев, которые вы можете использовать с функциями списка рассылки Mailgun :

  • синхронизация ваших списков и членов списков из облака Mailgun
  • создание, обновление и удаление списков
  • импорт членов в список
  • отправка сообщений в списки
Open Source ListApp Домашняя страница для Mailgun

Вы можете установить ListApp в любой системе на основе LAMP. Я опубликовал мое общее руководство по установке сервера Ubuntu LAMP для справки. Приложение содержит инструкции по настройке ListApp на сервере Ubuntu с 1 ГБ ОЗУ. Требуется PHP 5.x, MySQL 5.x, а также библиотеки PEAR и cURL.

ListApp написан на Yii Framework для PHP . Вам не нужно ничего знать о среде Yii для запуска приложения. Если вы предпочитаете не использовать Yii, вы можете использовать компонент Yiigun, используемый в ListApp. Yiigun.php — это, по сути, файл класса PHP с методами и помощниками для использования SDK Mailgun Mailing List .

Mailgun Registration

Вам нужно зарегистрировать бесплатную (или более высокого уровня) учетную запись Mailgun , чтобы получить ключи API для файла настроек. Если у вас есть платная учетная запись, вам нужно добавить свои домены и создать настройки DNS для их использования. Если вы используете бесплатную учетную запись, ваш домен будет yourchoice.mailgun.org. Следовательно, ваш список адресов может быть wildcard@yourchoice.mailgun.org. Ваши ключи API Mailgun будут показаны на домашней странице панели управления .

Панель управления Mailgun с ключом API

Использование API Списка рассылки Mailgun очень просто. Mailgun предоставляет свою собственную документацию API Списка рассылки, чтобы помочь нам. Вы можете посмотреть, как ListApp использует Mailgun API в нашем компоненте Yiigun.php . ListApp использует Mailgun PHP SDK для взаимодействия с Mailgun.

Обязательно следуйте инструкциям по настройке ключей API во время установки. Всякий раз, когда используется класс Yiigun, вызывается конструктор, создавая безопасную инициализацию с помощью API Mailgun:

1
2
3
4
function __construct() {
     // initialize mailgun connection
     $this->mg = new Mailgun(Yii::app()->params[‘mailgun’][‘api_key’]);
}

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

Создать список рассылки

Вот как мы создаем новый список:

1
2
3
4
public function listCreate($newlist) {
   $result = $this->mg->post(«lists»,array(‘address’=>$newlist->address,’name’=>$newlist->name,’description’ => $newlist->description,’access_level’ => $newlist->access_level));
   return $result->http_response_body;
 }

Вот как мы обновляем свойства списка рассылки:

1
2
3
4
5
6
7
8
9
public function listUpdate($existing_address,$model) {
   $result = $this->mg->put(«lists/».$existing_address,array(
     ‘address’=>$model->address,
     ‘name’ => $model->name,
     ‘description’ => $model->description,
     ‘access_level’ => $model->access_level
     ));
   return $result->http_response_body;
  }
Списки рассылки Open Source ListApp

Вы можете импортировать новых членов в любой список из ListApp. Для этой функции мы используем библиотеки синтаксического анализа списка адресов электронной почты PEAR. Вы можете вставить любой список адресов электронной почты в форме Personal Name <mailbox@domain.com> , разделенные запятыми или новыми строками. ListApp добавит участников локально и загрузит их на Mailgun.com.

Импортировать участников в список

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

1
2
3
4
5
6
7
8
$json_upload ='[‘
 foreach ($addresses as $i) {
  $json_upload.='{‘;
    $json_upload.=’»name»: «‘.$i->name.’», ‘;
    $json_upload.=’»address»: «‘.$i->address.’»‘;
    $json_upload.=’},’;
  }
$json_upload.=’]’;

Затем мы вызываем функцию массовой загрузки с этой строкой JSON:

1
2
3
4
5
6
7
8
public function memberBulkAdd($list=»,$json_str=») {
    $result = $this->mg->post(«lists/».$list.’/members.json’,array(
   ‘members’ => $json_str,
    ‘subscribed’ => true,
    ‘upsert’ => ‘yes’
    ));
    return $result->http_response_body;
  }

Вы также можете добавлять отдельных членов в списки, используя опцию меню « Добавить участника» .

Open Source ListApp Список участников
ListApp Отправить новое сообщение

Вы можете отправить сообщение в любой список, используя меню справа. Мы доставляем исходящее сообщение в Mailgun, как и любое другое сообщение. $to To address — это адрес списка рассылки Mailgun, например ourlist@ourdomain.com:

1
2
3
4
5
6
7
public function send_simple_message($to=»,$subject=»,$body=»,$from=») {
    if ($from == »)
      $from = Yii::app()->params[‘supportEmail’];
    $domain = Yii::app()->params[‘mail_domain’];
$result = $this->mg->sendMessage($domain,array(‘from’ => $from, ‘to’ => $to, ‘subject’ => $subject, ‘text’ => $body, ));
return $result->http_response_body;
}

Затем Mailgun управляет доставкой сообщения отдельным получателям.

Вы можете увидеть больше примеров API Списка Mailgun в действии здесь .

Вы также можете использовать некоторые из общих переменных получателей Mailgun для включения личных приветствий, таких как Hi %recipient_fname% (см. Документацию по шаблонным переменным ).

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

Вот функция fetchLists . Использование Mailgun PHP SDK делает это довольно простым:

1
2
3
4
public function fetchLists() {
   $result = $this->mg->get(«lists»);
   return $result->http_response_body;
 }

Вот как мы выбираем участников:

1
2
3
4
public function fetchListMembers($address) {
   $result = $this->mg->get(«lists/».$address.’/members’);
   return $result->http_response_body;
 }

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

В дополнение к собственной документации Mailgun API Mailing List (которая включает примеры на cURL, Ruby, PHP, Python, Java и C #), вы можете просматривать, извлекать и адаптировать файл Yiigun.php и его функции для вашего собственного PHP-приложения или фреймворка.

Если вы не используете Yii, вам нужно использовать composer для установки SDK согласно инструкциям по установке Mailgun .

Теперь у вас есть апплет, который может создавать облачные списки и управлять ими через API Mailgun и использовать их для информирования и обновления ваших друзей, коллег и клиентов. Во второй части я покажу вам, как создавать списки адресов электронной почты в PHP и MySQL. Мы по-прежнему будем полагаться на движок Mailgun и API, но мы будем управлять списками в приложении, а не с помощью Mailgun’s List API.

Пожалуйста, не стесняйтесь оставлять свои вопросы и комментарии ниже. Вы также можете связаться со мной в Twitter @reifman или написать мне напрямую. Следуйте за моей страницей инструктора Tuts +, чтобы видеть будущие статьи в этой серии.