Python3:用QQ邮箱发送邮件

08/25/2018 Python编程 0条评论 阅读次数 122

1. 设置QQ邮箱

QQ邮箱是SSL认证的邮箱系统,要用QQ邮箱发送邮件,需要开启POP3/ SMTP服务,并获取授权码。

2. 代码

前面已经提到过,QQ邮箱是SSL认证的邮箱系统,因此用QQ邮箱发送邮件,需要创建一个SMTP_SSL对象,而不是SMTP对象,然后用发送邮箱及之前获取到的授权码login,最后调用sendmail()发送邮件。

用try-except-finally括起来,是为了捕捉可能的错误信息。

这很简单,但细心的读者应该注意到,上面代码中所有的方法的参数都有定义,唯独sendmail(from_addr, to_addrs, msg)的第3个参数msg,即邮件的发送内容没有定义,而发送邮件的关键就在于此。发送内容的格式是SMTP规定的,如果不符合规定,即会导致邮件发送失败。

邮件主要包括三个部分:一是我称之为属性的部分,二是正文,三是附件。包含各部分内容的是一个MIMEMultipart对象,其实邮件的任何部分都是可以为空的,甚至都为空,还是可以成功发送的。下面主要讨论的就是这三部分内容的组织。

2.1 组织邮件属性

邮件的属性,我指的是诸如发件人、主题、收件人、抄送等。

2.2 组织邮件正文

2.2.1 文本格式正文

用正文字符串生成一个plain类型的MIMEText对象,可指定编码,然后黏贴到代表邮件全部内容的MIMEMultipart对象中。

2.2.2 HTML格式正文

HTML格式的正文和文本格式的正文,唯一区别就是MIMEText对象的类型不同,是html,当然正文字符串应该是一个符合html格式的字符串。

2.2.3 包含图片的正文

包含图片的正文,其实是一种特殊的html格式正文,正文字符串应符合html格式,且包含img标签,指定src,用读入图片文件创建一个MIMEImage对象,指定其属性,应和src中相匹配,最后将MIMEImage对象也黏贴到MIMEMultipart对象中。

2.3 组织邮件附件

经验证,文本文件、HTML文件和图片文件(png),都可以用下面的代码组装到邮件内容中。生成一个MIMEBase对象,读入附件文件加载到该对象中,编码、添加头后同样黏贴到MIMEMultipart对象中。

3. 最终代码

3.1  MailAssembler类

包含三个方法:attachAttributes()、attachBody()和attachAttachment(),分别用来组装属性、正文和附件。

3.2 MailSender类

只有一个sendMail()方法,初始化的时候保存了发送的相关参数,之后就可以用该方法发送其参数msg了。

3.3 主程序

在主程序中,调用了MailAssembler和MailSender的方法,完成邮件内容的组装和发送。邮件正文包含文字和图片,并有两个附件。

4.  参考文献

[1] 使用python发送QQ邮件  https://www.cnblogs.com/lovealways/p/6701662.html

[2] Python发送邮件(常见四种邮件内容)https://blog.csdn.net/xiaosongbk/article/details/60142996

[3] Selenium3+python3-发送添加附件的邮件  https://www.cnblogs.com/liyanqi/p/7885014.html

发表评论