发送邮件这个功能很是实用,好比你写了一个爬虫,能够经过邮件来接收程序异常或者任务完成的通知,再好比你搭了一个网站,别人只需留下他的邮箱,你就能够自动给他发送邮件。html
总之我以为邮件通知很是适合那些处理批量、大量任务,你能够不用守在电脑前等待处理结果,在程序里配置好邮件通知后,只需留意邮箱通知就行了。python
下面咱们一块儿来看看如何使用 python 来实现邮件发送,邮件通常分为纯文本邮件、html 邮件、以及带附件邮件,今天咱们使用 python 来分别实现这三种邮件的发送。bash
在 python 实现发送邮件须要两个模块,分别是 smtplib 和 email,这两个模块都是内置的,不须要本身安装,直接 import 导入便可。服务器
email 主要是用来构建邮件的,好比邮件收发人、邮件标题、邮件正文以及附件啥的,smtplib 则是用来发送邮件的。app
这里咱们使用 qq 邮箱来做为发件邮箱,在使用前,须要简单的配置下 qq 邮箱。函数
打开 qq 邮箱,依次找到 设置 -> 帐户,而后检查 POP3/SMTP 服 务是否开启。网站
若是没开启则开启,根据提示开启以后咱们须要获取受权码,这个受权码下面咱们会要用到的,这一步只要获取到受权码就好了。ui
咱们先来实现一个简单的纯文本邮件发送,我这里只把一些关键的代码解释一下,文章最后面再附上完整的源码。spa
首先就是使用 email 模块构建邮件,plain 即表明文本邮件,邮件构建完后,再使用 smtplib 发送邮件。code
#构建纯文本邮件
from email.mime.text import MIMEText
from email.header import Header
msg = MIMEText('我是邮件正文...', 'plain', 'utf-8') # plain 表示纯文本邮件
msg['From'] = "这里是发件者邮箱"
msg['To'] = "这里是收件者邮箱"
msg['Subject'] = Header("我是邮件的标题", 'utf-8') #邮件标题
#使用smtplib模块发送邮件
email_client = smtplib.SMTP("smtp.qq.com")
email_client.login("这里是发件者邮箱", "这里就是上面提到获取到的受权码")
email_client.sendmail("这里是发件者邮箱", "这里是收件件者邮箱", msg.as_string())
email_client.quit()
复制代码
发送邮件的时候有两个须要注意的地方,一个是 smtplib.SMTP 的邮件服务器设置。
这里咱们用的 qq 邮箱做为发件邮箱,因此设置为 smtp.qq.com,若是是其余邮箱如网易邮箱,则须要设置为 smtp.163.com。
再一个须要注意的就是 login 方法了,这个登陆方法里的第二个参数是指上面提到的受权码,并非你发件邮箱的登陆密码。
html 邮件主要是能够给邮件内容定义更丰富的样式,并且能够很方便的插入连接。html 邮件和纯文本邮件大同小异,把完整的 html 内容做为文本内容就行,再把 plain 改成 html 类型便可。
#构建html邮件
content = '<html><body><h3>Hello,这是一封 html 邮件,点击连接能够去看个人博客哈。</h3>' + '<p><a href="www.weatherfood.com">谭某人的博客</a></p>' + '</body></html>'
puretext = MIMEText(content, 'html', 'utf-8')
复制代码
附件邮件稍微麻烦一些,在构建邮件对象的时候,就须要声明构建一个附件邮件对象,msg = MIMEMultipart(),而后再添加 MIMEText 做为邮件正文,最后再把 MIMEApplication 做为附件加入便可。
最后我再附上一份完整的带图片附件且正文为 html 的邮件发送源码,注意把源码中的发件邮箱改为你本身的邮箱,并获取发件邮箱的受权码。
# coding=utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
#邮件发送函数
#SMTPHost 邮件服务器
#fromAccount 发件邮箱
#fromPasswd 发件邮件受权码,注意并非邮箱登陆密码
#toAccount 收件邮箱
#subject 邮件标题
#content 邮件正文
def sendMail(SMTPHost, fromAccount, fromPasswd, toAccount, subject, content):
#构建邮件
msg = MIMEMultipart()
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = fromAccount
msg['To'] = toAccount
content = '<html><body><h3>Hello,这是一封 html 邮件,点击连接能够去看个人博客哈。</h3>' + '<p><a href="www.weatherfood.com">谭某人的博客</a></p>' + '</body></html>'
puretext = MIMEText(content, 'html', 'utf-8')
msg.attach(puretext)
# 附件
xlsxpart = MIMEApplication(open('tim.jpg', 'rb').read()) #这里填写你本身目录下的附件文件
xlsxpart.add_header('Content-Disposition', 'attachment', filename='tim.jpg')
msg.attach(xlsxpart)
#使用smtplib模块发送邮件
email_client = smtplib.SMTP(SMTPHost)
email_client.login(fromAccount, fromPasswd)
email_client.sendmail(fromAccount, toAccount, msg.as_string())
email_client.quit()
#主函数
if __name__ == '__main__':
sendMail(
'smtp.qq.com',
'********@qq.com',#你的邮箱
'**********',#受权码
'playactors@163.com',
'很开心你来看个人文章了,欢迎关注哦。',
'文章中有疑问的地方,欢迎留言与我联系哈,感谢你的支持!'
)
复制代码
有问题欢迎在下面留言交流,也欢迎关注,若是以为对你有帮助就点个赞吧,感谢支持。