システム管理者が制御できる MX サーバーのあるドメインを使用する電子メール アドレスが必要です。これは、プライマリ ドメインのサブドメインである可能性があります。次に、その電子メールを Rails にパイプするように MTA ソフトウェア (Exim、Postfix ... できれば qMail ではない!) を構成します。
http://guides.rubyonrails.org/action_mailer_basics.html#receiving-emails
Rails アプリケーション自体と同じサーバーに MTA がインストールされていない場合は、電子メールをアプリに POST するという行に沿って何かを行う小さなアドホック フォワーダー スクリプトに電子メールをパイプする必要があります。それをメーラーに渡します。
メーラーでは、すべてのヘッダー、本文、添付ファイルなどにアクセスできます。件名または返信先アドレスに一意の識別子を入力すると、メールを転送するためにどのメーラーをインスタンス化するかを決定できます。意図した受信者。
これはまだ行っていませんが、同じ理由で行う予定です。ただし、MTA の構成に慣れていない場合は、少し頭を悩ませるかもしれません。このタスクを実行できるシステム管理者はいますか?
コード レベルでは、次のようにします。
ユーザー A (id = 1234) がユーザー B (id = 5678) にメールを送信します。
あなたが所有している任意のアドレスから電子メールを送信しますが、次のReply-To:ように設定しますReply-To: <mail-1234-5678-abcdefabcd1234567890abcdefabcdef@usermessages.your-domain.com>
これは、この作業の絶対的な鍵です。これには、送信者の ID、受信者の ID、および偽造を防止するためのチェックサムが含まれます。チェックサムは、各ユーザーに固有のソルトから生成でき、単純に次のとおりです。
checksum = Digest::MD5.hexdigest("#{sender.id}-#{recipient.id}-#{sender.mailer_salt}")
「usermessages.your-domain.com」ドメイン用に設定した MX 経由で返信を受信したら、最初にTo:フィールドを解析して送信者と受信者を識別します。splitパーツを切り出すことで、送信者と受信者が誰であるかを簡単に識別できます。次に、チェックサムを生成して一致することを確認し、誰かが別のユーザーからのメールであるかのように悪意を持ってメールを送信しようとしていないことを確認します。
関与しているユーザーを特定したら、先に進み、これらの特別なReply-To:ヘッダーのいずれかを使用して別の電子メールを送信します (ID が逆になり、ダイジェストが別のソルトを使用して行われることは明らかです)。
これは非常に初歩的な例ですが、完全に機能する例です。このダイジェストは、返信が戻ってきたときに保持される場合は、好きな場所に配置できます (Reply-To:ヘッダーが適しています。一部のサービスでは、代わりに件名行が使用されます。
ユーザーがその情報を変更する(パスワードを変更する)と、チェックサムが検証されなくなるため、ソルトをユーザーのパスワードハッシュなど、ユーザーが制御するものにすることは避けます。