一、邮件涉及协议及本文说明
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()) # 得到主体内容

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

转载于:https://www.cnblogs.com/zixuan-zhang/p/3402818.html

E-mail Composition and Decoding相关推荐

  1. python 接收邮件服务器地址_Python 用IMAP接收邮件

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

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

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

  3. python模拟登录qq邮箱爬取_python模拟登录qq邮箱

    前两天做一个任务,要写一个收取qq邮箱邮件的脚本.开始认为挺简单,后来发现还是有一些坑在里面. 首先使用python尝试模拟登录qq邮箱,发现普通用户已经不能通过账号密码模拟登录qq邮箱了.要用到授权 ...

  4. python模拟登录qq邮箱

    前两天做一个任务,要写一个收取qq邮箱邮件的脚本.开始认为挺简单,后来发现还是有一些坑在里面. 首先使用python尝试模拟登录qq邮箱,发现普通用户已经不能通过账号密码模拟登录qq邮箱了.要用到授权 ...

  5. 【Android 10 源码】MediaRecorder 录像流程:MediaRecorder 开始录制

    前面已经分析过 MediaRecorder 初始化和配置过程,接下来就可以真正进入录制流程了.现在不难得出这个结论:MediaRecorder 录制 Camera 的数据实际上是将预览数据经过 Med ...

  6. Android MPEG4Writer.cpp 简单跟读

    首先在前面申明一点,本人接触Android的时间并不长,只是因为喜欢 Android开发,并且项目有需要,才会去看Android framework 层MPEG4Writer.cpp 的代码.在这里也 ...

  7. Linux雷鸟邮件,thunderbird雷鸟mail

    sudo apt-get install thunderbird安装雷鸟mail Account Settings->Server Settings->Use secure connect ...

  8. thunderbird雷鸟mail

    sudo apt-get install thunderbird安装雷鸟mail Account Settings->Server Settings->Use secure connect ...

  9. php sendmail方法,PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法

    本文实例讲述了PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法.分享给大家供大家参考,具体如下: 1.php mail()函数在windows不能用,需要安装sen ...

最新文章

  1. Centos7:update-initramfs -u:command not found
  2. python处理多个excel文件-python多个excel文件合并成一个sheet
  3. function收集
  4. 11.2.1 jQuery介绍与使用
  5. android ImageSwitcher的使用
  6. CodeForces - 1236D Alice and the Doll(贪心+二分+模拟)
  7. SpringMVC第五次课 SSM整合
  8. 时代风口下,东软集团软件业务怎么转型?
  9. 将ABAP On-Premises系统连接到中央检查系统以进行自定义代码迁移
  10. c++2015语言,2015年7月TIOBE编程语言排行榜:C++ 的复兴
  11. 雷军再失猛将!小米12号创始员工离职 曾一起喝粥创立小米
  12. 千方百剂创建账套服务器文件,千方百剂辅助工具使用手册图解
  13. windows下用wget下载数据
  14. 技术分享 | Online DDL 工具 gh-ost
  15. uni-app - 实现手机扫描二维码并跳转全过程
  16. php精华之独孤九剑
  17. NEFU 262 贪吃的九头龙(树形背包,4级)
  18. 为什么要给代码添加注释?
  19. 当你准备自定义view的时候
  20. python 转换文本从繁体到简体,但保留一切繁体符号

热门文章

  1. react native 的TextInput组件问题
  2. 一招彻底帮你搞定HashMap源码,成长路线图
  3. 用java怎么实现数据库_用Java实现数据库应用系统
  4. python爬取动态网页图片_python爬虫之爬取动态加载的图片_百度
  5. python functools.reduce_Python-functools模块(reduce、partial、lru_cache)
  6. js中计时器setTimeout、setInterval、requestAnimationFrame区别
  7. 网站SEO中内页标签该如何进行优化?
  8. 404页面设计技巧性分享不容错过!
  9. 浅析SEO优化分类信息网站优化的三大技巧
  10. 老电脑安装matlab 2018卡不卡,软件装C盘会变卡?Windows系统要怎么用才不卡?