Python之——Python之生成并解析电子邮件

标签: Python
74人阅读 评论(0) 收藏 举报
分类:

转载请注明出处:https://blog.csdn.net/l1028386804/article/details/79972801

一、生成电子邮件

示例中有两个创建电子邮件消息的示例,即 make_mpa_msg()和 make_img_msg(),两者都创建了一条带有附件的电子邮件消息。前者创建并发送了一条多部分消息,后者创建并发送了一条电子邮件消息,其中含有一幅图片。示例代码后面是逐行解释。
具体代码如下:

#!/usr/bin/env python
'email-examples.py - demo creation of email messages'

from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from smtplib import SMTP

# multipart alternative: text and html
def make_mpa_msg():
    email = MIMEMultipart('alternative')
    text = MIMEText('Hello World!\r\n', 'plain')
    email.attach(text)
    html = MIMEText(
        '<html><body><h4>Hello World!</h4>'
        '</body></html>', 'html')
    email.attach(html)
    return email

# multipart; images
def make_img_msg(fn):
    f = open(fn, 'r')
    data = f.read()
    f.close()
    email = MIMEImage(data, name=fn)
    email.add_header('Content-Disposition',
        'attachment; filename="%s"' % fn)
    return email

def sendMsg(fr, to, msg):
    s = SMTP('localhost')
    errs = s.sendmail(fr, to, msg)
    s.quit()

if __name__ == '__main__':
    print 'sending multipart alternative msg'
    msg = make_mpa_msg()
    msg['From'] = SENDER
    msg['To'] = ', '.join(RECIPS)
    msg['Subject'] = 'multipart alternative test'
    sendMsg(SENDER, RECIPS, msg.as_string())

    print 'sending image msg'
    msg = make_img_msg(SOME_IMG_FILE)
    msg['From'] = SENDER
    msg['To'] = ', '.join(RECIPS)
    msg['Subject'] = 'image file test'
    sendMsg(SENDER, RECIPS, msg.as_string())
代码具体解释如下:
第 1~7 行
除了标准的起始行和 docstring,还导入了 MIMEImage、 MIMEMultipart、 MIMEText、SMTP 类。
第 9~18 行
多部分选择消息通常包含两部分,一是以纯文本表示的邮件消息正文,以及等价的 HTML格式。由邮件客户端来决定显示哪一部分。例如,基于 Web 的电子邮件系统会显示 HTML版本,而基于命令行的邮件阅读器只会显示纯文本版本。为了创建这种类型的消息,需要使用 email.mime.multiple.MIMEMultipart 类,并传递alternative 作为唯一的参数来实例化这个类。如果不传递这个参数,则前面的纯文本和 HTML会分别作为消息中的附件,这种情况下,有些邮件系统会同时显示这两部分的内容。这两部分都会用到 email.mime.text.MIMEText 类,因为这两部分内容都是纯文本。每个部分都要附加到邮件中,因为这两部分是在邮件创建之后才创建的。
第 20~28 行
make_img_msg()函数使用一个文件名作为参数。使用文件中的数据生成一个新的email.mime.image.MIMEImage 实例。添加一个 Content-Disposition 头,接着将消息返回给用户。
第 30~33 行
sendMsg()的唯一目的是获取基本的电子邮件发送信息(发件人、收件人、消息正文),接着传送消息,然后返回给调用者。要查看更详尽的输出内容,可以试试这个扩展:s.set_debuglevel(True),其中 s 是 smtplib.SMTP服务器。最终,与前面一样,因为许多 SMTP 服务器需要登录,所以需要在这里登录(在登录之后,发送电子邮件消息之前)。
第 35~48 行
这是这段脚本的主要部分,它仅仅测试这两个函数。用这两个函数创建消息,然后添加From、 To、 Subject 字段,然后将消息传送给这些收件人。当然,为了让应用能够工作,需要填充下面的字段: SENDER、 RECIPS、 SOME_IMG_FILE

二、解析电子邮件

与从零生成一封电子邮件相比,解析电子邮件简单一些。一般要用到 email 包中的几个工具 ,如 email.message_from_string()函数,以及 message.walk()和 message.get_payload()方法。

下面是一个典型的模式。

def processMsg(entire_msg):
    body = ''
    msg = email.message_from_string(entire_msg)
    if msg.is_multipart():
        for part in msg.walk():
            if part.get_content_type() == 'text/plain':
                body = part.get_payload()
                break
            else:
                body = msg.get_payload(decode=True)
    else:
        body = msg.get_payload(decode=True)
    return body
这段代码很容易理解。下面是其中的主要函数解释。
• email.message_from_string():用来解析消息。
• msg.walk():遍历消息的附件。
• part.get_content_type():获得正确 MIME 类型。
• msg.get_payload():从消息正文中获取特定的部分。通常 decode 标记会设为 True,即邮件正文根据每个 Content-Transfer-Encoding 头解码。


查看评论

python 构建和解析邮件

用python写传统的邮件 from email.mime.text import MIMEText message = ''' hello jason it is a test mail pl...
  • zmj_88888888
  • zmj_88888888
  • 2013-03-27 13:05:06
  • 2587

用 Python 发电子邮件

本文首发于【红叶枫啦】微信公号,未经允许,不得转载。 使用的库 这个程序涉及两个库:smtplib 和 email。 这两个库都是Python自带的,所以不需要额外的下载安装,此外,这次...
  • u010099080
  • u010099080
  • 2016-10-16 16:46:19
  • 2563

Python用ET包解析XML文件,写入到CSV中

废话不多说直接上代码,说明在注释中 #!/usr/bin/evn python #coding:utf-8 import sys reload(sys) sys.setdefaultencod...
  • fm0517
  • fm0517
  • 2018-02-02 14:58:58
  • 108

PYTHON读取文件测试

  • 2014年06月16日 09:59
  • 3.68MB
  • 下载

Python网络编程:E-mail服务(三)MIME解析

简介 上篇文章中,提到MIME(Multipurpose Internet Mail Extensions)定义了邮件的格式和编码,本文讲详细讲解这些内容。 MIME作用 为了能通过电子邮件发送非A...
  • u010096900
  • u010096900
  • 2015-04-22 22:33:06
  • 4200

python生成xml

  • 2010年05月10日 23:07
  • 2KB
  • 下载

python模块之email: 电子邮件编码解码 (一、解码邮件)

    python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用。处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件:...
  • zhaoweikid
  • zhaoweikid
  • 2007-06-01 22:00:00
  • 9016

python写的自动扫描c工程头文件依赖的程序

  • 2014年08月17日 21:21
  • 723B
  • 下载

python生成汉字验证码

  • 2017年09月06日 11:57
  • 2KB
  • 下载

Python3.5环境下使用generateDS解析xml文件生成C++头文件的方法

一、准备工作 1、安装python最新版本,这里以3.6版本为例,下载链接:https://www.python.org/downloads/release/python-360/, 在页面最下方有...
  • qq_28088659
  • qq_28088659
  • 2017-01-05 13:54:37
  • 513
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 237万+
    积分: 2万+
    排名: 210
    博客专栏
    MySQL

    文章:136篇

    阅读:312482
    Hadoop生态

    文章:149篇

    阅读:235562
    Java

    文章:159篇

    阅读:594915
    J2EE

    文章:76篇

    阅读:310442
    JVM

    文章:15篇

    阅读:55371
    Linux

    文章:85篇

    阅读:255483
    Web前端

    文章:22篇

    阅读:93497
    Mycat

    文章:20篇

    阅读:31809
    设计模式

    文章:22篇

    阅读:52638
    Memcached

    文章:9篇

    阅读:53431
    Redis

    文章:18篇

    阅读:107223
    Netty

    文章:1篇

    阅读:2291
    JMS

    文章:13篇

    阅读:13539
    Dubbo

    文章:20篇

    阅读:57026
    Nginx

    文章:19篇

    阅读:66862
    搜索优化

    文章:24篇

    阅读:28661
    Python

    文章:55篇

    阅读:45287
    Android

    文章:80篇

    阅读:254588
    算法

    文章:1篇

    阅读:624
    MongoDB

    文章:29篇

    阅读:1258
    最新评论