4

mywebsite.com で受信したすべての電子メールをリッスンして受信する後置サーバーがあります。これらの後置電子メールをカスタマイズされたインターフェイスで表示し、それを各ユーザーにも表示したいと考えています。

明確にするために、mywebsite.com のすべてのユーザーには someguy@mywebsite.com のようなメール アドレスが与えられます。このユーザーは私の運用マシンで電子メールを受信しますが、mywebsite.com のダッシュボードに組み込まれた自分のコンソールでそれらを確認します。

したがって、受信したメールをユーザーに表示するには、後置メールのメール レプリカを作成して、(django-python で実行される) mywebsite がすぐに反映されるようにする必要があります。どうすればこれを達成できますか。正確に言うと、これは私の質問です。後置メールをPythonメールオブジェクトに変換するにはどうすればよいですか(私のシステム/ウェブサイトがそれを理解できるようにするため)?

明確にするために、私が望むものを達成するために疑似コードを書きました:

email_as_python_object = postfix_email_convertor(postfix_email)
attachments_list = email_as_python_object.attachments
body = email_as_python_object.body # be it html or whatever

ところで、Python に付属しているデフォルトの電子メール モジュールを試してみましたが、すべての場合に便利というわけではありません。また、メールの添付ファイルを手動で処理する必要があります (これは嫌いです)。このような場合に対処する簡単な方法が必要です(postfixが受信したメールをどのように理解するのか、つまり、さまざまなヘッダー、添付ファイルなどを自動的に把握する方法を知りたいと思っていました..)。私を助けてください。

4

3 に答える 3

9

Postfix をローカルのメールボックスに配信し、Web メール システムを使用して人々が保存されたメールにアクセスできるようにします。

postfix にとらわれないでください - それはただの転送エージェントです - それはある場所からメッセージを受け取り、別の場所に置きます。メッセージを保存しません。したがって、postfix は SMTP 経由でメッセージを取得し、ローカルのメール ファイルに配置します。

次に、IMAP または一部の Web メール システムがこれらのメッセージをユーザーに表示します。

メールを webapp に統合したい場合は、おそらく IMAP サーバーを実行し、python IMAP ライブラリを使用してメッセージを取得する必要があります。

于 2009-03-03T18:50:21.293 に答える
7

まず第一に、Postfix のメール ルーティング ルールは非常に複雑になる可能性があり、おそらく好ましいと思われる解決策には、間違った場所に多くの策略が含まれています。他のユーザーのメールを誤って表示したくありませんか? 第二に、Postfix はほとんど何でもできますが、MDA (メール配信エージェント) にすぎないため、すべきではありません。

ソリューションは、POP3 または IMAP サーバー (Cyrus IMAPd、Courier など) を使用して解決するのが最適です。IMAP サーバーは、すべてのユーザーのメールを読むことができる「スーパーユーザー アカウント」を持つことができます。その後、Web アプリケーションはユーザーのメールボックスに接続し、ヘッダーと本文を取得できます。

件名のみを表示したい場合は、特別な IMAP コマンドと非常に低いオーバーヘッドで取得できます。ただし、Python IMAP ライブラリには、理解しやすい API はありません。標準ライブラリから取得した例を使用して、試してみます(チェックしていません!):

import imaplib

sess = imaplib.IMAP4()
sess.login('superuser', 'password')
# Honor the mailbox syntax of your server!
sess.select('INBOX/Luke') # Or something similar. 
typ, data = sess.search(None, 'ALL') # All Messages.

subjectlines = []
for num in data[0].split():
    typ, msgdata = sess.fetch(num, '(RFC822.SIZE BODY[HEADER.FIELDS (SUBJECT)])')
    subject = msgdata[0][1].lstrip('Subject: ').strip()
    subjectlines.append(subject)

これにより、IMAP サーバーにログインし、ユーザーのメールボックスを選択し、すべてのメッセージ ID を取得してから (できれば) 件名のみを取得し、結果のデータを件名リストに追加します。

メールの他の部分を取得するには、行をsess.fetchで変更します。fetchの特定の構文については、RFC 2060 (セクション 6.4.5) を参照してください。

幸運を!

于 2009-03-03T19:17:57.623 に答える
0

質問を理解しているかどうかわかりません。

リモート Web アプリケーションでユーザーのメールボックスを表示できるようにする場合は、pop または imap サーバーをインストールし、メール クライアント (既製のものを見つけることができるはずです) を使用して電子メールを読み取ることができます。または、Python 自体に付属する関連ライブラリを使用して、pop/imap サーバーに問い合わせるための何かを作成することもできます。

メールを別のマシンに複製したい場合は、procmail を使用して、これを行うためのアクションを設定できます。Postfix は、この方法で procmail を呼び出すように設定できます。

于 2009-03-03T18:35:07.820 に答える