2009-04-08 38 views
21

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

Google検索ではあまり有望な結果が得られていません。私はこれを見つけましたが、Receive and send emails in python

私は自分自身をロールバックするつもりですか?もしそうなら、私はあなたが言うことよりも速くそのアプリをポストするでしょう。

おかげで、 ジム

更新:私は、電子メールサーバをしようとしていないよ、私はちょうどあなたがサイトに画像を電子メールで送信し、それはあなたの中にポップアップ表示することができ、いくつかの機能を追加する必要がありますアカウント。

+0

この質問も参照してください:http://stackoverflow.com/questions/640970/email-integration –

答えて

17

jutda-helpdeskというアプリがあり、Pythonのpoplibimaplibを使って受信メールを処理しています。あなたはPOP3またはIMAPアクセスのどこかにアカウントを持っていなければなりません。

これは、彼らの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は、残りの部分はかなり明確にする必要があり、すべてのメールサーバー情報を格納するだけでいくつかのオブジェクトです。

poplibimaplibでメッセージの特定の部分を確認する必要があるかもしれませんが、うまくいけば十分です。

2

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

普通の方法は、電子メールとWebサーバーを別々にすることです。そのためには、SendmailやPostfixのようなものを調べることをお勧めします。 POP3の場合は、DovecotやCourierのようなものも必要です。 (あなたがしたいと思えば、電子メールサーバにメールが届いたときにあなたのウェブアプリケーションに通知して、あなたがしたいことがあれば、それは確かに可能です)。電子メールサーバを作成しようとする(または少なくとも使用する)。電子メールサーバーは、電子メールを受信するプログラムです(送信することも可能ですが、その必要はありません)。

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

+1

私は電子メールサーバーを作ろうとはしていません。あなたのアカウントにポップアップさせてください。 – Jiaaro

5

私はこの質問がかなり古いことを知っていますが、ちょうど私が将来の参照のためにあなたが与えたいと思うかもしれないと思っていましたhttp://cloudmailin.com。私たちは、システムを使用するかなりの数のジャンゴユーザーを持っています、そして、それは提案された解決策より少し簡単であるはずです。

+0

本当にありがとう、これはまさに私が探していたものです。 –

関連する問題