Назад | Перейти на главную страницу

Лучший способ передать электронную почту в приложение для рельсов

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

Это должно работать так:

Он должен в основном работать как queque. Внезапные пики почтового трафика не должны убивать приложение rails.

Я не ищу полного решения. Мне просто интересно ваше мнение. Я прикинул 3 возможных варианта:

Как вы думаете, какой подход является лучшим с точки зрения производительности и безопасности? Я что-то упустил? Есть ли способ лучше? Есть ли у вас ресурсы по передовой практике?

Спасибо!

Вот пост, который может помочь:

Получение писем и вложений с помощью Rails

В статье также есть ссылки на предыдущие сообщения о настройке RailsCron.

Я видел, как приложения делают это с POP3 (я могу вспомнить Spiceworks). Думаю, это хороший способ разделить приложение. сервер с почтового сервера, и позволяет вам позволить почтовому серверу сконцентрироваться на том, что он делает хорошо, и освобождает клиента от обязанностей по организации очереди / хранению сообщений.

re: Безопасность

Проблема с POP3, которая приходит на ум, - это использование по умолчанию учетных данных в открытом виде. Если вы можете запустить его через SSL (зависит от почтового сервера), вы можете уменьшить эту проблему.

re: Perf и масштабирование

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

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

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

Rails, вероятно, не подходит для этой работы. Возможно, вы захотите написать небольшой скрипт, который будет принимать электронное письмо на стандартный ввод и вставлять его в вашу базу данных. Возможно, вы сможете использовать для этого тот же код ActiveRecord. Затем вам просто нужно настроить ваш MTA для доставки почты, подключив ее к вашему скрипту.

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

Я бы либо просто создал инструмент, который регулярно получает все письма в определенных учетных записях POP3, либо, что еще лучше (IMHO), извлекает его на основе событий.

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

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

С другой стороны, вам лучше спросить об этом на http://stackoverflow.com

Вместо POP (если вы идете по этому маршруту) используйте IMAP (S). Таким образом, вы можете оставить вещи на сервере "прочитанными" после того, как они будут обработаны.

Вы можете загрузить бесплатный компонент POP / SMTP com по адресу www.system-engine.com, в котором есть средства для интеграции в веб-приложение.