Python 自动发送邮件
Posted Utee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 自动发送邮件相关的知识,希望对你有一定的参考价值。
简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib
模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。
SMTP通讯的基本流程可以概括为以下几点:
1.连接SMTP服务器
2.登陆用户名和密码
3.发送指定邮件内容
4.退出SMTP连接
一、发送纯文本格式邮件
1 #coding:utf-8 2 import sys 3 reload(sys) 4 sys.setdefaultencoding(\'utf8\') 5 import smtplib 6 from smtplib import SMTP 7 from email.mime.text import MIMEText 8 from email.header import Header 9 10 #构造纯文本邮件内容 11 msg = MIMEText(\'hello,send by Python.....\',\'plain\',\'utf-8\') 12 13 #发送者邮箱 14 sender = \'xxxxx@XXXXX.com.cn\' 15 16 #发送者的登陆用户名和密码 17 user = \'xxxxx@XXXX.com.cn\' 18 password = \'xxxxxx\' 19 20 #发送者邮箱的SMTP服务器地址 21 smtpserver = \'xxxx\' 22 23 #接收者的邮箱地址 24 receiver = [\'xxxxxx@qq.com\',\'xxxxxx@outlook.com\'] #receiver 可以是一个list 25 26 smtp = smtplib.SMTP() #实例化SMTP对象 27 smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定 28 smtp.login(user,password) #登陆smtp服务器 29 smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数 30 \'\'\' 31 login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文 32 是一个str,as_string()把MIMEText对象变成str。 33 \'\'\' 34 smtp.quit()
运行之后就会收到邮件:
但是仔细观察会发现:
1.邮件没有主题
2.看不到收件人的信息
这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From
、To
和Subject
添加到MIMEText
中,才是一封完整的邮件:
1 msg = MIMEText(\'hello,send by Python.....\',\'plain\',\'utf-8\') 2 msg[\'From\'] = Header(\'Python测试\',\'utf-8\') 3 msg[\'To\'] = Header(\'管理员\',\'utf-8\') 4 subject = \'python SMTP 测试邮件\' 5 msg[\'Subject\'] = Header(subject,\'utf-8\')
二、发送HTML格式的邮件
如果我们要发送HTML邮件,而不是普通的纯文本文件怎么办?方法很简单,在构造MIMEText
对象时,把HTML字符串传进去,再把第二个参数由plain
变为html
就可以了:
1 msg = MIMEText(\'<html><h1>你好!<h1><html>\',\'html\',\'utf-8\') #发送HTML格式邮件就只需要把对应的第二个参数改为html即可
三、发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
1 #coding:utf-8 2 import sys 3 reload(sys) 4 sys.setdefaultencoding(\'utf8\') 5 import smtplib 6 from email.mime.text import MIMEText 7 from email.mime.multipart import MIMEMultipart 8 from email.header import Header 9 10 #发送邮件服务器 11 smtpserver = \'xxxxx\' 12 #发送邮箱用户名和密码 13 user = \'xxxxxx\' 14 password = \'xxxxxx\' 15 #发送邮箱 16 sender = \'xxxxx\' 17 #接受邮箱 18 receiver = \'xxxxxxx\' 19 20 #创建一个带附件的实例 21 message = MIMEMultipart() 22 message[\'From\'] = Header(\'Python 测试\',\'utf-8\') 23 message[\'To\'] = Header(\'测试\',\'utf-8\') 24 subject = \'Python SMTP邮件测试\' 25 message[\'Subject\'] = Header(subject,\'utf-8\') 26 27 #邮件正文内容 28 message.attach(MIMEText(\'这是测试Python发送附件功能....\',\'plain\',\'utf-8\')) 29 30 #构造附件1,传送当前目录下的test.txt文件 31 att1 = MIMEText(open(\'123.txt\',\'rb\').read(),\'base64\',\'utf-8\') 32 att1[\'Content-Type\'] = \'application/octet-stream\' 33 #这里的filename可以任意写,写什么名字 邮件中就显示什么名字 34 att1[\'Content-Disposition\'] = \'attachment;filename:"123.txt"\' 35 message.attach(att1) 36 37 smtp = smtplib.SMTP() 38 smtp.connect(smtpserver,25) 39 smtp.login(user,password) 40 smtp.sendmail(sender,receiver,message.as_string()) 41 smtp.quit()
小结
使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。
构造一个邮件对象就是一个Messag
对象,如果构造一个MIMEText
对象,就表示一个文本邮件对象,如果构造一个MIMEImage
对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart
对象,而MIMEBase
可以表示任何对象。它们的继承关系如下:
Message
+- MIMEBase
+- MIMEMultipart
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText
+- MIMEImage
这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法。
以上是关于Python 自动发送邮件的主要内容,如果未能解决你的问题,请参考以下文章