Smtplib

Smtplib 是python对smtp传输协议的简单封装,用于发送邮件。

Email 是python对邮件内容的简单封装,携带邮件内容。

两者都是Python的标准库,无需额外安装。

一般我们可以直接使用第三方邮件系统即可,如:

  • 网易邮箱(163/126)

    • SMTP:smtp.163.com,端口 25 / 465 / 587
    • IMAP:imap.163.com,端口 143 / 993
    • POP3:pop.163.com,端口 110 / 995
  • QQ邮箱(qq/foxmail)

    • SMTP:smtp.qq.com,端口 25 / 465 / 587
    • IMAP:imap.qq.com,端口 143 / 993
    • POP3:pop.qq.com,端口 110 / 995
  • 阿里云邮箱

    • SMTP:smtp.aliyun.com,端口 25 / 465 / 587
    • IMAP:imap.aliyun.com,端口 143 / 993
    • POP3:pop.aliyun.com,端口 110 / 995

构建信息体

下面的示例代码中,创建了一个拥有 HTML 文本内容 + 附件文件 的消息体。

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# 创建一个可附件的消息体对象
msg = MIMEMultipart()
# 添加 主题 标头信息
msg.add_header("Subject", subject)
# 添加 发件人 标头信息
msg.add_header("From", fromAddrEmail)
# 添加 收件人 标头信息
msg.add_header("To", toAddrEmail)

# 创建一个HTML消息体对象
html_msg = MIMEText(htmlContext, 'html', 'utf8')

# 创建一个文件消息体对象
file_msg = MIMEText(open(file, 'rb').read(), 'base64', 'utf8')
# 指定数据类型
file_msg .add_header("Content-Type", 'application/octet-stream')
# 指定 文件名
file_msg .add_header("Content-Disposition", f'attachment; filename={file}')

# 使用HTML消息体
msg.attach(html_msg)
# 使用文件消息体
msg.attach(file_msg)

客户端发送

try:
# 创建一个SMTP客户端
smtpObj = smtplib.SMTP(host=smtpHost, port=smtpPort)
# 登录客户端
smtpObj.login(mailUser, mailPassword)
# 发送邮件
smtpObj.sendmail(from_addr=fromAddrEmail, to_addrs=toAddrEmail, msg=msg.as_string())
print ("邮件发送成功!")
except smtplib.SMTPException as e:
print ("邮件发送失败!原因:", e)