一、添加邮件头,抄送等信息

1.mail["From"]表示发送者信息,包括姓名和邮件

2.mail["To"]表示接收者信息,包括姓名和邮件地址

3.mail["Subject"]表示摘要或者主题信息

from email.mime.text import MIMEText

from email.header import Header

​

msg = MIMEText("Hello world","plain","utf-8")

​

#用utf-8编码是因为很可能内容包含非英文字符

header_from = Header("从我自己的邮箱发送出去有的<1215217867@qq.com>","utf-8")#就是邮件头,注意点:编解码格式相一致

msg["From"] = header_from

header_to = Header("去我自己的邮箱1215217867@qq.com","utf-8")#填写接收者的信息

msg["To"] = header_to

header_sub = Header("这是我的主题","utf-8")

msg["Subject"] = header_to

#构建发送者地址和登录信息

from_addr = "1215217867@qq.com"

from_pwd = ""

#构建邮件接收者信息

to_addr = "1215217867@qq.com"

smtp_srv = "smtp.qq.com"

try:

    import smtplib

    srv = smtplib.SMTP_SSL(smtp_srv.encode(),465)

    srv.login(from_addr,from_pwd)

    srv.sendmail(from_addr,[to_addr],msg.as_string())

    srv.quit()

except Exception as a:

    print(a)

二、同时发送html和text格式

1.构建一个MIMEMutipart格式邮件

2.MIMEMultipart的subtype设置成alternative格式

3.添加HTML和text邮件

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

​

#构建一个MIMEMultipart邮件

msg = MIMEMultipart("alternative")

#构建一个HTML邮件内容

html_content = """

                <!DOCTYPE html>

                <html lang="en"

                <head>

                    <meta charset="UTF-8">

                    <title>Title</title>

                </head>

                <body>

                    <h1>这是一封HTML格式邮件<h1>

                </body>

                </html>

                """

msg_html = MIMEText(html_content,"html","utf-8")

msg.attach(msg_html)

msg_text = MIMEText("just text content","plain","utf-8")

msg.attach(msg_text)

#发送email地址

#构建发送者地址和登录信息

from_addr = "1215217867@qq.com"

from_pwd = ""

#构建邮件接收者信息

to_addr = "1215217867@qq.com"

smtp_srv = "smtp.qq.com"

try:

    import smtplib

    srv = smtplib.SMTP_SSL(smtp_srv.encode(),465)

    srv.login(from_addr,from_pwd)

    srv.sendmail(from_addr,[to_addr],msg.as_string())

    srv.quit()

except Exception as a:

    print(a)

​

三、POP3协议接受邮件

1.本质上是MDA到MUA的一个过程

2.从MDA下载下来的是一个完整的邮件结构体,需要解析才能得到每个具体

3.步骤:

(1)用poplib下载邮件结构体原始内容

(2)准备相应的内容(邮件地址,密码,POP3实例)

(3)身份认证

(4)根据相应序号,得到某一封信的数据流

(5)利用解析函数进行解析出相应的邮件结构体

(6)用email解析邮件的具体内容


#导入相关的包

#poplib负责从MDA到MUA下载

import poplib

#以下包负责相关邮件结构解析

from email.parser import Parser

from email.header import Header

from email.utils import parseaddr

#得到邮件的原始内容

#这个过程主要负责从MDA到MUA的下载并且使用Parse粗略解析

def getMsg():

    #准备相应的信息

    email = "1215217867@qq.com"

    #邮箱的授权码

    pwd = ""

    #pop3服务器地址

    pop3_srv = "pop.qq.com"#端口995

​

    #ssl代表安全通道

    srv = poplib.POP3_SSL(pop3_srv)

    #user代表email地址

    srv.user(email)

    #pass_代表密码

    srv.pass_(pwd)

​

    #以下操作根据具体业务具体使用

    #stat返回的是邮件数量以及占用空间

    #注意stat返回了一个tuple格式

    msgs,counts = srv.stat()

    print("Message:{0},Size:{1}".format(msgs,counts))

​

    #list返回所有邮件编号列表

    #mails是所有邮件编号列表

    rsp,mails,octets = srv.list()

    #可以查看返回的mails列表,类似于[b"1 82923",b"23 2184",.....]

    print(mails)

​

    #获取最新一封邮件,追忆,邮件索引是从1开始的,最新代表索引号最高

    index = len(mails)

    #retr负责返回一个具体索引号的一封信的内容,此内容不具有可读性

    #lines存储邮件的最原始文本的每一行

    rsp,lines,octets = srv.retr(index)

​

    #获取整个邮件的结构体

    msg_count = b"\r\n".join(lines).decode("utf-8")

    #解析出邮件整个结构体

    #参数是解码后的邮件整体

    msg = Parser().parsestr(msg_count)#这一行代表解码

​

    #关闭链接

    srv.quit()

    return msg

​

if __name__ == "__main__":

    #得到邮件的原始内容

    msg = getMsg()

    print(msg)

    #精确解析邮件内容

    # parseMsg(msg,0)

​

五、源码

D57_1_MailHeadAndCC.py

D57_2_SendHTMLAndTextMail.py

D57_3_AnalysisMaii.py

https://github.com/ruigege66/Python_learning/blob/master/D57_1_MailHeadAndCC.py

https://github.com/ruigege66/Python_learning/blob/master/D57_2_SendHTMLAndTextMail.py

https://github.com/ruigege66/Python_learning/blob/master/D57_3_AnalysisMaii.py

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Python连载57- 邮件头和主题、解析邮件的更多相关文章

  1. python之poplib模块下载并解析邮件

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之poplib模块下载并解析邮件 #https://github.com/michaelliao ...

  2. python开发_email_读取邮件头信息

    在python中的类库中,python自带了email模块. 在email模块中,我们可以email类库实现对邮件的读取,和邮件的发送等功能. 本文先来谈谈在python中,利用email模块读取邮件 ...

  3. Python连载56-发送带有附件、正文为HTML的邮件

    一.HTML格式怎么发送右键 1.准备HTML代码作为内容 2.把邮件的subtype设置为html 3.发送 4.举个例子:自己发给自己一个HTML格式的文件 from email.mime.tex ...

  4. Python中使用SMTP发送邮件以及POP收取邮件

    假设我们自己的电子邮件地址是from@163.com,对方的电子邮件地址是to@sina.com(这里的地址虚拟的),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email ...

  5. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  6. python笔记37-史上最好用的发邮件zmail

    简介 python发邮件之前用的是smtplib,代码太过于复杂,学习成本大,并且很多人学不会.之前专门写过一篇https://www.cnblogs.com/yoyoketang/p/7277259 ...

  7. 教你看懂邮件头信息<转载>

    MIME对于邮件系统的扩展是巨大的,因为在MIME出现以前,信件内容如果要包括声音和动画,就必须把它变为ASCII码或把二进制的信息变成可以传送的编码标准,而接收方必须经过解码才可以获得声音和图画信息 ...

  8. python3接收、解析邮件

    邮件接收 python3可以使用poplib.POP3进行邮件接收,具体如下: import poplib from email.parser import Parser def get_email( ...

  9. Python连载12-shutil模块

    一.shutil模块 1.函数:copy() (1)用法:复制文件0 (2)格式:copy(来源路径,目标路径) (3)返回值:返回目标路径 (4)注意:拷贝的同时可以给文件重命名 source_pa ...

随机推荐

  1. 版本控制神器——git的基本使用

    git基础命令 安装git windows的话,直接下载安装即可 Linux Ubuntu安装,apt-get install git Linux Centos安装,yum install git 配 ...

  2. Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览

    ​ ​本文是Spring Cloud专栏的第一篇文章,了解本篇文章内容有助于更好的理解后面文章 ​ 一.网站架构演变过程 1-1.传统架构 传统的SSH架构,分为三层架构 web控制层.业务逻辑层.数 ...

  3. webpack 4.x 从零开始初始化一个vue项目

    创建目录 项目名称: vue-init app css reset.sass js home index.vue router index.js main.js App.vue views index ...

  4. ruby方法名之命名方式

    上一篇博文 ruby传参之引用类型 里边定义了一个方法名 modify_my_object!,这个方法名是以 ! 结尾,在 ruby 的对象里边是用于表达修改本身的意思. 比如 String#gsub ...

  5. [动图演示]Redis 持久化 RDB/AOF 详解与实践

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...

  6. WebSSH画龙点睛之lrzsz上传下载文件

    本篇文章没有太多的源码,主要讲一下实现思路和技术原理 当使用Xshell或者SecureCRT终端工具时,我的所有文件传输工作都是通过lrzsz来完成的,主要是因为其简单方便,不需要额外打开sftp之 ...

  7. redis数据类型--hash

    /** Redis应用之Hash数据类型* 问题1:操作命令* 问题2:存储实现原理和数据结构* 问题3:应用场景* */ 先了解下什么是hash,什么是hash碰撞:hash:是包含键值对的kv的数 ...

  8. Dapr 运用

    Dapr 运用 前置条件 Docker Win10 Dapr 部署 本文将采用本地部署的方式. 安装 Dapr CLI 打开 Windows PowerShell 或 cmd ,运行以下命令以安装 D ...

  9. MRC ARC 混编

    今天一个人问我 什么是MRC 什么是ARC 要是一个工程里用到了MRC和ARC 怎么办 我当时就无语了 什么情况 这是....   好了正经一点 我说一下iOS5.0以后就开始可以使用ARC( Aut ...

  10. Django中直接执行SQL语句

    欢迎加入python学习交流群 667279387 今天在django views.py看到同事写的代码里面有段关于数据库查询的语句.因为涉及多个表的查询,所以django 的models的查询无法满 ...