Python使用SMTP发送QQ或Sina邮件
本文介绍如何使用Python通过SMTP协议发送QQ和新浪邮箱邮件。针对QQ邮箱需开启POP3/SMTP服务并获取授权码,代码中需添加ehlo、starttls和ehlo以启用SSL加密。新浪邮箱发送时若出现530错误,通常因信封发件人与Header From不一致导致,需确保message['From']与登录账号一致。
使用Python通过QQ个人邮箱发送电子邮件,首先必须在QQ邮箱设置中启用SMTP服务。
在邮箱设置界面开启POP3/SMTP服务后,系统会生成一个专用密码,该密码即为后续Python代码中登录邮箱时所需的账户密码(具体位置已在完整代码中标注)。

执行代码后,可能会遇到如下报错信息:
复制代码 代码如下:
smtplib.SMTPAuthenticationError: (530, 'Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28')
错误提示要求必须使用SSL安全连接发送邮件。
在原有代码基础上,增加以下三行代码即可解决该问题:
smtpObj.ehlo() smtpObj.starttls() smtpObj.ehlo()
完整的QQ邮箱发送代码如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host = "smtp.qq.com" # 设置服务器,qq的SMTP服务host
mail_user = "xxx@qq.com" # 用户名(须修改)
mail_pass = "xxxxxxxxxxxxxxxx" # 此处为在qq开启SMTP服务时返回的密码 (须修改)
sender = 'xxx@qq.com' # 同用户名 (须修改)
receivers = ['xxx@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEText('...', 'plain', 'utf-8')
message['From'] = Header("第一封python测试邮件", 'utf-8')
message['To'] = Header("测试", 'utf-8')
try:
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.ehlo()
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print "邮件发送成功"
except smtplib.SMTPException :
print "Error: 无法发送邮件"
在启用Sina邮箱SMTP服务后,使用Python发送信息时可能卡在以下错误提示上,具体原因尚不明确:
smtplib.SMTPDataError: (553, 'Envolope sender mismatch with header from..')
正确的发送示例代码如下:
import smtplib
server = "smtp.sina.com"
fromaddr= "xxx@sina.com" #须修改
toaddr = "xxx@qq.com" #须修改
msg = """
to:%s
from:%s
Hello,I am smtp server
""" %(toaddr,fromaddr)
s = smtplib.SMTP(server)
s.set_debuglevel(1)
s.login("xxx@sina.com","xxx") #须修改
s.sendmail(fromaddr,toaddr,msg)
导致报错的代码示例如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
server = "smtp.sina.com"
fromaddr= "xxx@sina.com"
toaddr = "xxx@qq.com"
message = MIMEText('...', 'plain', 'utf-8')
message['From'] = Header(fromaddr, 'utf-8')
message['To'] = Header("toaddr", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
s = smtplib.SMTP(server)
s.set_debuglevel(1)
s.login("xxx@sina.com","xxx")
s.sendmail(fromaddr,toaddr,message)
以上为本文的全部内容,希望对各位的学习有所帮助,也欢迎大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













