Python发送邮件主要用到smtplib和email两个模块,其中smtplib负责发送邮件,email负责构建邮件内容。
使用Python可以发送简单文本邮件、HTML格式的文件、带附件的邮件等。
这里使用163邮箱的smtp服务器从163邮箱发送简单文本邮件到其它邮箱为例,详情见代码。
这是博客园中的一篇文章,总结的很全
首先需要拥有一个163邮箱账号,需要注意的是,需要在163邮箱的设置中开启客户端授权,申请授权码。
否则,直接使用密码登录会报错smtplib.SMTPAuthenticationError: (550, b‘User has no permission‘)
授权码是用于登录第三方邮件客户端的专用密码。这个过程需要手机号验证。
如下图,在设置--->POP3/SMTP/IMAP界面中,勾选SMTP服务,会提示进行手机验证,设置授权码(字母+数字),
然后在Python代码中进行登录时,使用刚才设置的授权码登录,而不是163邮箱密码。
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr,formataddr
# 163邮箱服务器地址
smtp_server='smtp.163.com'
# 发件人邮箱地址
from_addr='135****[email protected]'
# 发件人邮箱密码(使用申请的客户端授权码代替)
passwd='授权码'
# 收件人邮箱地址
to_addr='80*****[email protected]'
# 构建邮件内容(参数:邮件内容; 类型-plain,html; 编码)
msg=MIMEText('SMTP测试邮件','plain','utf-8')
# 设置邮件主题
msg['Subject']=Header('这是邮件主题',charset='utf-8')
def send_email():
# 获取SMTP对象
server=smtplib.SMTP(host=smtp_server,port=25)
# 登录163邮箱服务器
server.login(user=from_addr,password=passwd)
# 发送邮件
server.sendmail(from_addr=from_addr,to_addrs=to_addr,msg=msg.as_string())
# 退出邮箱服务器
server.quit()
if __name__ == '__main__':
send_email()