python 使用腾讯企业邮箱发送邮件

96
eleksbai
0.7 2018.06.03 15:59* 字数 242

概述

使用flask_mail 模块中碰到问题,于是使用基础的smtplib模块进行调试
以前搞过QQ邮箱,代码找不到了,为此这次记录下方便以后复制粘贴
如果简单的代码就是会莫名奇妙的报错,十之八九是单词拼错了。

  • QQ邮箱及腾讯企业邮箱都要使用授权码进行python登陆
  • 腾讯邮箱支持SSL(不强制开启), 不支持TLS。
错误列表
  • smtplib.SMTPSenderRefused: (501, 》》》 登陆地址与发件人地址不一致
  • smtplib.SMTPAuthenticationError: (535, 》》》用户名密码错误
用户名错误

admin写成 amdin了,吐血三升


535,用户名错误
密码错误
535,密码错误
发件人与登陆人的邮件地址不一致

因为登陆时我邮箱地址用的是字符串,发送时用的是变量,正常应该统一使用变量防止出错


501错误,地址不一致

代码示例

from email.header import Header
from email.mime.text import MIMEText
from email.utils import formataddr
import smtplib

# 用户信息
from_addr = 'XXXXX_admin@XXXX.com'
password = 'H3Sv73Gq4BV7XDqG' # # 腾讯QQ邮箱或腾讯企业邮箱必须使用授权码进行第三方登陆
to_addr = '12345678@qq.com'
smtp_server = 'smtp.exmail.qq.com' # 腾讯服务器地址

# 内容初始化,定义内容格式(普通文本,html)
msg = MIMEText('我要发邮件......', 'plain', 'utf-8')

# 发件人收件人信息格式化 ,可防空
# 固定用法不必纠结,我使用lambda表达式进行简单封装方便调用
lam_format_addr = lambda name, addr: formataddr((Header(name, 'utf-8').encode(), addr))
# 传入昵称和邮件地址
msg['From'] = lam_format_addr('发件人昵称', from_addr) # 腾讯邮箱可略
msg['To'] = lam_format_addr('收件人昵称(服务商会自动替换成用户名)', to_addr) # 腾讯邮箱可略

# 邮件标题
msg['Subject'] = Header('邮件的标题......', 'utf-8').encode() # 腾讯邮箱略过会导致邮件被屏蔽

# 服务端配置,账密登陆
server = smtplib.SMTP(smtp_server, 25)

# 腾讯邮箱支持SSL(不强制), 不支持TLS。
# server = smtplib.SMTP_SSL(smtp_server, 465) # 按需开启
# 调试模式,打印日志
# server.set_debuglevel(1) # 按需开启

# 登陆服务器
server.login(from_addr, password)

# 发送邮件及退出
server.sendmail(from_addr, [to_addr], msg.as_string()) #发送地址需与登陆的邮箱一致
server.quit()
python
Web note ad 1