想要通过Python实现邮件发送,可以先把任务分成2大块。
1. 准备工作,分3步:
* 导入smtplib、email模块
* 配置第三方邮件服务器 (**注意:mail_pwd在配置的时候,是授权码,不是邮箱的登录密码** )
* 配置邮件发送方、接收方、主题、内容、主体等信息
-
开始干活,分4步:
* 建立和SMTP邮件服务器的连接 * 完成身份认证 * 发送邮件 * 结束会话
例如: 如下代码实现了文本邮件的发送:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
'''
导入发送邮件的相关模块:smtplib:负责发送邮件; email: 负责构造邮件
MIME(Multipurpose Internet Mail Extensions(多用途互联网邮件扩展), 是一个互联网标准,它扩展了电子邮件标准,可以支持多种类型, MIMEText是文本消息)
'''
import smtplib
from email.mime.text import MIMEText
#from email.header import Header--------总报554,删除了
'''配置第三方 SMTP 服务'''
host="smtp.163.com" #设置服务器
mail_user="*******@163.com"#用户名
mail_pwd="*******" #口令
'''配置发送方、接收方信息'''
sender = '*******@163.com'
receivers = '*******@qq.com' # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('内容部分为: 我打算用Python发一个邮件...', 'plain', 'utf-8')
message['From'] = sender # 发送者
message['To'] = receivers # 接收者
message['Subject'] = "主题为: 邮件的主题我还没想好呢~~"
try:
smtpObj = smtplib.SMTP() # 建立和SMTP邮件服务器的连接
smtpObj.connect(host,25) # 25 为 SMTP 端口号
smtpObj.set_debuglevel(1)
smtpObj.login(mail_user,mail_pwd) #完成身份认证
smtpObj.sendmail(sender, receivers, message.as_string()) #发送邮件
print("邮件发送成功")
smtpObj.quit() #结束会话
except smtplib.SMTPException as e:
print(e)
接收到的效果如下图:
- 需要注意的是,配置第三方服务的密码, 是smtp服务的授权码,不是邮箱的登录密码,如果设置的不是授权码,就会报“ 535, b’Error: authentication failed’ ”
要想解决这个问题,就要将密码改为授权码,以163邮箱为例,授权码在设置->账号与邮箱中心->客户端授权密码中,进行开启。
- 此外, from email.header import Header后,容易出现发送报554的问题,索性去掉header,邮件发送成功了,具体为神马??,还有待研究。。。。。