2017-02-20 12 views
0

私は働いているアプリケーションで私の電子メールを取得したいと思います。私のGmailアカウントから言いましょう。そこで、電子メールのアドレス、ポート、サーバー、およびパスワードを格納するクラスを設定しました。Djangoは電子メールとその添付ファイルを受信します

Gmailアカウントの電子メールからSubject、Body、およびFromセクションを取得し、 ".eml"という拡張子を持つバックアップフォルダにメールをバックアップする機能を作成しました。また、私は上記のヘッダーと内容でリストが表示されている "mail-list.html"テンプレートを持っています。ここまで良い。

メッセージがある場合、アタッチメントを取得するにはどうすればいいですか?「mail-list.html」テンプレートがあれば表示できます。 電子メールのこの記事は私には全く新しいものなので、コード例や指向さえあればすばらしいでしょう!

私はdjangoメールボックスなどのいくつかのplugginsをチェックアウトしましたが、私はそれを私の最後の手段にしたいと思います。

私が働いているアプリでは、私の電子メールを取得したい、私のGmailアカウントから言いましょう。そこで、電子メールのアドレス、ポート、サーバー、およびパスワードを格納するクラスを設定しました。

Gmailアカウントの電子メールからSubject、Body、およびFromセクションを取得し、 ".eml"という拡張子を持つバックアップフォルダにメールをバックアップする機能を作成しました。また、私は上記のヘッダーと内容でリストが表示されている "mail-list.html"テンプレートを持っています。ここまで良い。

メッセージがある場合、アタッチメントを取得するにはどうすればいいですか?「mail-list.html」テンプレートがあれば表示できます。 電子メールのこの記事は私には全く新しいものなので、コード例や指向さえあればすばらしいでしょう!

私はdjangoメールボックスなどのいくつかのplugginsをチェックアウトしましたが、私はそれを私の最後の手段にしたいと思います。

UPDATE:

私はこのような添付ファイルを取得するために管理しています...

#previous code here to get subject,body etc in my function 

if message.get_content_maintype() == 'multipart': 
    filenames_list = []   
    for part in message.walk(): 
     print("part.get_content_maintype ",part.get_content_maintype()) 
     #find the attachment part - so skip all the other parts 

     if part.get_content_maintype() == 'multipart': continue 
     if part.get_content_maintype() == 'text': continue 
     if part.get('Content-Disposition') == 'inline': continue 
     if part.get('Content-Disposition') is None: continue 

     #put attachments in list 
     filenames_list.append(filename) 
     print ("filenames_list",filenames_list) 

     #create context for template 
     mail_list['attachment'] = filenames_list 

はだから今、私はリストに私のファイル名を入れて、私のテンプレートで私をそれらを使用しますそれらをmail_list ['attachment']コンテキストに入れてください。

ファイル名が英語で表示されたとき、私はこの取得:私が手 (例えば、ギリシャ語用)[「myessay.pdf」、「test.odt」]

しかし、添付ファイルが異なる言語である:をUTF-8?B?zrXOs86zz4HOsc + Gzr8xLmRvYw == UTF-8?B zrXOs86zz4HOsc + Gzr8yLmRvYw == UTF-8?B zrXOs86zz4HOsc + Gzr8xMi5kb2M = ?= ']

上記のように、リストには「、」で区切られた3つの添付ファイルがあります。

デコードまたはエンコードする方法は?私はここで何が適切か分からない。

+0

あなたがメールサービスを使用していますか? –

+0

私はブラウザからGmailを使用しています。それはどんなサービスでもスウィーリングしています。私はオフィスでもやってみました365。 –

答えて

0

私はそれを理解しています....他人に役立つことを願っています。 添付ファイルを取得するコードの部分を参照しています。私のテンプレートで

#some code before to require the server variable from the model where 
#I store all the required fields for the connction(port,e-mail address etc) 
... 
... 
... 


pop3 = poplib.POP3_SSL(server) # or "POP3" if SSL is not supported 
msg_list = pop3.list() 
pop3.list() 
#Get messages from server: 
messages = [pop3.retr(i) for i in range(1, len(pop3.list()[1]) + 1)] 
# Concat message pieces: 
messages = ["\n".join(m[1]) for m in messages] 
#Parse message intom an email object: 
messages = [parser.Parser().parsestr(m) for m in messages] 
for message in messages: 
    mail_list = {} 
    for item in message.items(): 
     #code to get subject,from,date 
     ... 
     ... 

     #and now to get the attachments of each message 

     for part in message.walk(): 
      #find the attachment part - so skip all the other parts 
      if part.get_content_maintype() == 'multipart': continue 
      if part.get_content_maintype() == 'text': continue 
      if part.get('Content-Disposition') == 'inline': continue 
      if part.get('Content-Disposition') is None: continue 

       #get filename 
       filename = part.get_filename() 
       #this is for encoding other than latin-letter-languages 
       if decode_header(filename)[0][1] is not None: 
        filename = str(decode_header(filename[0][0]).decode(decode_header(filename)[0][1]) 
      filenames_list.append(filename) 
      mail_list['attachment'] = filenames_list 

context['messages'] = mail_list 

、ファイルが正しく表示するためには、私はまた、このような「添付ファイル」を反復処理する必要があります。

{% for d in messages %} 

/*subject,from,date = parts of the message I have got inside the function before the code I am displaying*/ 

{{ d.subject }} 
{{ d.from }} 
{{ d.date }} 

{% for t in d.attachment %}{{ t }}{% endfor %} 

{% endfor %} 
関連する問題