Python如何使用email、smtplib、poplib、imaplib模块收发邮件


本文小编为大家详细介绍“Python如何使用email、smtplib、poplib、imaplib模块收发邮件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何使用email、smtplib、poplib、imaplib模块收发邮件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一封电子邮件的旅程是:MUA:Mail User Agent——邮件用户代理。(即类似Outlook的电子邮件软件)MTA:Mail Transfer Agent——邮件传输代理,就是那些Email服务提供商,比如网易、新浪等等。MDA:Mail Delivery Agent——邮件投递代理。Email服务提供商的某个服务器发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA
要编写程序来发送和接收邮件,本质上就是:编写MUA把邮件发到MTA;编写MUA从MDA上收邮件。发邮件时,MUA和MTA使用的协议就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一个MTA也是用SMTP协议。收邮件时,MUA和MDA使用的协议有两种:POP:Post Office Protocol,目前版本是3,俗称POP3;IMAP:Internet Message Access Protocol,目前版本是4,优点是不但能取邮件,还可以直接操作MDA上存储的邮件,比如从收件箱移到垃圾箱,等等。即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。Python对SMTP支持有smtplibemail两个模块,email负责构造邮件,smtplib负责发送邮件。构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:首先,我们来构造一个最简单的纯文本邮件,然后,通过SMTP发出去。注意到构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain',最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。语法如下:参数说明:host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。语法如下:参数说明:from_addr: 邮件发送者地址。to_addrs: 字符串列表,邮件发送地址。msg: 发送消息这里要注意一下第三个参数,msg 是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意 msg 的格式。这个格式就是 smtp 协议中定义的格式。以下执行实例需要你本机已安装了支持 SMTP 的服务。sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个stras_string()MIMEText对象变成str。经过Header对象编码的文本,包含utf-8编码信息和Base64编码的文本。以下是一个使用 Python 发送邮件简单的实例:如果我们本机没有 sendmail 访问,也可以使用其他邮件服务商的 SMTP 访问(QQ、网易、Google等)。login()方法用来登录SMTP服务器发收件件人的名字没有显示为友好的名字,比如Mr Green;使用 formataddr方法来格式化一个邮件地址。如果包含中文,需要通过Header对象进行编码。msg['To']接收的是字符串而不是list,如果有多个邮件地址,用,分隔即可。Python在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了:具体代码如下:带附件的邮件可以看做包含若干部分的邮件:文本和各个附件本身,所以,可以构造一个MIMEMultipart对象代表邮件本身,然后往里面加上一个MIMEText作为邮件正文,再继续往里面加上表示附件的MIMEBase对象即可。发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件免费云主机域名,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。邮件的 HTML 文本中一般邮件服务商添加外链是无效的,正确添加图片的实例如下所示:或者通过MIMEBase来添加图片如果我们发送HTML邮件,收件人通过浏览器或者Outlook之类的软件是可以正常浏览邮件内容的,但是,如果收件人使用的设备太古老,查看不了HTML邮件怎么办?办法是在发送HTML的同时再附加一个纯文本,如果收件人无法查看HTML格式的邮件,就可以自动降级查看纯文本邮件。利用MIMEMultipart就可以组合一个HTML和Plain,要注意指定subtype是alternative:使用标准的25端口连接SMTP服务器时,使用的是明文传输,发送邮件的整个过程可能会被窃听。要更安全地发送邮件,可以加密SMTP会话,实际上就是先创建SSL安全连接,然后再使用SMTP协议发送邮件。某些邮件服务商,例如Gmail,提供的SMTP服务必须要加密传输。我们来看看如何通过Gmail提供的安全SMTP发送邮件。只需要在创建SMTP对象后,立刻调用starttls()方法,就创建了安全连接。后面的代码和前面的发送邮件代码完全一样。必须知道,Gmail的SMTP端口是587,因此,修改代码如下:收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上。收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3。Python内置一个poplib模块,实现了POP3协议,可以直接用来收邮件。POP3 的命令和响应数据都是基于 ASCII 文本的,并以 CR 和 LF(/r/n) 作为行结束符,响应数据包括一个表示返回状态的符号(+/)和描述信息。请求和响应的标准格式如下:请求标准格式:命令 [参数] CRLF
响应标准格式:+OK /[-ERR] description CRLFPOP3 协议客户端的命令和服务器端对应的响应数据如下:user name:向 POP 服务器发送登录的用户名。pass string:向 POP 服务器发送登录的密码。quit:退出 POP 服务器。stat:统计邮件服务器状态,包括邮件数和总大小。list [msg_no]:列出全部邮件或指定邮件。返回邮件编号和对应大小。retr msg_no:获取指定邮件的内容(根据邮件编号来获取,编号从 1 开始)。dele msg_no:删除指定邮件(根据邮件编号来删除,编号从 1 开始)。noop:空操作。仅用于与服务器保持连接。rset:用于撤销 dele 命令。poplib 模块完全模拟了上面命令,poplib.POP3 或 poplib.POP3_SSL 为上面命令提供了相应的方法,开发者只要依次使用上面命令即可从服务器端下载对应的邮件注意到POP3协议收取的不是一个已经可以阅读的邮件本身,而是邮件的原始文本,这和SMTP协议很像,SMTP发送的也是经过编码后的一大段文本。要把POP3收取的文本变成可以阅读的邮件,还需要用email模块提供的各种类来解析原始文本,变成可阅读的邮件对象。所以,收取邮件分两步:用POP3获取邮件其实很简单,要获取所有邮件,只需要循环使用retr()把每一封邮件内容拿到即可。真正麻烦的是把邮件的原始内容解析为可以阅读的邮件对象。解析邮件的过程和上一节构造邮件正好相反。程序在创建 BytesParser(解析字节串格式的邮件数据)或 Parser(解析字符串格式的邮件数据)时,必须指定policy=default;否则,BytesParse 或 Parser 解析邮件数据得到的就是过时的 Message 对象,,不是新的 EmailMessage,处理起来非常不方便。如果程序要获取邮件的发件人、收件人和主题,直接通过 EmailMessage 的相应属性来获取即可,与前面为 EmailMessage 设置发件人、收件人和主题的方式是对应的。
如果程序要读取 EmailMessage 的各部分,则需要调用该对象的 walk() 方法,该方法返回一个可迭代对象,程序使用 for 循环遍历 walk() 方法的返回值,对邮件内容进行逐项处理:如果邮件某项的 maintype 是 ‘multipart’,则说明这一项是容器,用于包含邮件内容、附件等其他项。如果邮件某项的 maintype 是 ‘text’,则说明这一项的内容是文本,通常就是邮件正文或文本附件。对于这种文本内容,程序直接将其输出到控制台中。如果邮件某项的 maintype 是其他,则说明这一项的内容是附件,程序将附件内容保存在本地文件中。通过IMAP协议来管理邮箱用的,称作交互邮件访问协议。读到这里,这篇“Python如何使用email、smtplib、poplib、imaplib模块收发邮件”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: C语言折半查找法怎么使用

这篇文章主要介绍了C语言折半查找法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言折半查找法怎么使用文章都会有所收获,下面我们一起来看看吧。折半查找免费云主机域名法仅适用于对已有顺序的数组、数据进行操作!!!(从小到大…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/08 12:20
下一篇 05/08 12:20

相关推荐