欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python连载57- 邮件头和主题、解析邮件

程序员文章站 2022-05-18 19:29:47
一、添加邮件头,抄送等信息 1.mail["From"]表示发送者信息,包括姓名和邮件 2.mail["To"]表示接收者信息,包括姓名和邮件地址 3.mail["Subject"]表示摘要或者主题信息 from email.mime.text import MIMEText from email. ......

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

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)

 

Python连载57- 邮件头和主题、解析邮件

二、同时发送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)

​

Python连载57- 邮件头和主题、解析邮件

三、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)

​

 

Python连载57- 邮件头和主题、解析邮件

Python连载57- 邮件头和主题、解析邮件五、源码

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- 邮件头和主题、解析邮件