简单邮件传输协议(SMTP)是一种协议,用于处理在邮件服务器之间发送电子邮件和路由电子邮件.
Python提供了 smtplib 模块,该模块定义了一个SMTP客户端会话对象,可用于通过SMTP或ESMTP侦听器守护程序将邮件发送到任何Internet计算机./p>
这是一个创建一个SMTP对象的简单语法,以后可用于发送电子邮件 :
import smtplibsmtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
以下是参数的详细信息 :
host : 这是运行SMTP服务器的主机.您可以指定主机的IP地址或it1352.com等域名.这是一个可选参数.
port : 如果要提供 host 参数,则需要指定SMTP服务器正在侦听的端口.通常这个端口是25.
local_hostname : 如果您的SMTP服务器在本地计算机上运行,那么您可以只指定 localhost 选项.
SMTP对象具有名为 sendmail 的实例方法,该方法通常用于执行邮件发送工作.它需要三个参数 :
发件人 : 带有发件人地址的字符串.
receiver : 一个字符串列表,每个收件人一个.
消息 : 消息作为字符串格式化为各种RFC中指定的格式.
示例
这是使用Python脚本发送一封电子邮件的简单方法.尝试一次和减去;
#!/usr/bin/python3import smtplibsender = 'from@fromdomain.com'receivers = ['to@todomain.com']message = """From: From PersonTo: To Person Subject: SMTP e-mail testThis 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"
在这里,您已在消息中放置了一个基本电子邮件,使用三重引号,注意正确格式化标题.电子邮件需要发件人,收件人和主题标题,并使用空行与电子邮件正文分隔.
要发送邮件,请使用 smtpObj 连接到本地计算机上的SMTP服务器.然后使用 sendmail 方法以及消息,发件人地址和目标地址作为参数(即使from和to地址在电子邮件本身内,这些并不总是用于路由邮件).
如果您没有在本地计算机上运行SMTP服务器,则可以使用 smtplib 客户端与远程SMTP服务器进行通信.除非您使用的是网络邮件服务(例如gmail或Yahoo! Mail),否则您的电子邮件提供商必须为您提供可以提供的外发邮件服务器详细信息,如下所示;
mail = smtplib.SMTP('smtp.gmail.com', 587)
发送HTML使用Python发送电子邮件
使用Python发送短信时,所有内容都被视为简单文本.即使您在文本消息中包含HTML标记,它也会显示为简单文本,并且HTML标记不会根据HTML语法进行格式化.但是,Python提供了将HTML消息作为实际HTML消息发送的选项.
发送电子邮件时,您可以指定Mime版本,内容类型和要发送的字符集HTML电子邮件.
示例
以下是将HTML内容作为电子邮件发送的示例.尝试一次和减去;
#!/usr/bin/python3import smtplibmessage = """From: From PersonTo: To Person MIME-Version: 1.0Content-type: text/htmlSubject: SMTP HTML e-mail testThis is an e-mail message to be sent in HTML formatThis is HTML message. This is headline.
"""try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email"except SMTPException: print "Error: unable to send email"
将附件作为电子邮件发送
要发送包含混合内容的电子邮件,需要设置内容类型标题为 multipart/mixed .然后,可以在边界中指定文本和附件部分.
边界以两个连字符开头,后跟一个唯一的编号,该编号不能出现在消息的一部分电子邮件.表示电子邮件最后部分的最后边界也必须以两个连字符结尾.
附加文件应使用 pack("m")函数进行编码在传输之前进行base 64编码.
示例
以下是一个示例,它发送文件/tmp/test.txt 作为附件.尝试一次和减去;
#!/usr/bin/python3import smtplibimport base64filename = "/tmp/test.txt"# Read a file and encode it into base64 formatfo = open(filename, "rb")filecontent = fo.read()encodedcontent = base64.b64encode(filecontent) # base64sender = '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 PersonTo: To Person Subject: Sending AttachementMIME-Version: 1.0Content-Type: multipart/mixed; boundary=%s--%s""" % (marker, marker)# Define the message actionpart2 = """Content-Type: text/plainContent-Transfer-Encoding:8bit%s--%s""" % (body,marker)# Define the attachment sectionpart3 = """Content-Type: multipart/mixed; name=%sContent-Transfer-Encoding:base64Content-Disposition: attachment; filename=%s%s--%s--""" %(filename, filename, encodedcontent, marker)message = part1 + part2 + part3try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, reciever, message) print "Successfully sent email"except Exception: print ("Error: unable to send email")