Python发送邮件(Email SMTP)

来源:互联网 发布:手机淘宝自定义链接 编辑:程序博客网 时间:2024/05/19 19:39

Python发送邮件(Email SMTP)

Python发送邮件(Email SMTP) : 简单邮件传输协议(SMTP)是一种处理电子邮件发送电子邮件和邮件服务器之间的路由协议.
Python提供的smtplib模块定义一个SMTP客户端会话的对象,可以使用任何互联网机器发送邮件与SMTP或ESMTP监听守护.

这里是一个简单的语法创建一个SMTP对象,以后可以用来发送电子邮件:

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

下面是详细的参数:

  • host: 这是您的SMTP服务器的主机上运行。你可以说明指主机,像yiibai.com域名的IP地址。这是可选参数.

  • port:如果您所提供的主机参数,那么你需要说明指SMTP服务器监听端口。通常该端口会是25.

  • local_hostname:如果您的SMTP服务器是在本地机器上运行,那么你可以指定此选项的localhost.

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

  • 发送人 - 发件人地址的字符串.

  • 接收人 - 一个字符串列表,可以是多个人.

  • 信息/消息 - 消息作为字符串格式化为指定在不同的RFC.

例子:

下面是一个简单的方法来发送一个电子邮件,使用Python脚本。试一次看看:

#!/usr/bin/pythonimport smtplibsender = 'from@fromdomain.com'receivers = ['to@todomain.com']message = """From: From Person To: 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"

在这里,你已经放置在消息一个基本的电子邮件,使用三重引号,注意正确格式化的头。一个电子邮件需要的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/pythonimport smtplibmessage = """From: From Person To: To Person MIME-Version: 1.0Content-type: text/htmlSubject: SMTP HTML e-mail testThis 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/pythonimport 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 Person To: To Person <amrood.admin@gmail.com>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=\"%s\"Content-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"
0 0
原创粉丝点击