简单邮件传输协议(SMTP)是一种协议,用于处理在邮件服务器之间发送电子邮件和路由电子邮件。
Python提供了 smtplib 模块,该模块定义了SMTP客户端会话对象,该对象可用于MTP或ESMTP侦听器守护程序将邮件发送到任何网络机器。
这是创建一个SMTP对象的简单语法,以后可以用于发送电子邮件-
import smtplib smtpObj=smtplib.SMTP( [host [, port [, local_hostname]]] )
这是参数的详细信息-
host - 这是运行SMTP服务器的主机。您可以指定主机的IP地址或域名(如learnfk.com)。这是可选参数。
port - 如果要提供 host 参数,则需要指定SMTP服务器正在监听的端口。通常,此端口为25。
local_hostname - 如 果您的SMTP服务器在本地计算机上运行,那么从此选项开始,您可以仅指定 localhost 。
SMTP对象具有一个称为 sendmail 的方法,通常用于完成邮件的发送工作。它需要三个参数-
sender - 包含发件人地址的字符串。
receivers - 字符串列表,每个接收者一个。
message - 以各种RFC中指定的格式格式化为字符串的消息。
这是使用Python脚本发送一封电子邮件的简单方法。尝试一次-
#!/usr/bin/python import smtplib sender='[email protected]' receivers=['[email protected]'] message="""From: From Person <[email protected]> To: To Person <[email protected]> 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"
在这里,您已经在邮件中放置了一个基本电子邮件,使用三重引号,注意正确设置标题的格式。电子邮件需要 From , To 和 Subject 标头,并以空白行与电子邮件正文分开。
如果您不在本地计算机上运行SMTP服务器,则可以使用 smtplib 客户端与远程SMTP服务器通信。除非您使用Webmail服务(如Hotmail或Yahoo! Mail),否则您的电子邮件提供商必须已向您提供了可以提供它们的外发邮件服务器详细信息,如下所示-
smtplib.SMTP('mail.your-domain.com', 25)
发送HTML邮件
使用Python发送文本消息时,所有内容均被视为简单文本。即使您在文本消息中包含HTML标签,它也将显示为简单文本,并且HTML标签不会根据HTML语法进行格式化。但是Python提供了将HTML消息作为实际HTML消息发送的选项。
发送电子邮件时,您可以指定Mime版本,内容类型和字符集来发送HTML电子邮件。
以下是将HTML内容作为电子邮件发送的示例。尝试一次-
#!/usr/bin/python import smtplib message="""From: From Person <[email protected]> To: To Person <[email protected]> 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" # 读取文件并将其编码为 base64 格式 fo=open(filename, "rb") filecontent=fo.read() encodedcontent=base64.b64encode(filecontent) # base64 sender='[email protected]' reciever='[email protected]' marker="AUNIQUEMARKER" body =""" This is a test email to send an attachement. """ # 定义主要标题。 part1="""From: From Person <[email protected]> To: To Person <[email protected]> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) # 定义消息动作 part2="""Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) # 定义附件部分 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"
参考链接
https://www.learnfk.com/python/python-sending-email.html
标签:教程,Python,SMTP,无涯,发送,HTML,smtplib,电子邮件,message From: https://blog.51cto.com/u_14033984/7241817