23

私は Django の電子メール送信機能にかなり慣れてきましたが、ユーザーからの電子メールの受信と処理については何も見たことがありません。この機能は利用できますか?

いくつかの Google 検索では、あまり有望な結果が得られませんでした。私はこれを見つけましたが:Pythonでメールを送受信する

私は自分自身をロールバックする必要がありますか?もしそうなら、私はあなたが言うよりも早くそのアプリを投稿します...あなたが何を言おうとも。

ありがとう、ジム

更新: メール サーバーを作成しようとしているわけではありません。サイトに画像をメールで送信し、アカウントにポップアップ表示する機能を追加する必要があるだけです。

4

3 に答える 3

20

Python を使用して着信メールを処理するjutda-helpdeskというアプリがあります。POP3 または IMAP にアクセスできるアカウントが必要です。poplibimaplib

これはget_email.pyから改作されています:

def process_mail(mb):
    print "Processing: %s" % q
    if mb.email_box_type == 'pop3':
        if mb.email_box_ssl:
            if not mb.email_box_port: mb.email_box_port = 995
            server = poplib.POP3_SSL(mb.email_box_host, int(mb.email_box_port))
        else:
            if not mb.email_box_port: mb.email_box_port = 110
            server = poplib.POP3(mb.email_box_host, int(mb.email_box_port))
        server.getwelcome()
        server.user(mb.email_box_user)
        server.pass_(mb.email_box_pass)

        messagesInfo = server.list()[1]

        for msg in messagesInfo:
            msgNum = msg.split(" ")[0]
            msgSize = msg.split(" ")[1]
            full_message = "\n".join(server.retr(msgNum)[1])

            # Do something with the message

            server.dele(msgNum)
        server.quit()

    elif mb.email_box_type == 'imap':
        if mb.email_box_ssl:
            if not mb.email_box_port: mb.email_box_port = 993
            server = imaplib.IMAP4_SSL(mb.email_box_host, int(mb.email_box_port))
        else:
            if not mb.email_box_port: mb.email_box_port = 143
            server = imaplib.IMAP4(mb.email_box_host, int(mb.email_box_port))
        server.login(mb.email_box_user, mb.email_box_pass)
        server.select(mb.email_box_imap_folder)
        status, data = server.search(None, 'ALL')
        for num in data[0].split():
            status, data = server.fetch(num, '(RFC822)')
            full_message = data[0][1]

            # Do something with the message

            server.store(num, '+FLAGS', '\\Deleted')
        server.expunge()
        server.close()
        server.logout()

mbすべてのメールサーバー情報を保存するためのオブジェクトにすぎません。残りはかなり明確なはずです。

poplibドキュメントをチェックしてimaplib、メッセージの特定の部分を取得する必要があるかもしれませんが、うまくいけば、これで十分です。

于 2009-04-08T19:43:37.613 に答える
6

この質問はかなり古いものであることはわかっていますが、今後の参考のために、http://cloudmailin.comを試してみることをお勧めします。システムを使用しているかなりの数のdjangoユーザーがいて、提案されたソリューションよりも少し簡単になるはずです。

于 2011-03-16T16:07:24.777 に答える
1

Django は実際には、電子メール サーバーとしてではなく、Web サーバーとして (つまり、Web サーバーに適合するフレームワークとして) 意図されています。リンク先の質問に示されている種類のコードを使用して、電子メールサーバーを起動する Django Web アプリケーションにコードを入れることができると思いますが、実際にはお勧めしません。これは、動的 Web プログラミングの機能の悪用です。

通常のやり方では、電子メール サーバーと Web サーバーを別々に用意します。そのためには、Sendmail や (できれば) Postfix などを検討することをお勧めします。POP3 の場合、Dovecot や Courier なども必要になると思います。(電子メールを受信したときに電子メール サーバーが Web アプリケーションに通知するようにして、電子メールに対応できるようにすることは確かに可能です。)

編集: あなたのコメントに応えて: はい、電子メール サーバーを作成 (または少なくとも使用) しようとしています。電子メール サーバーは、電子メールを受信する単なるプログラムです (送信することもできますが、その必要はありません)。

これらの電子メールを受信し、画像をファイルシステムやデータベースなどに保存するだけの小さな電子メールサーバーを Python で作成することは間違いありません。(新しい質問をする価値があるかもしれません) しかし、それを Django Web アプリの一部にしないでください。独自の別のプログラムとして保持します。

于 2009-04-08T16:23:38.813 に答える