Python - SMTP

简单邮件传输协议 (SMTP) 是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。

Python 提供了 smtplib 模块,它定义了一个 SMTP 客户端会话对象,可用于将邮件发送到任何带有 SMTP 或 ESMTP 侦听器守护程序的 Internet 机器。

SMTP 对象有一个名为sendmail 的实例方法,它通常用于执行邮寄消息的工作。 需要三个参数 −

  • 发送者 − 带有发件人地址的字符串。

  • 接收者 − 字符串列表,每个收件人一个。

  • 信息 − 作为字符串的消息,其格式如各种 RFC 中指定的那样。


示例

这是使用 Python 脚本发送一封电子邮件的简单方法。 −

#!/usr/bin/python3

import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

在这里,您在消息中放置了一个基本的电子邮件,使用三重引号,注意正确格式化标题。 一封电子邮件需要一个 FromTo 和一个 Subject 标头,并用空行与电子邮件正文分开。

要发送邮件,您可以使用 smtpObj 连接到本地计算机上的 SMTP 服务器。 然后使用 sendmail 方法以及消息、发件人地址和目标地址作为参数(即使发件人和收件人地址在电子邮件本身中,但并不总是用于路由邮件)。

如果您没有在本地机器上运行 SMTP 服务器,您可以使用 smtplib 客户端与远程 SMTP 服务器通信。 除非您使用的是网络邮件服务(例如 gmail 或 Yahoo! Mail),否则您的电子邮件提供商必须向您提供可以外发邮件服务器详细信息,如下所示 −

mail = smtplib.SMTP('smtp.gmail.com', 587)

使用 Python 发送 HTML 电子邮件

当您使用 Python 发送文本消息时,所有内容都被视为简单文本。 即使您在文本消息中包含 HTML 标记,它也会显示为简单文本,并且 HTML 标记不会根据 HTML 语法进行格式化。 但是,Python 提供了将 HTML 消息作为实际 HTML 消息发送的选项。

发送电子邮件时,您可以指定 Mime 版本、内容类型和字符集以发送 HTML 电子邮件。

示例

以下是将 HTML 内容作为电子邮件发送的示例。 −

#!/usr/bin/python3

import smtplib

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"