• E-mail Composition and Decoding


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

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

  • 相关阅读:
    抓取到的网页写入数据库后是乱码的解决方法
    关于SecureCRT v7.0.2.418 安装、破解和修改
    负数的除法和取模运算(Python 2.7和C的比较)
    单模式匹配匹配算法
    Python解析网页工具:PyQuery
    asp.net json,对象,字符串的相互转换
    asp.net 后台 get,post请求
    查看局域网内所有IP
    MSSql性能优化
    js中对象复制以及apply方法的使用
  • 原文地址:https://www.cnblogs.com/zixuan-zhang/p/3402818.html
Copyright © 2020-2023  润新知