先上代码,方式一二三分别对应使用smtp不同端口号发送邮件的实现方式。
(1)端口号25:明文传输
(2)端口号456,基于SSL协议
(3)端口号578,基于STARTTLS协议
所以实现当时会有所不同,根据不同报错信息也可以看出来。
方式一:端口号25,明文传输
from email.mime.text import MIMEText
from email.header import Header
import smtplib
server = 'smtp.qq.com'
user = '***@qq.com'
pwd = '授权码' # 开启
receiver = '****@qq.com'
subject = 'python email test'
msg = MIMEText('<HTML><H1>today is Friday!</h1></html>', 'html', 'utf-8')
msg['subject'] = Header(subject, 'utf-8')
smtp = smtplib.SMTP()
smtp.connect(server, 25)
smtp.login(user, pwd)
smtp.sendmail(user, receiver, msg.as_string())
smtp.quit()
方式二:端口号456,基于SSL协议
from email.mime.text import MIMEText
from email.header import Header
import smtplib
# xpvwyhxnsrsrbabi
server = 'smtp.qq.com'
user = '***@qq.com'
pwd = '授权码' # 开启
receiver = '***@qq.com'
subject = 'python email test'
msg = MIMEText('<HTML><H1>今天不加班!</hi></html>', 'html', 'utf-8')
msg['subject'] = Header(subject, 'utf-8')
smtp = smtplib.SMTP_SSL(server, 465)
# 465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的
smtp.login(user, pwd)
smtp.sendmail(user, receiver, msg.as_string())
方式三:端口号578,基于STARTTLS协议的 属于TLS通讯协议
from email.mime.text import MIMEText
from email.header import Header
import smtplib
# xpvwyhxnsrsrbabi
server = 'smtp.qq.com'
user = '***@qq.com'
pwd = '授权码' # 开启
receiver = '****@qq.com'
subject = 'python email test'
msg = MIMEText('<HTML><H1>快下班啦!</hi></html>', 'html', 'utf-8')
msg['subject'] = Header(subject, 'utf-8')
# 方式三:587端口是STARTTLS协议的 属于TLS通讯协议,命令执行后对原文进行保护
smtp = smtplib.SMTP(server, 587)
smtp.set_debuglevel(0) # 是否为调试模式。>1即调试模式,表示输出交互调试信息
smtp.starttls()
smtp.login(user, pwd)
smtp.sendmail(user, receiver, msg.as_string())
smtp.quit()
列举一些常会遇到的报错:
常见报错一:535
报错535原因就是未将POP3/SMTP服务开启,并且第三方登录需要服务开启获取的授权码。
报错信息:
解决办法:
其中报错有个链接:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
根据链接步骤,打开qq邮箱,点击设置->账户,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启IMAP/SMTP服务,然后根据要求使用手机发送到指定号码,获取授权码,
这个授权码就是你接下来登录要的密码,配置完成。
注意:此时需要用授权码代替邮箱本身的Password。
常见报错二:530
错误原因: 需要一个安全的连接,例如SSL,smtp = smtplib.SMTP()。这个就是上面对应的方式二,不能使用 因此接下来我们会使用SSL的方式去登录,但是已就需要打开qq邮箱,点击设置->账户,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启IMAP/SMTP服务,然后根据要求使用手机发送到指定号码,获取授权码,这个授权码就是接下来登录要的密码,配置完成。
常见报错三:530 smtplib.SMTPAuthenticationError: (530, b’Must issue a STARTTLS command first.’)
原因是端口问题,不同端口需要不同的实现方式](https://blog.csdn.net/qq_23864697/article/details/80183854)
另外具体25,587,465端口区别见以下博文:https://blog.csdn.net/qq_23864697/article/details/80183854