2017-02-20 27 views
0

В приложении я работаю. Я хочу получить мои сообщения электронной почты, скажем, из моей учетной записи gmail. Поэтому я настроил класс, в котором хранятся адрес электронной почты, порт, сервер и пароль.Django получает электронные письма и их приложения

Я создал функцию, где я получаю разделы Subject, Body и From, из почтовых сообщений электронной почты gmail, и я создаю резервные копии писем в резервной папке с расширением «.eml». Кроме того, у меня есть шаблон «mail-list.html», в котором отображается список с вышеуказанными заголовками и контентом. Все хорошо, пока здесь.

Теперь, как я могу получить attchment, если какое-либо сообщение, поэтому я могу показать в своем шаблоне «mail-list.html», если он есть. Этот материал с электронной почтой для меня совершенно новый, поэтому любой пример кода или даже указание на направление было бы замечательным!

Я проверил некоторые pluggins, такие как почтовый ящик django, но я хочу, чтобы это было моим последним прибежищем.

В приложении я работаю. Я хочу получить мои электронные письма, скажем, из моей учетной записи gmail. Поэтому я настроил класс, в котором хранятся адрес электронной почты, порт, сервер и пароль.

Я создал функцию, где я получаю разделы Subject, Body и From, из почтовых сообщений электронной почты gmail, и я создаю резервные копии писем в резервной папке с расширением «.eml». Кроме того, у меня есть шаблон «mail-list.html», в котором отображается список с вышеуказанными заголовками и контентом. Все хорошо, пока здесь.

Теперь, как я могу получить attchment, если какое-либо сообщение, поэтому я могу показать в своем шаблоне «mail-list.html», если он есть. Этот материал с электронной почтой для меня совершенно новый, поэтому любой пример кода или даже указание на направление было бы замечательным!

Я проверил некоторые pluggins, такие как почтовый ящик django, но я хочу, чтобы это было моим последним прибежищем.

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 

Так что теперь, я кладу имена файлов в списке, и использовать их в моем шаблоне I поместите их в контекст mail_list ['attachment'].

Когда имена файлов на английском языке я получаю это: [ «myessay.pdf», «test.odt»]

Но когда вложение в другом языке (например, греческий) я получаю: ['=? UTF-8? B? ZrXOs86zz4HOsc + Gzr8xLmRvYw ==? =', '=? UTF-8? B? ZrXOs86zz4HOsc + Gzr8yLmRvYw ==? =', '=? UTF-8? B? ZrXOs86zz4HOsc + Gzr8xMi5kb2M = ? = ']

Как вы можете видеть выше, в списке есть три вложения, разделенные символом «,».

Как его декодировать или закодировать? Я не знаю, что здесь уместно.

+0

Какой почтовый сервис вы используете? –

+0

Я использую gmail, из браузера. Он работает с любым сервисом, хотя ... Я тоже пробовал с office365. –

ответ

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 %}