简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。
SMTP通讯的基本流程可以概括为以下几点:
1.连接SMTP服务器
2.登陆用户名和密码
3.发送指定邮件内容
4.退出SMTP连接
一、发送纯文本格式邮件
#coding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') import smtplib from smtplib import SMTP from email.mime.text import MIMEText from email.header import Header #构造纯文本邮件内容 msg = MIMEText('hello,send by Python.....','plain','utf-8') #发送者邮箱 sender = 'xxxxx@XXXXX.com.cn' #发送者的登陆用户名和密码 user = 'xxxxx@XXXX.com.cn' password = 'xxxxxx' #发送者邮箱的SMTP服务器地址 smtpserver = 'xxxx' #接收者的邮箱地址 receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一个list smtp = smtplib.SMTP() #实例化SMTP对象 smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定 smtp.login(user,password) #登陆smtp服务器 smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数 ''' login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文 是一个str,as_string()把MIMEText对象变成str。 ''' smtp.quit()
运行之后就会收到邮件:
但是仔细观察会发现:
1.邮件没有主题
2.看不到收件人的信息
这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:
msg = MIMEText('hello,send by Python.....','plain','utf-8') msg['From'] = Header('Python测试','utf-8') msg['To'] = Header('管理员','utf-8') subject = 'python SMTP 测试邮件' msg['Subject'] = Header(subject,'utf-8')
二、发送HTML格式的邮件
如果我们要发送HTML邮件,而不是普通的纯文本文件怎么办?方法很简单,在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了:
msg = MIMEText('<html><h1>你好!<h1><html>','html','utf-8') #发送HTML格式邮件就只需要把对应的第二个参数改为html即可
三、发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
#coding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header #发送邮件服务器 smtpserver = 'xxxxx' #发送邮箱用户名和密码 user = 'xxxxxx' password = 'xxxxxx' #发送邮箱 sender = 'xxxxx' #接受邮箱 receiver = 'xxxxxxx' #创建一个带附件的实例 message = MIMEMultipart() message['From'] = Header('Python 测试','utf-8') message['To'] = Header('测试','utf-8') subject = 'Python SMTP邮件测试' message['Subject'] = Header(subject,'utf-8') #邮件正文内容 message.attach(MIMEText('这是测试Python发送附件功能....','plain','utf-8')) #构造附件1,传送当前目录下的test.txt文件 att1 = MIMEText(open('123.txt','rb').read(),'base64','utf-8') att1['Content-Type'] = 'application/octet-stream' #这里的filename可以任意写,写什么名字 邮件中就显示什么名字 att1['Content-Disposition'] = 'attachment;filename:"123.txt"' message.attach(att1) smtp = smtplib.SMTP() smtp.connect(smtpserver,25) smtp.login(user,password) smtp.sendmail(sender,receiver,message.as_string()) smtp.quit()
小结
使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。
构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:
Message
+- MIMEBase
+- MIMEMultipart
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText
+- MIMEImage
这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]