案例v12链接:https://blog.csdn.net/weixin_42394170/article/details/96438969

Mail编程

电子邮件的历史

  • 起源

    • 1969 Leonard K. 教授发给同时的 “LO”
    • 1971 美国国防部自主的阿帕网(Arpanet)的通讯机制
    • 通讯地址里用@,
    • 1987年中国的第一份电子邮件
      “Across the Great Wall we can reach every corner in the world"
  • 管理程序

    • Euroda使邮件普及
    • Netscape,outlook,forxmail后来居上
    • Hotmal使用浏览器发送邮件i
  • 参考资料

    • 官网

邮件工作流程

  • MUA(MailUserAgent)邮件用户代理

  • MTA(MailTransferAgent)邮件传输代理

  • MDA(MailDeliveryAgent)邮件投递代理

  • laoshi@qq.com, 老师,北京海淀

  • xuesheng@sina.com, 学生,上海江岸区

  • 流程

    1. MUA->MTA, 邮件已经在服务器上了
    2. qq MTA->…->sina MTA, 邮件在新浪的服务器上
    3. sina MTA-> sina MDA, 此时邮件已经在你的邮箱里了
    4. sina MDA -> MUA(Foxmail/Outlook), 邮件下载到本地电脑
  • 编写程序

    • 发送: MUA->MTA with SMTP:SimpleMailTransferProtocal,包含MTA->MTA
    • 接受: MDA->MUA with POP3 and IMAP:PostOfficeProtocal v3 and InternetMessageAccessProtocal v4
  • 准备工作

    • 注册邮箱(以qq邮箱为例)
    • 第三方邮箱需要特殊设置, 以qq邮箱为例
      • 进入设置中心
      • 取得授权码
  • Python for mail

    • SMTP协议负责发送邮件

      • 使用email模块构建邮件

        • 纯文本邮件
        • 案例v07
      • HTML格式邮件发送

        • 准备HTML代码作为内容
        • 把邮件的subtpye设为html
        • 发送
        • 案例v08
      • 发送带附件的邮件

        • 可以把邮件看作是一个文本邮件和一个附件的合体
        • 一封邮件如果涉及多个部分,需要使用MIMEMultipart格式构建
        • 添加一个MIMEText正文
        • 添加一个MIMEBase或者MEMEText作为附件
        • 案例v09
      • 添加邮件头, 抄送等信息

        • mail[“From”] 表示发送着信息,包括姓名和邮件
        • mail[“To”] 表示接收者信息,包括姓名和邮件地址
        • mail[“Subject”] 表示摘要或者主题信息
        • 案例v10
      • 同时支持html和text格式

        • 构建一个MIMEMultipart格式邮件
        • MIMEMultipart的subtype设置成alternative格式
        • 添加HTML和text邮件
        • 案例v11
      • 使用smtplib模块发送邮件

    • POP3协议接收邮件

      • 本质上是MDA到MUA的一个过程
      • 从 MDA下载下来的是一个完整的邮件结构体,需要解析才能得到每个具体可读的内容
      • 步骤:
        1. 用poplib下载邮件结构体原始内容

          1. 准备相应的内容(邮件地址,密码,POP3实例)
          2. 身份认证
          3. 一般会先得到邮箱内邮件的整体列表
          4. 根据相应序号,得到某一封信的数据流
          5. 利用解析函数进行解析出相应的邮件结构体
        2. 用email解析邮件的具体内容
      • 案例v12

###由于代码过长,将分几篇文章展示

**v07**
# 导入相应的包
import smtplib
from email.mime.text import MIMEText
# MIMEText三个主要参数
# 1. 邮件内容
# 2. MIME子类型,在此案例我们用plain表示text类型
# 3. 邮件编码格式msg = MIMEText("Hello, i study in NJUPT ", "plain", "utf-8")# 发送email地址,此处地址直接使用我的qq有偶像,密码一般需要临时输入,此处偷懒
from_addr = "1142190864@qq.com"
# 此处密码是经过申请设置后的授权码,不是不是不是你的qq邮箱密码
from_pwd = "hjpovygcxmrshhcj"# 收件人信息
# 此处使用qq邮箱,我给自己发送
to_addr = "1142190864@qq.com"# 输入SMTP服务器地址
# 此处根据不同的邮件服务商有不同的值,
# 现在基本任何一家邮件服务商,如果采用第三方收发邮件,都需要开启授权选项
# 腾讯qq邮箱所的smtp地址是 smtp.qq.comsmtp_srv = "smtp.qq.com"try:# 两个参数# 第一个是服务器地址,但一定是bytes格式,所以需要编码# 第二个参数是服务器的接受访问端口srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465) #SMTP协议默认端口25#登录邮箱发送srv.login(from_addr, from_pwd)# 发送邮件# 三个参数# 1. 发送地址# 2. 接受地址,必须是list形式# 3. 发送内容,作为字符串发送srv.sendmail(from_addr, [to_addr], msg.as_string())srv.quit()
except Exception as e:print(e)
**v08**
import smtplib
from email.mime.text import  MIMETextmail_content = """<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><h1> 这是一封HTML格式邮件</h1></body></html>"""msg = MIMEText(mail_content, "html", "utf-8")# 构建发送者地址和登录信息
from_addr = "1142190864@qq.com"
from_pwd = "hjpovygcxmrshhcj"# 构建邮件接受者信息
to_addr = "1142190864@qq.com"smtp_srv = "smtp.qq.com"try: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 e:print(e)
**v09**
from email.mime.text import MIMEText #构建附件使用
from email.mime.multipart import MIMEBase, MIMEMultipart # 构建基础邮件使用mail_mul = MIMEMultipart()
# 构建邮件正文
mail_text = MIMEText("Hello, i am liudana", "plain", "utf-8")
# 把构建好的邮件正文附加入邮件中
mail_mul.attach(mail_text)# 构建附加
# 构建附件,需要从本地读入附件
# 打开一个本地文件
# 以rb格式打开
with open("02.html", "rb") as f:s = f.read()# 设置附件的MIME和文件名m = MIMEText(s, 'base64', "utf-8")m["Content-Type"] = "application/octet-stream"# 需要注意,# 1. attachment后分好为英文状态# 2. filename 后面需要用引号包裹,注意与外面引号错开m["Content-Disposition"] = "attachment; filename='02.html'"# 添加到MIMEMultipartmail_mul.attach(m)# 发送email地址,此处地址直接使用我的qq有偶像,密码一般需要临时输入,此处偷懒
from_addr = "1142190864@qq.com"
# 此处密码是经过申请设置后的授权码,不是不是不是你的qq邮箱密码
from_pwd = "hjpovygcxmrshhcj"# 收件人信息
# 此处使用qq邮箱,我给自己发送
to_addr = "1142190864@qq.com"# 输入SMTP服务器地址
# 此处根据不同的邮件服务商有不同的值,
# 现在基本任何一家邮件服务商,如果采用第三方收发邮件,都需要开启授权选项
# 腾讯qq邮箱所的smtp地址是 smtp.qq.comsmtp_srv = "smtp.qq.com"try:import smtplibsrv = smtplib.SMTP_SSL(smtp_srv.encode(), 465) #SMTP协议默认端口25#登录邮箱发送srv.login(from_addr, from_pwd)# 发送邮件# 三个参数# 1. 发送地址# 2. 接受地址,必须是list形式# 3. 发送内容,作为字符串发送srv.sendmail(from_addr, [to_addr], mail_mul.as_string())srv.quit()
except Exception as e:print(e)
**v10**
from email.mime.text import MIMEText
from email.header import Headermsg = MIMEText("Hello wold",  "plain", "utf-8")
# 下面代码故意写错,说明,所谓的发送者的地址,只是从一个Header的第一个参数作为字符串构建的内容
# 用utf8编码是因为很可能内容包含非英文字符
header_from = Header("从图灵学院邮箱发出去的<TuLingXueYuan@qq.cn>", "utf-8")
msg['From'] = header_from# 填写接受者信息
header_to = Header("去王晓静的地方<wangxiaojing@sina.com>", 'utf-8')
msg['To'] = header_toheader_sub = Header("这是图灵学院的主题", 'utf-8')
msg['Subject'] = header_sub# 构建发送者地址和登录信息
from_addr = "1142190864@qq.com"
from_pwd = "hjpovygcxmrshhcj"# 构建邮件接受者信息
to_addr = "1142190864@qq.com"smtp_srv = "smtp.qq.com"try:import smtplibsrv = 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 e:print(e)
**v11**
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地址,此处地址直接使用我的qq邮箱,密码临时输入
from_addr = "1142190864@qq.com"
#from_pwd = input('163邮箱密码: ')
from_pwd = "hjpovygcxmrshhcj"# 收件人信息:
# 此处使用我注册的163邮箱
to_addr = "1142190864@qq.com"# 输入SMTP服务器地址:
# 此地址根据每隔邮件服务商有不同的值,这个是发信邮件服务商的smtp地址
# 我用的是qq邮箱发送,此处应该填写腾讯qq邮箱的smtp值,即smtp.163.com,
# 需要开启授权码,
smtp_srv = "smtp.qq.com"try:import smtplib# 加密传输#server = smtplib.SMTP_SSL(smtp_srv.encode(), 465) # SMTP协议默认端口是25# qq邮箱要求使用 TLS加密传输server = smtplib.SMTP(smtp_srv.encode(), 25) # SMTP协议默认端口是25server.starttls()# 设置调试级别# 通过设置调试等级,可以清楚的看到发送邮件的交互步骤server.set_debuglevel(1)# 登录发送邮箱server.login(from_addr, from_pwd)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()
except Exception as e:print(e)

Python—网络编程_Mail相关推荐

  1. python网络编程--socket简单实现

    python网络编程                                                                                           ...

  2. python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03

    python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03 参考文章: (1)python网络编程-异常处理-异常捕获-抛出异常-断言-自 ...

  3. python编程入门指南怎么样-学习python网络编程怎么入门

    第一部分底层网络学习 Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活而强有力的功能. (1)基本客户端操作 在<python 网络编程基础>一 ...

  4. python编程实例下载-python网络编程之文件下载实例分析

    本文实例讲述了python网络编程之文件下载实现方法.分享给大家供大家参考.具体如下: 真是越看越喜欢python啊,想要了解它提供的http和ftp下载功能,原来是如此的简单. 1.相应模块 ftp ...

  5. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  6. python网络编程案例_Python 网络编程_python网络编程基础_python高级编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  7. python 网络编程 问题记录

    191223 python 网络编程 套接字的初使用 在本机配置服务端和客户端后,运行没问题:将服务端代码弄到另一台电脑上后启动,用原来的电脑去连接它,就连不上了,不知啥原因,是ip自动获取和指定ip ...

  8. python网络编程(苦肝一夜,近万字)

    文章目录 一.TCP/IP简介 二.网络设计模块 1.Socket简介 2.python中的socket模块,使用该模块建立服务器需要6个步骤. 1.创建socket对象. 2.将socket绑定(指 ...

  9. python网络编程证书_《Python网络编程基础》笔记

    python网络编程基础 ================== Author: lujun9972 Date: 2013-03-08 22:29:20 CST Table of Contents == ...

  10. Python 网络编程(Socket)

    Python 网络编程(Socket) 一.Socket 套接字 1.Socket 编程 socket本质是编程接口(API),对TCP/IP的封装,提供可供程序员做网络开发所用的接口.Socket ...

最新文章

  1. Ubuntu批量修改文件名后缀
  2. java打jar包,引用其他.jar文件
  3. 面向对象(下)知识点
  4. 浅谈MySQL数据库中的锁与事务
  5. 在vue项目中引用element-ui时 让el-input 获取焦点的方法
  6. 【干货下载】2020新基建展望:新战略、新动力、新格局.pdf(附下载链接)
  7. 【java笔记】线程(4):匿名内部类创建线程
  8. 2. PHP 编译安装
  9. 计算机网络发展史及分类,计算机网络发展史简介
  10. dilated conv带孔卷积、pooling层提高感受野 反卷积 的理解
  11. android CircleIndicator 实现引导页
  12. 大地水准面 地球椭球体 大地基准面 地图投影理解
  13. c语言程序设计教程+西安交通大学,大学C程序设计教程-西安交通大学.ppt
  14. Hexo+Github: 博客网站搭建完全教程(看这篇就够了)
  15. u盘提示格式化怎么解决?数据怎么找回?
  16. DataGrip 用鼠标控制Query console中字体缩放大小
  17. oracle数据库led显示屏,LED大屏幕设置软件
  18. 1.学生版阿里云简单配置和win7、win10专业版及win10家庭版的远程桌面的配置详解
  19. 以下选项中不是python对文件的写操作方法的是_以下选项中不是Python对文件的写操作方法的是:()-智慧树品三国,论领导艺术章节答案...
  20. 2019年迟来的总结--和医院不得不说的故事

热门文章

  1. java获取指定日期当月和下个月的第一天
  2. python抓取彩票数据_编写python爬虫采集彩票网站数据,将数据写入mongodb数据库...
  3. MySQL 自联结 自连接
  4. Keil:Undefined symbol ......(referred from......)解决
  5. 如何查看Windows11系统是否为永久激活?
  6. pygame之display模块
  7. 闽南歌歌词有一句电子计算机,一首闽南歌,有一句歌词是(提起男儿的志气)歌名是什么?...
  8. Kubernetes InitContainers模式
  9. 一个人最顶级的修养,不与烂人烂事纠缠
  10. 描述性统计-正态性检验(SPSS,SAS)P-P图,Q-Q图,直方图,KS检验