Python3 使用 163 邮箱 SMTP 协议发送邮件教程
本文详细介绍如何使用 Python3 通过 SMTP 协议向 163 邮箱发送电子邮件。重点讲解了开启 SMTP 服务及获取客户端授权密码的配置步骤,提供了基于 smtplib 和 email 模块的完整代码示例,并说明了 SSL 加密端口 465 的使用方法及常见报错排查建议。
SMTP协议
首先需要了解 SMTP(简单邮件传输协议)。邮件传送代理程序利用 SMTP 协议将电子邮件发送至接收者的邮件服务器。需要注意的是,SMTP 协议仅用于发送邮件,不支持接收邮件,目前大多数邮件发送服务器均基于此协议运行。该协议默认使用的 TCP 端口号为 25。
发送邮件前的配置
既然采用 SMTP 协议发送邮件,必须先确认发件人邮箱是否已开启 SMTP 服务。若未开启,需手动启用。本文以 163.com 邮箱作为发件人进行测试,具体开启方式可在邮箱设置中找到,如下图所示。

测试的前提是必须开通客户端授权功能。开通后系统会要求设置一个专用密码,请务必妥善保管该密码。后续代码中的 passwd 参数接收的是此授权密码,而非邮箱登录密码。若混淆两者,将出现如下图所示的错误提示。

示例代码
import smtplib
from email.header import Header
from email.mime.text import MIMEText
# 第三方 SMTP 服务
mail_host = "smtp.163.com" # SMTP服务器
mail_user = "***" # 用户名
mail_pass = "***" # 授权密码,非登录密码
sender = ***@163.com' # 发件人邮箱(最好写全, 不然会失败)
receivers = [***@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
content = '我用Python'
title = '人生苦短' # 邮件主题
def sendEmail():
message = MIMEText(content, 'plain', 'utf-8') # 内容, 格式, 编码
message['From'] = "{}".format(sender)
message['To'] = ",".join(receivers)
message['Subject'] = title
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 启用SSL发信, 端口一般是465
smtpObj.login(mail_user, mail_pass) # 登录验证
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
print("mail has been send successfully.")
except smtplib.SMTPException as e:
print(e)
def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content):
email_client = smtplib.SMTP(SMTP_host)
email_client.login(from_account, from_passwd)
# create msg
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8') # subject
msg['From'] = from_account
msg['To'] = to_account
email_client.sendmail(from_account, to_account, msg.as_string())
email_client.quit()
if __name__ == '__main__':
sendEmail()
# receiver = '***'
# send_email2(mail_host, mail_user, mail_pass, receiver, title, content)
如果在测试过程中遇到报错,请参考网易邮箱官方提供的状态码及其含义进行排查。
菜鸟教程网站也提供了相关的详细教程供参考。
本文内容参考了孙华强的博客文章,在此表示衷心感谢。
以上就是本文的全部内容,希望对各位的学习有所帮助,也欢迎大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









