python发邮件遇到的端口号问题

时间:2022-09-24 13:10:20

在学习使用python发邮件的过程中, 遇到了一个问题:由于测试的时候使用的是QQ邮箱,要求必须使用SSL/TLS加密,所以有了下面的代码,

from email.mime.text import MIMEText
import smtplib

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

# 输入Email地址和口令:
from_addr = '*********@qq.com'
password = '*********'
# 输入收件人地址:
to_addr = '*********@gmail.com'
# 输入SMTP服务器地址:
smtp_server = 'smtp.qq.com'
smtp_port = 465

print('done')
server = smtplib.SMTP(smtp_server, smtp_port) # SMTP协议默认端口是25
print('done0')
server.starttls()
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

 结果是只打印了 done 就不再继续向下运行了。也就是代码停在了

server = smtplib.SMTP(smtp_server, smtp_port)

 

但是如果把端口号改成587的话,又能够正常执行

 

google了一下,得到以下答案:

465端口是SSL/TLS通讯协议的 内容一开始就被保护起来了 是看不到原文的。

587端口是STARTTLS协议的 属于TLS通讯协议 只是他是在STARTTLS命令执行后才对之后的原文进行保护的