Рекомендации по получению электронной почты в rails
Я пытался выяснить, как лучше всего обрабатывать входящую электронную почту в приложениях rails. Я понимаю, что" лучшие практики " довольно субъективны, поэтому я начну с того, что мои основные проблемы-масштабируемость и эффективность. Это проблема в первую очередь потому, что мое использование будет включать обработку потенциально больших вложений.
кажется, только вчера принятый метод должен был использовать ActionMailer для получения электронной почты, но недавно я наткнулся на несколько статей говоря, что это неэффективно, поскольку он порождает новый экземпляр rails с каждым письмом (ужасно при больших объемах).
в последнее время эта статья привлекает мое внимание: http://jasonseifer.com/2009/04/24/receving-email-with-rails
сообщение говорит о уменьшенной версии системы ActionMailer, которая не вынуждена порождать весь экземпляр rails, но комментарии говорят о нескольких других вариантах, таких как выделенный почтовый каталог (maildir?) и извлечение imap / pop.
мой вопрос: есть ли у кого-нибудь мысли о том, какой лучший вариант в настоящее время будет для обработки входящей электронной почты в приложении rails (включая вложения)?
5 ответов
Я поддерживаю плагин сборщик для загрузки электронной почты с сервера IMAP, который я использую с cron. Раньше я использовал демона, но это было трудно продолжать работать (даже с monit), потому что Ruby зависнет. Cron в порядке для моей рабочей нагрузки, но он порождает процесс Rails один раз в минуту.
для обработки вложений, проверьте MMS2R библиотека. Он имеет хороший интерфейс для получения файлов из электронной почты.
другой подход, который у меня был мне рекомендуется запускать HTTP-сообщение для каждого полученного сообщения. Затем вы можете масштабировать свой веб-уровень для его обработки.
промоушен: вы можете проверить Майк Мондрагон и мой PeepCode книга на получение электронной почты с Ruby.
вы можете попробовать использовать такую услугу, какhttp://cloudmailin.com/
для ретрансляции электронной почты из Postfix в приложение Rails через HTTP, я только что написал статью о том, как мы это делаем.
Это на самом деле довольно просто, но мы также используем способность Postfix откладывать электронную почту, если она не может быть передана. До сих пор я такого нигде не видел. См.http://www.doorkeeperhq.com/developer/smtp-to-web-api для деталей.
в mms2r в MMS2R#default_media
просто возвращает самое большое вложение видео, если оно существует, или самое большое вложение изображения, если оно существует, или самое большое вложение текста, если оно существует, в этом порядке. MMS2R#default_text
возвращает самое большое текстовое / простое вложение, если оно существует. Вы также можете открыть любые вложения напрямую через mms2r СМИ хэширования, например, MMS2R#СМИ. MMS2R#media
ключом по умолчанию. это значение ссылается ключ является массивом из носителей этого типа. Итак, если бы было два jpeg-вложения в электронной почте, обработанной MMS2R, вы получите доступ к ним в виде массива, введя хэш мультимедиа с помощью image / jpeg, например MMS2R#media['image/jpeg']
когда MMS2R сначала обрабатывает электронное письмо, любое найденное вложение декодируется и сохраняется в массиве носителей этого типа. Как я уже сказал, этот массив затем настраивается mimetype в MMS2R#media
хэш.
Купить книгу, мне нужно оплатить ипотеку PeepCode книга на получение электронной почты с Ruby.
недавно я написал демон, который получает почту от Postfix с помощью LMTP (он использует EventMachine и довольно быстрый и надежный) и сохраняет его в MongoDB. В этом смысле он устраняет среднего человека (IMAP server + IMAP client). Такой подход дает практически безграничную масштабируемость и избыточность. Поддержка других бэкэндов (MySQL, Redis и т. д.) может быть добавлен практически в кратчайшие сроки.