发送邮件这个功能非常实用,比如你写了一个爬虫,可以通过邮件来接收程序异常或者任务完成的通知,再比如你搭了一个网站,别人只需留下他的邮箱,你就可以自动给他发送邮件。
总之我觉得邮件通知非常适合那些处理批量、大量任务,你可以不用守在电脑前等待处理结果,在程序里配置好邮件通知后,只需留意邮箱通知就好了。
下面我们一起来看看如何使用 python 来实现邮件发送,邮件一般分为纯文本邮件、html 邮件、以及带附件邮件,今天我们使用 python 来分别实现这三种邮件的发送。
在 python 实现发送邮件需要两个模块,分别是 smtplib 和 email,这两个模块都是内置的,不需要自己安装,直接 import 导入即可。
email 主要是用来构建邮件的,比如邮件收发人、邮件标题、邮件正文以及附件啥的,smtplib 则是用来发送邮件的。
这里我们使用 qq 邮箱来作为发件邮箱,在使用前,需要简单的配置下 qq 邮箱。
打开 qq 邮箱,依次找到 设置 -> 账户,然后检查 POP3/SMTP 服 务是否开启。
如果没开启则开启,根据提示开启之后我们需要获取授权码,这个授权码下面我们会要用到的,这一步只要获取到授权码就行了。
我们先来实现一个简单的纯文本邮件发送,我这里只把一些关键的代码解释一下,文章最后面再附上完整的源码。
- 纯文本邮件
首先就是使用 email 模块构建邮件,plain 即代表文本邮件,邮件构建完后,再使用 smtplib 发送邮件。
#构建纯文本邮件
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 邮箱作为发件邮箱,所以设置为 http://smtp.qq.com,如果是其他邮箱如网易邮箱,则需要设置为 http://smtp.163.com。
再一个需要注意的就是 login 方法了,这个登录方法里的第二个参数是指上面提到的授权码,并不是你发件邮箱的登录密码。
- html 邮件
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-8import 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'] = fromAccountmsg['To'] = toAccountcontent = '<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','很开心你来看我的文章了,欢迎关注哦。','文章中有疑问的地方,欢迎留言与我联系哈,感谢你的支持!')
有问题欢迎在下面留言交流,也欢迎关注,如果觉得对你有帮助就点个赞吧,感谢支持。