python发送邮件_smtplib模块发送电子邮件

发布时间:2021-01-20编辑:脚本学堂
python发送邮件多是使用smtplib模块来完成,python可以发送普通格式的邮件、带附件的邮件、以及html格式的邮件,具体参考教程详情。

专题教程:python发送邮件实例教程

python smtplib模块定义一个smtp客户端会话的对象,可以使用任何互联网机器发送邮件与smtp或esmtp监听守护.

创建一个smtp对象,发送电子邮件:
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

详细参数:
host:SMTP服务器的主机上运行。可以说明指主机,像plcxue.com域名IP地址。这是可选参数.
port“如果所提供的主机参数,需要说明指SMTP服务器监听端口。通常该端口会是25.
local_hostname:如果SMTP服务器是在本地机器上运行,那么可以指定此选项的localhost.

一个SMTP对象调用sendmail的一个实例方法,这通常会被用来做信息邮寄工作。

它有三个参数:
发送人 - 发件人地址的字符串.
接收人 - 一个字符串列表,可以是多个人.
信息/消息 - 消息作为字符串格式化为指定在不同的RFC.

python发送邮件:
 

复制代码 代码示例:
#!/usr/bin/python
import smtplib
sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']
message = """From: From Person
To: To Person
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的方法,随着消息的邮件,从地址,目的地址作为参数(即使从地址在电子电子邮件本身,这些并非总是用于路由邮件).

如果没有自己的SMTP服务器,可以使用的smtplib客户的沟通与远程SMTP服务器。
除非使用一个webmail服务(如Hotmail或Yahoo!邮箱),您的电子邮件提供商将与外发邮件服务器的详细信息,可以提供他们所提供,如下:
 

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

使用Python发送HTML电子邮件:
当发送文字信息,然后Python的所有内容将被视为简单的文字。
即使将包括在文本消息的HTML标签,它会显示简单的文本和HTML标记不会被格式化,根据HTML语法。但是Python提供了实际的HTML邮件发送HTML邮件的选项.

在发送电子邮件时,您可以指定一个MIME版本,内容类型和字符集发送HTML电子邮件.

例子:
以下是例子作为电子邮件发送HTML内容。
 

复制代码 代码示例:
#!/usr/bin/python
import smtplib
message = """From: From Person
To: To Person
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 This 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"

发送电子邮件附件

混合型内容与发送电子邮件,要求设置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
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"