Python 通过 SMTP 发送邮件

Posted Zackary.Liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 通过 SMTP 发送邮件相关的知识,希望对你有一定的参考价值。

Python版本:Python3.5.2

简介

SMTP是发送邮件的协议,Python 内置对 SMTP 的支持,可以发送纯文本邮件、HTML 邮件以及带附件的邮件。

Python 对 SMTP 支持有 smtplib 和 email 两个模块,email 负责构造邮件,smtplib 负责发送邮件。

我使用的是 QQ 邮箱来完成本次实验,首先应该配置好自己的邮箱以启用 SMTP 功能,具体步骤如下:

登录到 QQ 邮箱的首页,找到设置功能:

进入到设置,切换到帐户标签页:

下拉找到如下选项,并启用 SMTP 功能:

启用成功后,会生成一个授权码,用于登录 SMTP 服务器。这个授权码不唯一,忘记的话可以点击再次生成。

实验源码如下

__Author__ = "Lance#"

# -*- coding = utf-8 -*-

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, \'utf-8\').encode(), addr))

from_addr = \'xxx@qq.com\'
password = \'你的授权码\'
to_addr = \'xxx@qq.com\'
smtp_server = \'smtp.qq.com\'

#要发送的消息
SendMsg = \'This is SMTP test.\'

#构造一个 MIMEText 对象
msg = MIMEText(SendMsg, \'plain\', \'utf-8\')

#依次填充对象的各个选项
msg[\'From\'] = _format_addr(\'Python <%s>\' % from_addr)
msg[\'To\'] = _format_addr(\'User <%s>\' % to_addr)
msg[\'Subject\'] = Header(\'This is SMTP test.\', \'utf-8\').encode()

#构造 SMTP 服务器,QQ 邮箱的 SMTP 端口为 465 且为 SSL 加密协议
server = smtplib.SMTP_SSL(smtp_server, 465)

#启用该选项,可以打印出和SMTP服务器交互的所有信息
server.set_debuglevel(1)
server.login(from_addr, password)

#发送邮件, 此处的 to_addr 可以是一个 list,可以给多人发送
server.sendmail(from_addr, [to_addr], msg.as_string())

#退出 SMTP 服务器
server.quit()

接收邮件的邮箱可以设置和发送方地址一样,这样程序正常运行结束后,自己的邮箱就可以收到刚刚发送过的邮件。

以上是关于Python 通过 SMTP 发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

Python通过smtp服务发送电子邮件给指定用户(适用于Zabbix邮件报警)

Python 通过 SMTP 发送邮件

python通过SMTP发送邮件失败,报错505/535

Python邮件发送。为啥我用smtp发送邮件,发送成功没有报错,却没有收到邮件?求解

如何用python通过163发送邮件

如何在python程序中发邮件