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

Использование Mailgun Store (): временный почтовый ящик для входящих сообщений вашего приложения

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup With PHP: Scheduling Availability and Choices
Building Your Startup: Delivering the Meeting Invitation
Sponsored Content

This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.

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

Final product image
What You'll Be Creating

Добро пожаловать в специальный эпизод нашей серии Пишем свой стартап, спонсируемой Mailgun. В этой серии я показываю вам запуск приложения из концепции в реальную жизнь, используя приложение Meeting Planner в качестве примера. Каждый шаг по пути, мы делаем релиз кода планировщика собраний как примеры с открытым исходным кодом, из которых вы можете узнать для себя что-то новое. В сегодняшнем эпизоде Mailgun выступила спонсором учебника о том, как я интегрировал его маршрутизацию сообщений и API Store() для обработки ответов от пользователей.

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

Что такое Mailgun?

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

Он предлагает множество функций для быстрого и эффективного управления электронной почтой для вашего приложения:

API-интерфейс Mailgun поддерживает все наиболее популярные языки, включая PHP, Ruby, Python, C # и Java, и они предлагают отличную, хорошо организованную документацию.

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

Если вы хотите ознакомиться с сегодняшним учебным пособием и еще не знакомы с Mailgun, вам может потребоваться ознакомиться с Изучение Mailgun: механизм электронной почты для разработчиков или Как Geogram создает бесплатную групповую службу электронной почты с Yii на PHP и MySQL. Вы также можете прочитать Store(): временный почтовый ящик для всех входящих писем для получения дополнительной технической информации.

Весь код Планировщика собраний написан на Yii2 Framework для PHP. Если вы хотите узнать больше о Yii2, ознакомьтесь с нашей параллельной серией Программирование с Yii2 в Envato Tuts +.

Если вы еще не опробовали Планировщика собраний, попробуйте запланировать свою первую встречу сейчас. У нас уже доступен альфа-релиз.

Обратная связь приветствуется. Если у вас есть вопрос или предложение, пожалуйста, напишите ниже свой комментарий. Вы также можете связаться со мной в Twitter @reifman.

И спасибо, Mailgun, за спонсорство этого эпизода нашей серии про стартап!

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

Использование Mailgun в планировщике собраний

Я уже говорил об использовании SMTP-почты Mailgun для исходящих писем в Meeting Planner, но как насчет ответа на электронные письма?

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

Mailgun Store - Add a Note to a Meeting via the Web Interface

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

Обзор того, как мы будем использовать Mailgun

Вот краткое изложение того, что мы строим сегодня:

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

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

Пока я объясняю вам, как всё работает.

Получение входящей электронной почты в вашем домене

Mailgun Store - Customer quote about Mailgun Parsing by Jonathan Novak Uservoice

Некоторое время назад я установил записи MX для MeetingPlanner.io, чтобы направлять всю входящую электронную почту непосредственно в Mailgun.

Mailgun Store - Infographic Showing Route of Incoming Email to Mailgun MX

Вот пример записей MX для Mailgun:

Mailgun Store - Example Mailgun MX Records

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

Mailgun Store - Routes for Mailbox Exceptions like Support and Jeff

Функции маршрутизации Mailgun также предоставляют следующие возможности:

  • Необязательно получать необработанное сообщение MIME
  • Все сообщения, закодированные в UTF-8 автоматически
  • Бесплатная фильтрация спама
  • Простое тестирование webhook ендпоинтов
  • Генерация текстовой части из электронных писем только для HTML
  • Согласование всех заголовков электронной почты (например, тема, из:, cc :) и получателей
  • Возможность объединения нескольких фильтров для обеспечения сложных выражений

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

Вот как Mailgun сам описывает некоторые возможные случаи, для которых будет полезным иметь это хранилище:

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

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

Mailgun Store - Notification Route Post URL to Our Server

Всякий раз, когда подстановочные сообщения приходят в Планировщик собраний, Mailgun будет store() их и уведомлять http://meetingplanner.io/mailgun-notification/store о том, что есть новое сообщение, а затем stop() их обработку.

Расширение моего использования API с помощью Mailgun было снова простым, так как у них прекрасная документация. API обеспечивает поддержку множества языков, например. Ruby, Python, PHP, Java, C # и Go. И предлагает рабочие примеры реализации функций Mailgun в своих службах - независимо от того, ведете ли вы вещание, отслеживание или маршрутизацию.

Таким образом, используя Yii2 и его автоматический генератор кода - Gii, я создал миграции, модели и контроллеры для модели MailgunNotification.

Она хранит URL-адрес уведомления от Mailgun, который мы можем получить позже. Например:

Вот код, который добавляет необработанные уведомления с помощью STATUS_PENDING:

Обработка POSTed уведомлений

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

Поскольку prod серверы сложнее отлаживать, потребовалось некоторое время, чтобы получить это право. Поэтому сначала я столкнулся с ошибками.

Mailgun Store - Error as I Develop Mailgun Notification Processing

Но затем, в конечном счете, я получил входящие уведомления:

Mailgun Store - A Successful Notification Test

По сути, я распарсил message-url и сохранил его в базе данных:

В этом примере представьте, что я ответил на приглашение на встречу от Тома, чтобы напомнить ему, чтобы он привел книгу на нашу кофе-дискуссию:

Mailgun Store - User scenario as I send an email meeting note

В ответ Mailgun уведомляет нас об этом сообщении, а защищенный URL-адрес для доступа к его содержимому хранится в таблице MailgunNotification:

Mailgun Store - MailgunNotification Table

Обработка сообщений в фоне

Затем я развернул фоновый процесс планировщика собраний, чтобы получать новые сообщения от Mailgun и обрабатывать их. Разбор электронной почты с Mailgun прост, поскольку они выполнили всю работу, которая в противном случае занимала бы месяцы (и месяцы ... и месяцы ... и месяцы).

По сути, Mailgun берет неструктурированную входящую электронную почту (показано слева) и отправляет распарсенные, структурированные данные (показано справа):

Mailgun Store - Infographic of Powerful Mailgun API Parsing

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

Пройдем через метод MailgunNotification::Process. Сначала мы ищем ожидающие уведомления в таблице MailgunNotification и вызываем мой компонент Yiigun.php, который делает запрос get() Mailgun по URL-адресу, который мы получили для уведомления:

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

Я особенно ценю, что Mailgun предоставляет stripped-text, который выдает подпись отправителя и ответную цепочку. Я также использую HtmlPurifier, чтобы предотвратить потенциально опасный unescaped текст от таргетинга на наш сервер.

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

И, наконец, как только мы определили, что встреча и отправитель существуют, и что последний является участником, мы добавляем stripped_text в качестве примечания:

Новая заметка появится на странице событий собрания, когда участник вернется:

Mailgun Store - Meeting Invitation with Note from Email Added Automatically

Yii поддерживает события ActiveRecord, поэтому, когда добавляется MeetingNote, то автоматически создается запись MeetingLog :

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

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

В заключение

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

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

И, очевидно, есть много других сценариев, которые мы могли бы построить при обработке сообщений. Например, мы могли бы позволить пользователям отвечать такими командами, как «поздно», и мы будем знать, чтобы текст другого человека, который их коллега опаздывает.

Пожалуйста, сообщите нам, какие функции Mailgun вы хотите увидеть в будущем. Вы можете отставить их в комментариях ниже или связаться со мной прямо на Twitter @reifman.

Ссылки по теме

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.