Получение писем и перемещение их в очередь sidekiq - PullRequest
0 голосов
/ 12 февраля 2019

На моем веб-сайте есть приложение для обмена сообщениями (веб-интерфейс + API), где пользователи могут отправлять сообщения друг другу.

В настоящее время каждый раз, когда сообщение вводится через форму и отправляется в мой API, мой бэкэндMessageService запускает и делает много вещей, включая отправку уведомления по электронной почте другой стороне.

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

Чтобы сделать это, я подумал о следующем TODO

  1. Сначала настройте собственный почтовый домен, такой как @mail.example.com
  2. Найдите службу (заплатите немного SASS или настройте почтовый сервер самостоятельно), которая будет получать электронные письма, отправленные на этот адрес.В идеале это было бы на основе облака / AWS
  3. Пересылать все входящие электронные письма в одну из моих очередей redis / sidekiq
  4. Пусть работники, написанные на моем любимом языке (Ruby / Rails), прочитают сообщение отмоя очередь, так что я могу затем переслать всю логику обработки на мой MessageService

У вас есть подсказки о том, как я могу достичь 2 и 3 (пересылать полученные письма в очередь sidekiq)

1 Ответ

0 голосов
/ 15 февраля 2019

Не уверен, что если вы используете Rails, Rails 6 является следующим выпуском, и он будет включать в себя ActionMailbox, цель которого аналогична описанной вами.

Проверьте руководство по переднему краю https://edgeguides.rubyonrails.org/action_mailbox_basics.html Пока оно не выпущено и, возможно, вы используете что-то другое, вы можете получить идеи из их реализации.

В руководстве упоминается несколько адаптеров,один из них использует Amazon Simple Email Service , вы просто подключаете получающие электронные письма к конечной точке вашего приложения, которая затем обрабатывает запрос, сохраняет данные для последующего использования и планирует работника, что-то вроде: MessageServiceWorker.perform_async(message.id).

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