Отправляем письма через API UniSender

Итак, у вас есть проект, которому требуется отправлять большой количество писем. Вероятно, это шаблонные письма с разным контентом - например, рассылка новостей, уведомлений, новых отзывов и т.п. Есть несколько вариантов реализации такой рассылки: 

  • Отправка сообщений средствами хостинга (если у Вас обычный виртуальный хостинг) - обычной функцией mail().
    Здесь можно столкнуться с ограничениями хостинга - в лучшем случае. В худшем - IP адрес сервера может быть в спам-базах, ведь на нем размещены сотни, если не тысячи сайтов. Сообщения могут отправляться с задержкой, могут вообще не отправиться, а мониторинг отправленных и доставленных сообщений - это ваша головная боль, придется создавать собственные системы мониторинга и анализа. 
  • Отправка сообщений средствами стороннего бесплатного SMTP сервера. 
    В некотором смысле, этот вариант точно лучше первого. Проверенные сервера - уже меньше вероятности попасть в спам. Не нужно настраивать кучу своих сервисов и серверов. Но вот ограничение на скорость и количество писем в сутки - все портит. Врядли вы сможете отправить через сервера Яндекса больше пары-тройки сотен писем в сутки, а уж тем более - отправить их "вовремя", ведь сторонние сервера рассылают письма в удобном для них порядке, в "свободное время". Опять же, никаких систем мониторинга, отслеживания и аналитики. 
  • Отправка сообщений через собственный SMTP сервер, со своей системой аналитики. 
    Вот здесь уже все может получиться очень круто. Нет ничего круче, чем собственные серьезные ресурсы, которые можно как угодно гибко настраивать, масштабировать, развивать. Но собственные ресурсы - это дорого, требует обслуживания и достаточно сложно. Сервер надо купить (или арендовать), программное обеспечение настроить, оплатить канал связи, настроить почтовый домен, DKIM, SFP, PTR и прочее, разработать систему аналитики отправленных писем и, конечно, нанять обслуживающий персонал. Из всех ограничений осталось только финансовое и, собственно, сложность внедрения. 
  • Отправка сообщений через сервисы рассылок. 
    Ну вот мы и дошли до самого "вкусного". Проработав более 10 лет с сайтам самого разного уровня, которые рассылают от одного-двух писем до трех-пяти тысяч писем ежедневно. В последнее время мы используем на своих проектах проект UniSender, который предлагает сервис UniOne, нацеленный именно на работу по API. Из полезных возможностей - создание шаблонов, в которые можно подставлять данные, массовая рассылка шаблонного письма одним выполнением скрипта, анализ отправленных, доставленных, открытых писем, отслеживание открытия ссылок. В общем, все, что может быть нужно для отправки писем проекта. 

Как получить доступ к UniOne?

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

После предоставления доступа (обычно это занимает всего 15-30 минут), можно начинать работу, но лучше - зайти в кабинет UniOne и ознакомиться с документацией: https://one.unisender.com/ru/docs. В принципе, в документации много написано, но некоторые вещи могут быть не совсем понятны. А иногда и документацию читать лень ;) .

Итак, после получения доступа, нужно сразу получить API ключ и подтвердить почту, с которой будет отправляться рассылка. Для получения ключа, достаточно зайти в соответствующий раздел настроек аккаунта и включить доступ к API соответствующей кнопкой. 

Для подтверждения email'a нужно отправить на https://one.unisender.com/ru/api/validateSender JSON запрос:

{
    "api_key": "ВАШ КЛЮЧ",
    "email": "email@mail.com"

}

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

Как создать новый шаблон письма с переменными? 

Вся работа будет производиться отправкой JSON запросов на сервера unisender'a. Создадим письмо - уведомление о поступлении новых товаров. 

{
   "username": "ВАШ_ЛОГИН",
   "api_key": "ВАШ_API_КЛЮЧ",
   "template":
{
      "id": "",
      "name": "newproduct",
      "subject": "Новые поступления товаров",
      "template_engine":"velocity",
      "from_email": "email@email.ru",
      "from_name": "Интернет-магазин электроники",
      "body":

      {
         "html": "<html><head><title></title></head><body>Здравствуйте, $person.name<br />Появились новые товары по вашим интересам:<br />#foreach($product in $products)<a href=\"$product.url\">$product.title ($product.cost руб.)</a><br>#end</body></html>"
      }
   }
}

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

В ответ на отправленный запрос, нам важно получить id созданного шаблона. Придет он так же в JSON массиве, выглядит так: 
"id""abc12345-67d8-9e0f-a123-45678d123c45", его мы потом будем использовать при отправке писем.

В шаблоне фигурируют переменные $person.name, $product.url и т.д. Их мы будем определять при отправке сообщения. 

Отправка писем с помощью UniOne через API. 

Итак, дошли до самой отправки. Отправку также производим JSON запросом. 

{
  "api_key": "ВАШ_API_КЛЮЧ",
  "username": "ВАШ_ЛОГИН",
  "message":

  {
    "template_engine" : "velocity",
    "template_id" : "abc12345-67d8-9e0f-a123-45678d123c45",
    "recipients":
[
      {
        "email": "email_1@email.ru",
        "substitutions":

        {
            "to_name": "Имя получателя 1",
            "person":

            {
                "name": "Иванов Иван Иваныч"
            }
            "products":
            [
            {
                "title": "Первый товар",
                "url": "https://www.it-go.ru",
                "cost": "5 309"

            },
            {
                "title": "Второй товар",
                "url": "https://www.yandex.ru",
                "cost": "15 309"

            },
            {
                "title": "Третий товар",
                "url": "https://google.com",
                "cost": "25 500"

            }
          ]
        }
      }
    ]
  }
}

Таким вот образом, мы можем отправить любое количество товаров в цикле шаблона. И, конечно, указать можно много массивов с наборами адресов и товаров в recipients

Конечно, все описанное выше - это лишь простой пример применения сервиса UniOne. У них существует еще множество методов для определения статусов писем, получения отчетов и многое другое. Нужно заметить, что отправить одним запросом можно только 500 писем. Однако, техподдержка обещает, что за хорошее поведение (высокий процент доставки) они могут это ограничение ослабить. 

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