python 使用zmail收发电子邮件

Python019

python 使用zmail收发电子邮件,第1张

1、发送邮件

import zmail

server = zmail.server(' [email protected] ’, 'yourpassword')

server.send_mail(' [email protected] ',{'subject':'Hello!','content_text':'By zmail.'})

server.send_mail([' [email protected] ',' [email protected] '],{'subject':'Hello!','content_text':'By zmail.'})

2、接收最后一封邮件:

import zmail

server = zmail.server(' [email protected] ’, 'yourpassword')

latest_mail = server.get_latest()

zmail.show(latest_mail)

3、发送带附件的邮件:

import zmail

mail = {

'subject': 'Success!', # Anything you want.

'content_text': 'This message from zmail!', # Anything you want.

'attachments': ['/Users/zyh/Documents/example.zip','/root/1.jpg'], # Absolute path will be better.

}

server = zmail.server(' [email protected] ’, 'yourpassword')

server.send_mail(' [email protected] ', mail)

server.send_mail([' [email protected] ',' [email protected] '], mail)

4、发送html格式邮件:

with open('/Users/example.html','r') as f:

content_html = f.read()

mail = {

'subject': 'Success!', # Anything you want.

'content_html': content_html,

'attachments': '/Users/zyh/Documents/example.zip', # Absolute path will be better.

}

server.send_mail(' [email protected] ',mail)

5、使用抄送:

server.send_mail([' [email protected] ',' [email protected] '],mail,cc=[' [email protected] '])

6、自定义server

server = zmail.server('username','password',smtp_host='smtp.163.com',smtp_port=994,smtp_ssl=True,pop_host='pop.163.com',pop_port=995,pop_tls=True)

7、根据ID取回邮件:mail = server.get_mail(2)

根据日期、主题、发送人取回邮件:

mail = server.get_mails(subject='GitHub',after='2018-1-1',sender='github')

mail = server.get_mails(subject='GitHub',start_time='2018-1-1',sender='github',start_index=1,end_index=10)

8、查看邮箱统计

mailbox_info = server.stat() #结果为包含两个整型的元组: (邮件的数量, 邮箱的大小).

9、删除邮件:MailServer.delete(which)

10、保存附件:zmail.save_attachment(mail,target_path=None,overwrite=False)

11、保存邮件:zmail.save(mail,name=None,target_path=None,overwrite=False)

12、读取邮件:zmail.read(file_path,SEP=b'\r\n')

支持的列表:

由上篇文章我们已经得知邮件从发送到接收的过程:

发件人->MUA->MTA->若干MTA->MDA->MUA->收件人

本节接收邮件主要就是编写一个 MUA 客户端,从 MDA 将邮件取回本地。

收取邮件最常用的是 POP协议 ,目前版本是第三版,也称 POP3 。python内置了 poplib 模块,支持POP3协议。

回想上一节 SMTP ,我们对要发送的邮件内容进行了各种编码,包括添加MIME header,编码之后再进行发送。

因此,我们通过POP3协议接收的也不是原内容,而是经过一系列编码等处理的文本。

所以,要想把POP3收取的文本变为可阅读的邮件对象,就需要利用 email 模块对原始邮件进行解析。

所以,邮件收取的流程就是:

由上一篇 文章 最后总结部分可知。邮件由字符到发送到网络经历了如下的格式转化:

纯文本:

str->bytes->base64->str->bytes

二进制文件:

binary code->base64->str->bytes

我们解析邮件也是按这个思路,逆序解析出内容。

这里的 decode('utf-8') 先把字节流转化为字符串,再将字符串转化为 message 结构的对象。这步与发送邮件的 as_string 函数相反。

先从上一节结构化的 msg 中取出信件头,打印出来。

如果是 multipart 结构, get_payload 函数会返回一个包含不同part的list,然后对每一part递归调用 print_info ,打印子信件头和子信件内容。

不是 multipart 时,之后再依据 Content-Type 作不同处理:

如果是 text :

利用 get_payload(decode = Ture) 取出子信件的内容, decode 为True,则按照 Content-Transfer-Type 将 base64 或 QP 解码为 bytes 。

再 guess_charset 猜出编码方式,之后将其解码为字符显示。

如果不是 Text 对象,则为附件:

打印出附件的 Content-Type 。