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


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

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

     

  • 相关阅读:
    gorm 更新数据时,0值会被忽略
    xshell评估过期解决办法
    安装zoom
    aria2 加速百度网盘下载
    ubuntu17.10 安装firefox的flash
    c++ 回调函数使用
    ubuntu17 安装中文输入法
    ubuntu python3.6 找不到_sqlite3
    linux 获取CPU个数
    centos7 yum与Python3冲突
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/12032654.html
Copyright © 2020-2023  润新知