简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。
Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP监听器守护程序将邮件发送到任何Internet机器。
以下是创建一个SMTP对象的简单语法,以后可以用于发送电子邮件 -
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
这里是参数的细节:
主机:这是运行您的SMTP服务器的主机。您可以指定主机的IP地址或类似vue5.com的域名。这是可选参数。
端口:如果您提供主机参数,则需要指定SMTP服务器正在侦听的端口。通常这个港口是25。
local_hostname:如果您的SMTP服务器在您的本地机器上运行,那么你可以只指定本地主机作为这个选项的。
SMTP对象具有称为sendmail的实例方法,通常用于执行邮件发送的工作。它需要三个参数 -
该发送者 -与发件人的地址的字符string。
该接收器 -字符string列表,每个收件人。
的消息 -消息作为如在各种RFC中指定的格式的字符string。
以下是使用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"
在这里,您已经使用三重报价放置了基本的电子邮件,请注意正确格式化标题。电子邮件需要一个From,To和Subject标题,与电子邮件的正文分开,带有空行。
要发送邮件,您使用smtpObj连接到本地机器上的SMTP服务器,然后使用sendmail方法以及消息,从地址和目标地址作为参数(即使从和地址在e内邮件本身,这些并不总是用来路由邮件)。
如果您不在本地计算机上运行SMTP服务器,则可以使用smtplib客户端与远程SMTP服务器进行通信。除非您使用网络邮件服务(如Hotmail或Yahoo! Mail),否则您的电子邮件提供商必须为您提供可以提供邮件服务器的详细信息,如下所示:
smtplib.SMTP("mail.your-domain.com", 25)
当您使用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"