9

Railsアプリケーションで受信メールを処理する最良の方法を見つけようとしています。「ベスト プラクティス」は非常に主観的なものであることを理解しています。そのため、私の主な関心事はスケーラビリティと効率であることを述べることから始めます。これは主に、大きな添付ファイルの処理が必要なためです。

昨日までは ActionMailer を使用して電子メールを受信する方法が受け入れられていたようですが、最近、電子メールごとに新しい Rails インスタンスを生成するため (大量の場合は恐ろしい)、これは非効率的であるという記事をいくつか見つけました。

ごく最近、この記事が注目を集めています: http://jasonseifer.com/2009/04/24/receving-email-with-rails

この投稿では、Rails インスタンス全体を強制的に生成する必要のない ActionMailer システムのスリム化されたバージョンについて述べていますが、コメントでは、専用のメール ディレクトリ (maildir?) や imap/pop の取得など、他のいくつかのオプションについて述べています。

私の質問は次のとおりです。Rails アプリケーション (添付ファイルを含む) で受信メールを処理するための現在の最良のオプションについて何か考えている人はいますか?

4

5 に答える 5

6

cron で使用する IMAP サーバーからメールをダウンロードするためのFetcher プラグインを維持しています。以前はデーモンを使用していましたが、Ruby がハングするため (monit を使用しても) 実行し続けるのは困難でした。Cron は私のワークロードには問題ありませんが、1 分に 1 回 Rails プロセスを生成します。

添付ファイルの処理については、MMS2Rライブラリを確認してください。電子メールからファイルを取得するための優れたインターフェイスがあります。

私が私に勧めたもう 1 つの方法は、受信したメッセージごとに HTTP 投稿を送信することです。次に、Web 層をスケーリングして処理できます。

恥知らずなプラグイン: Ruby でメールを受信する方法については、Mike Mondragon と私のPeepCode の本を参照してください。

于 2009-08-16T07:52:15.943 に答える
4

http://cloudmailin.com/のようなサービスを使用してみてください。

于 2010-10-27T23:48:42.377 に答える
3

HTTP 経由で Postfix から Rails アプリにメールをリレーする方法について、記事を書きました。

実際には非常に単純ですが、中継できない場合に電子メールを延期する Postfix の機能も活用しています。これまでのところ、他の場所では見たことがありません。詳細については、 http://www.doorkeeperhq.com/developer/smtp-to-web-apiを参照してください。

于 2013-07-30T05:13:28.200 に答える
1

mms2r では、MMS2R#default_media存在する場合は最大のビデオ添付ファイル、存在する場合は最大の画像添付ファイル、存在する場合は最大のテキスト添付ファイルをこの順序で返します。 MMS2R#default_text存在する場合、最大のテキスト/プレーン添付ファイルを返します。また、mms2r のメディア ハッシュ (MMS2R#media など) を介して、任意の添付ファイルに直接アクセスすることもできます。 MMS2R#mediamimetype によってキーが付けられている場合、キーによって参照されるその値は、そのタイプのメディアの配列です。したがって、MMS2R によって処理された電子メールに 2 つの jpeg 添付ファイルがあった場合、メディア ハッシュを image/jpeg でキー指定することにより、配列としてそれらにアクセスします。MMS2R#media['image/jpeg']

MMS2R が最初に電子メールを処理するとき、見つかった添付ファイルはすべてデコードされ、そのタイプのメディアの配列に格納されます。先ほど言ったように、その配列はMMS2R#mediaハッシュの mimetype によってキー付けされます。

Ruby でメールを受信したら、住宅ローンの PeepCodeの本を支払う必要があります。

于 2009-08-21T06:59:39.837 に答える
0

私は最近、LMTPを使用してPostfixからメールを受信し(EventMachineを使用し、非常に高速で堅牢です)、MongoDBに保存するデーモンを作成しました。その意味で、仲介者(IMAPサーバー+ IMAPクライアント)を排除します。このアプローチにより、ほぼ無制限のスケーラビリティと冗長性が得られます。他のバックエンドサポート(MySQL、Redisなど)は、事実上すぐに追加できます。

受け取った

于 2011-05-01T14:17:06.690 に答える