一、邮件涉及协议及本文说明
1. 协议

  • SMTP(Simple Mail Transfer Protocal) 简单邮件传输协议,用于发送邮件。
  • MIME(Mutipurpose Internet Mail Extensions) 多用途互联网邮件扩展,可发送附件。但由于,程序不许要这个功能,因此我们有学习,也就不会出现在本文中。
  • POP(Post Office Protocal) 邮局协议,一般用POP3。可以用以较为简单的方式接收邮件(从邮件服务器上下载邮件到主机上)。
  • IMAP(Internet Mail Access Protocal) 也用于接收邮件,功能较POP3更为强大些。

2. 在下面中会更详细的介绍这些协议,以及在Python中的使用方式。
二、邮件格式粗糙解释。
  Email在组织的时候遵循header和body的映射模式。而header是固定一些可选的如 From, To, Subject, Date time, Receiver, Message-ID, Content, Attachment。它们的组织形式如:

  • From: ....(显示发送者邮箱)
  • To: ... (显示目的地邮箱)
  • Subject: ... (显示主题)
  • Date: ... (显示发送时间还是到达时间?)
  • Content: ... (邮件主体内容)
  • Attachment: ... (附件)

  对于我来说,我只需要From, To, Subject, Content。
三、撰写“极简单”邮件
1. 下面以一个例子说明怎样生成一封邮件。

from email.message import Message
# 一个email一般封装在Message类中,所以需要在email.message中引入Message类。 # 这是邮件主体内容
text = """ Hello,
This is a test message from vicczx. --viczzx--""" msg = Message() # 构造一个Message实例
msg['To'] = "toUserName@example.com" #接收者邮箱
msg['From'] = "myUserName@example.com" #自己的邮箱
msg['Subject'] = 'Test Message' #邮件主题
msg.set_payload(text) #将上面的邮件内容通过set_payload()函数封装进msg # 通过上面也可一看到, 邮件格式就是通过映射的方式进行组织的。需要注意的是:'To','From'等区分大小写,否则接收者无法解析 print(msg.as_string()) # 查看邮件内容

2. 添加Date和Message-ID header
  绝大多数邮件有个Date header,这个可以通过email.utils库进行生成;
  你也可以生成一个Message-ID header,就可以区别世界上所有其他的邮件了。这个也是通过email.utils模块的函数进行生成。
  对于我来说,因为我不打算做一个功能强大的邮件客户端,因此,这些都是可有可无的。不过加上这些内容后,也算比较完整了。如下代码:

from email.utils
from email.message import Message
# 一个email一般封装在Message类中,所以需要在email.message中引入Message类。 # 这是邮件主体内容
text = """ Hello,
This is a test message from vicczx. --viczzx--""" msg = Message() # 构造一个Message实例
msg['To'] = "toUserName@example.com" #接收者邮箱
msg['From'] = "myUserName@example.com" #自己的邮箱
msg['Subject'] = 'Test Message' #邮件主题
msg['Date'] = email.utils.formatdate(localtime=1) #函数详细说明请查看官方Python API Reference
msg['Message-ID'] = email.utils.make_msgid()
msg.set_payload(text) #将上面的邮件内容通过set_payload()函数封装进msg # 通过上面也可一看到, 邮件格式就是通过映射的方式进行组织的。需要注意的是:'To','From'等区分大小写,否则接收者无法解析 print(msg.as_string()) # 查看邮件内容

四、解析邮件(Parsing Messages)
  知道了怎样生成邮件的,其实解析邮件就能够大致了解了。

# 已知msg 为下载下来的Message()实例邮件。
print("This message is from : ", msg['From'] )
print("This message is to : ", msg['To'])
print("Subject: ", msg['Subject']) # 主题
print("Content: ", msg.get_payload()) # 得到主体内容

  但是在实际上,可能没有这么简单。因为需要使用到中文,邮件解析还要考虑这一点;其他问题在这里不再这里过多说明,我会在后面详细的讲解程序开发过程中遇到的种种问题,所以,如果有需要请看后面几篇文章。

E-mail Composition and Decoding的更多相关文章

  1. 用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(中)

    这篇博客,主要讲解用Python实现邮箱服务的几个需要学习的模块:E-mail Compotion and Decoding(邮件生成和解析).SMTP.POP.IMAP 如上篇博客所讲,我学习过程参 ...

  2. Python 用IMAP接收邮件

    一.简介IMAP(Internet Message Access Protocol),这个协议与POP一样,也是从邮件服务器上下载邮件到本机,不过IMAP比POP的功能要更加强大些,IMAP除支持PO ...

  3. mail

    mail.php  <?php require_once('class.phpmailer.php'); $mail = new PHPMailer(); //实例化 $mail->IsS ...

  4. Privacy-Enhanced Mail (PEM) Privacy Enhancement for Internet Electronic Mail

    小结 1. 加密基本流程 本地格式标准格式认证(填充与完整性检查)与加密可打印编码 Privacy-Enhanced Mail (PEM) RFC 2313 - PKCS #1: RSA Encryp ...

  5. ABP源码分析七:Setting 以及 Mail

    本文主要说明Setting的实现以及Mail这个功能模块如何使用Setting. 首先区分一下ABP中的Setting和Configuration. Setting一般用于需要通过外部配置文件(或数据 ...

  6. Linux发邮件之mail命令

    一.mail命令 1.配置 vim /etc/mail.rc 文件尾增加以下内容 set from=1968089885@qq.com smtp="smtp.qq.com" set ...

  7. php mail 函数发送邮件

    当然你可以通过php ,在自己的站点制作一个反馈表单, 我这次的需求是用email 的形式发送数据报表,结构比较简单 // 收件人地址(此处只可以写一个地址,写多个地址,只有最后一个地址生效) $to ...

  8. SQL Server 2014 Database Mail重复发送邮件特殊案例

    在一数据库服务器(Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64))发现有个作业调用Database Mail发送邮件时, ...

  9. UWP Composition API - 锁定列的FlexGrid

    需求是第一列锁定,那么怎么让锁定列不跟着滚动条向做移动呢? 其实很简单,让锁定列跟scrollviewer的滚动做反方向移动. 先看一下这个控件的模板,嗯,其实很简单,就是ListView的模板,不同 ...

随机推荐

  1. 朴素UNIX之-打开历史

    它可以毫不夸张地说,,UNIX模型是现代操作系统的原型.无论是真实的UNIX让我们大系列AIX,Solaris,HP-UX,FreeBSD,NetBSD,...或类别UNIX实例Linux...或基于 ...

  2. java_Eclipse主题颜色配置+全屏

    http://www.eclipsecolorthemes.org/ 这个是主题的网站. 在Eclipse里, File->Import->General->Preferences- ...

  3. C# 使用摄像头拍照 支持Win7 64位

    原文:C# 使用摄像头拍照 支持Win7 64位 So, how do we capture an image from a WebCam? Once you download the source ...

  4. Unity插件之NGUI学习(6)—— 关于Widget怎样加入触发事件(触发OnClick)

    NGUI中,Button本身就带有OnClick事件,可是Sprite,Label等( 也绑有Widget的)并没有触发事件,事实上NGUI的事件触发都必须加入Box Collider,并勾选Is T ...

  5. 新版live555代理server

    好久没搞流媒体了,近期又回归了,已经把live555代理服务器更新到最新的live555代码(V0.82). 改进了一大坨问题,还去掉了一个类,代码更精简了. 改进了命令行參数格式,仅仅要这样:rts ...

  6. Windows 10技术布局,谈微软王者归来

    Windows 10技术布局,谈微软王者归来 每个时代都有王者,王者的成功,往往是因为恰逢其时地发布了一个成功的产品(具有里程碑意义,划时代的产品).Windows 95的成功标示着微软是PC时代的王 ...

  7. dozer-初识

    1.简介     dozer是一种JavaBean的映射工具,类似于apache的BeanUtils.但是dozer更强大,它可以灵活的处理复杂类型之间的映射.不 但可以进行简单的属性映射.复杂的类型 ...

  8. Ajax.ActionLink 用法

    Ajax.ActionLink 用法 Ajax 属性的ActionLink方法可以创建一个具有异步行为的锚标签. ActionLink方法的第一个参数指定了链接文本,第二个参数是要异步调用的操作的名称 ...

  9. Android 使用Gson解析json案例具体解释

    一.眼下解析json有三种工具:org.json(Java经常使用的解析),fastjson(阿里巴巴project师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:h ...

  10. C# 在本地创建文件夹及子文件夹

    string dict = @"d:\估价报告\"; if (!Directory.Exists(dict)) { Directory.CreateDirectory(dict); ...