Django会收到电子邮件及其附件



在我正在工作的应用中,我想从我的gmail帐户中获取电子邮件。因此,我设置了一个存储电子邮件地址,端口,服务器和密码的类。

我创建了一个功能,可以从Gmail帐户电子邮件中获取主题,主体和部分,然后用" .eml"扩展名来备份邮件中的邮件。另外,我有一个"邮件list.html"模板,其中显示了上述标题和内容的列表。一切都很好,直到这里。

现在,如果有任何消息,我该如何获取该问题,因此我可以在"邮件list.html"模板中显示。这些用电子邮件的东西对我来说是全新的,因此任何示例代码甚至指向我的方向都很棒!

我已经检查了一些插件,例如Django邮箱,但我希望它是我的最后一个度假胜地。

在我正在工作的应用程序中,我想从我的Gmail帐户中获取电子邮件。因此,我设置了一个存储电子邮件地址,端口,服务器和密码的类。

我创建了一个功能,可以从Gmail帐户电子邮件中获取主题,主体和部分,然后用" .eml"扩展名来备份邮件中的邮件。另外,我有一个"邮件list.html"模板,其中显示了上述标题和内容的列表。一切都很好,直到这里。

现在,如果有任何消息,我该如何获取该问题,因此我可以在"邮件list.html"模板中显示。这些用电子邮件的东西对我来说是全新的,因此任何示例代码甚至指向我的方向都很棒!

我已经检查了一些插件,例如Django邮箱,但我希望它是我的最后一个度假胜地。

更新:

我设法获得了这样的附件...

#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 ['entactment']上下文中。

当文件名用英语时,我会得到这个: ['myessay.pdf','test.odt']

但是,当附件以不同的语言(例如希腊语)时,我会得到: ['=?utf-8?b?zrxos86zz4hosc gzr8xlmrvyw ==?=',',','=?utf-8?b?zrxos86zz4Hosc gzr8ylmrvyw ==?=',','=?utf-8?b?zrxos86zz4hosc gzr8xmi5kb2m =?=?=']

您可以看到上面的列表中的三个附件","。

我如何解码或编码它们?我不知道这里有什么合适的。

所以我已经弄清楚了。...我希望这对别人有帮助。我指的是获得附件的代码部分。

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

相关内容

  • 没有找到相关文章

最新更新