-

简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。

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

以下是创建一个SMTP对象的简单语法,以后可以用于发送电子邮件 -

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

这里是参数的细节:

SMTP对象具有称为sendmail的实例方法,通常用于执行邮件发送的工作。它需要三个参数 -

示例

以下是使用Python脚本发送一封电子邮件的简单方法。尝试一次 -

#!/usr/bin/python

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"

在这里,您已经使用三重报价放置了基本的电子邮件,请注意正确格式化标题。电子邮件需要一个FromToSubject标题,与电子邮件的正文分开,带有空行。

要发送邮件,您使用smtpObj连接到本地机器上的SMTP服务器,然后使用sendmail方法以及消息,从地址和目标地址作为参数(即使从和地址在e内邮件本身,这些并不总是用来路由邮件)。

如果您不在本地计算机上运行SMTP服务器,则可以使用smtplib客户端与远程SMTP服务器进行通信。除非您使用网络邮件服务(如Hotmail或Yahoo! Mail),否则您的电子邮件提供商必须为您提供可以提供邮件服务器的详细信息,如下所示:

smtplib.SMTP("mail.your-domain.com", 25)

使用Python发送HTML电子邮件

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

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

以邮件发送HTML内容为例。尝试一次 -

#!/usr/bin/python

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"

发送附件作为电子邮件

要发送具有混合内容的电子邮件,需要将Content-type标题设置multipart / mixed然后,可以在边界内指定文本和附件部分

一个边界以两个连字符开始,后跟一个唯一的数字,不能出现在电子邮件的消息部分。表示电子邮件最终部分的最后一个边界也必须以两个连字符结尾。

使用pack(“m”)函数对附加文件进行编码,以便在传输之前具有base64编码。

以下是一个示例,它将文件/tmp/test.txt作为附件发送。尝试一次 -

#!/usr/bin/python

import smtplib
import base64

filename = "/tmp/test.txt"

# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64

sender = "webmaster@tutorialpoint.com"
reciever = "amrood.admin@gmail.com"

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <me@fromdomain.net>
To: To Person <amrood.admin@gmail.com>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# Define the attachment section
part3 = """Content-Type: multipart/mixed; name="%s"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

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