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

2018-06-03  本文已影响0人  eleksbai

概述

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

一般的测试方法!!!
使用Foxmail登录。在foxmail的账户设置里看具体配置。
如用户名,服务器地址,端口。然后复制到代码里。

错误列表
用户名错误

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()
上一篇下一篇

猜你喜欢

热点阅读