首先到网上找到一段基础的代码:
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import smtplib
from smtplib import SMTP
from email.mime.text import MIMEText
from email.header import Header
#构造纯文本邮件内容
msg = MIMEText('hello world,send by Python.....',
'plain','utf-8')
#发送者邮箱
sender = 'xxxxx@XXXXX.com.cn'
#发送者的登陆用户名和密码
user = 'xxxxx@XXXX.com.cn'
password = 'xxxxxx'
#发送者邮箱的SMTP服务器地址
smtpserver = 'xxxx'
#接收者的邮箱地址
receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一个list
server = smtplib.SMTP() #实例化SMTP对象
server.connect(smtpserver,25)
#(缺省)默认端口是25 也可以根据服务器进行设定
server.login(user,password) #登陆smtp服务器
server.sendmail(sender,receiver,msg.as_string())
#发送邮件,这里有三个参数:发件人、收件人、内容
smtpserver从qq邮箱的帮助中获得
运行后发现有这个报错:
网上查询了一下,应该是用户身份认证或者端口的问题。
仔细检查前面的报错信息,发现login的时候报
smtplib.SMTPAuthenticationError: (535, 'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\xbc\xa1\xa3\xcf\xea\xc7\xe9\xc7\xeb\xbf\xb4: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256')
输入报错提示中的http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256这个地址,跳转到下面的页面。
原因查明,原来QQ邮箱在调用SMTP服务时,用的不是用户名和密码,而是用户名和授权码,需要通过密保手机获取授权码。
生成授权码后,将password调整为授权码:
password = 'ihijovpquvtubiga'
继续运行,仍然报错:
smtplib.SMTPAuthenticationError: (530, 'Must issue a STARTTLS command first.')
再到网上查一下,这个报错一般是因为没有采用SSL加密传输。
我们看到使用foxmail等软件调用QQ SMTP服务时,必须采用SSL加密传输。
于是采用SSL方式登录邮箱,当然注意要把端口号调整为465(见上图)。
>>> server = smtplib.SMTP_SSL(smtpserver,465,timeout=30)
>>> server.login(user,password)
(235, 'Authentication successful')
铛铛,成功!
下面激动人心的时刻来到了,send a email!
>>> server.sendmail(sender,receiver,msg.as_string())
{}
舒服了!
参考:
https://www.jb51.net/article/130411.htm
https://ask.csdn.net/questions/370896
(to be continued)
保护原创,未经许可禁止通过自媒体刊载,已委托“维权骑士”(http://rightknights.com)为文章进行维权行动~分享到您的朋友圈才是义举哦~
领取专属 10元无门槛券
私享最新 技术干货