2009-08-16 112 views
9

我一直在試圖找出在rails應用程序中處理傳入電子郵件的最佳方法。我意識到「最佳實踐」是非常主觀的,因此我首先要說明我的主要擔憂是可擴展性和效率。這是一個問題,主要是因爲我的使用涉及處理潛在的大附件。在rails中接收電子郵件的最佳做法

似乎就在昨天,接受的方法是使用ActionMailer來接收電子郵件,但最近我偶然發現了幾篇文章,說這是低效的,因爲它會產生一個帶有每封電子郵件的新rails實例(可怕的是大容量)。

最近,這篇文章一直讓我注意: http://jasonseifer.com/2009/04/24/receving-email-with-rails

關於不被強迫產卵整個軌實例的ActionMailer系統的削減版本的後期談判,但該意見說說其他幾個選項,如專用郵件目錄(maildir?)和imap/pop檢索。

我的問題是:有沒有人有任何想法來處理在Rails應用程序(包括附件)中傳入電子郵件的最佳選擇?

回答

6

我維護Fetcher plugin從我使用cron的IMAP服務器下載電子郵件。我曾經使用過一個守護進程,但這很難繼續運行(即使是monit),因爲Ruby會掛起。 Cron對於我的工作負載沒問題,但它每分鐘都會產生一次Rails進程。

要處理附件,請查看MMS2R庫。它有一個很好的界面,用於從電子郵件中獲取文件。

我推薦給我的另一種方法是爲每條收到的消息發送一個HTTP帖子。然後你可以擴展你的web層來處理它。

無恥插頭:你可能想看看麥克蒙德拉貢和我的PeepCode book on receiving email with Ruby

+1

無恥的插頭不是無恥的,如果他們是相關的;-),我會檢查出來。關於IMAP選項,它是如何工作的?你是否需要在其他地方訪問外部電子郵件帳戶,或者你是否託管了自己的電子郵件服務器,並從中獲取?謝謝! – Ryan 2009-08-16 18:04:12

+0

我使用Google Apps電子郵件帳戶。不過,任何擁有IMAP訪問權限的帳戶都應該可以工作 – 2009-08-16 22:31:53

+1

對於我個人的情況,我打算使用http post,僅僅是因爲我的情況不利於IMAP訪問(整個域的電子郵件)。感謝您的回答,並感謝讓我開啓MMS2R! – Ryan 2009-08-18 02:40:32

1

in mms2r MMS2R#default_media只是返回最大的視頻附件(如果它存在),或最大的圖像附件(如果存在),或最大的文本附件(如果存在),按照該順序。 MMS2R#default_text返回最大的文本/簡單附件(如果存在)。您還可以直接通過mms2r的媒體哈希訪問任何附件,例如MMS2R#媒體。 MMS2R#media由mimetype鍵入,該鍵引用的值是該類型的媒體數組。因此,如果在由MMS2R處理的電子郵件中存在兩個jpeg附件,則可以通過使用image/jpeg鍵入媒體散列來將它們作爲數組訪問,例如, MMS2R#media['image/jpeg']

當MMS2R第一次處理電子郵件時,它發現的任何附件都被解碼並存儲在該類型的媒體陣列中。正如我所說的那樣,該陣列隨後被MMS2R#media散列中的mimetype鍵入。

買書,我需要支付我的抵押PeepCode book on receiving email with Ruby

4

您可以嘗試使用服務像http://cloudmailin.com/

+0

我還沒有試過這個,但下次我遇到這個問題時我會檢查一下。我與sendgrid.com合作過,並且可以將它推薦給需要這種服務的任何人......只是想爲未來的讀者提供幫助! – Ryan 2010-12-02 06:30:26

0

我最近寫了使用LMTP(它使用EventMachine的,是非常快速和強大的),其接收來自Postfix郵件並將其保存到MongoDB的守護進程。從這個意義上說,它消除了中間人(IMAP服務器+ IMAP客戶端)。這種方法提供了無限的可擴展性和冗餘性。其他後端支持(MySQL,Redis等)幾乎可以在任何時候添加。

received

2

對於通過HTTP中繼來自Postfix的郵件到您的Rails應用程序,我只是寫了一篇關於我們如何做的文章。

這其實很簡單,但我們也利用Postfix的能力推遲郵件,如果它不能被中繼。到目前爲止我還沒有在其他地方看到過。詳情請參閱http://www.doorkeeperhq.com/developer/smtp-to-web-api