Python—网络编程_Mail
案例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, 学生,上海江岸区
流程
- MUA->MTA, 邮件已经在服务器上了
- qq MTA->…->sina MTA, 邮件在新浪的服务器上
- sina MTA-> sina MDA, 此时邮件已经在你的邮箱里了
- 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下载下来的是一个完整的邮件结构体,需要解析才能得到每个具体可读的内容
- 步骤:
- 用poplib下载邮件结构体原始内容
- 准备相应的内容(邮件地址,密码,POP3实例)
- 身份认证
- 一般会先得到邮箱内邮件的整体列表
- 根据相应序号,得到某一封信的数据流
- 利用解析函数进行解析出相应的邮件结构体
- 用email解析邮件的具体内容
- 用poplib下载邮件结构体原始内容
- 案例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相关推荐
- python网络编程--socket简单实现
python网络编程 ...
- python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03
python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03 参考文章: (1)python网络编程-异常处理-异常捕获-抛出异常-断言-自 ...
- python编程入门指南怎么样-学习python网络编程怎么入门
第一部分底层网络学习 Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活而强有力的功能. (1)基本客户端操作 在<python 网络编程基础>一 ...
- python编程实例下载-python网络编程之文件下载实例分析
本文实例讲述了python网络编程之文件下载实现方法.分享给大家供大家参考.具体如下: 真是越看越喜欢python啊,想要了解它提供的http和ftp下载功能,原来是如此的简单. 1.相应模块 ftp ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...
- python网络编程案例_Python 网络编程_python网络编程基础_python高级编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- python 网络编程 问题记录
191223 python 网络编程 套接字的初使用 在本机配置服务端和客户端后,运行没问题:将服务端代码弄到另一台电脑上后启动,用原来的电脑去连接它,就连不上了,不知啥原因,是ip自动获取和指定ip ...
- python网络编程(苦肝一夜,近万字)
文章目录 一.TCP/IP简介 二.网络设计模块 1.Socket简介 2.python中的socket模块,使用该模块建立服务器需要6个步骤. 1.创建socket对象. 2.将socket绑定(指 ...
- python网络编程证书_《Python网络编程基础》笔记
python网络编程基础 ================== Author: lujun9972 Date: 2013-03-08 22:29:20 CST Table of Contents == ...
- Python 网络编程(Socket)
Python 网络编程(Socket) 一.Socket 套接字 1.Socket 编程 socket本质是编程接口(API),对TCP/IP的封装,提供可供程序员做网络开发所用的接口.Socket ...
最新文章
- Ubuntu批量修改文件名后缀
- java打jar包,引用其他.jar文件
- 面向对象(下)知识点
- 浅谈MySQL数据库中的锁与事务
- 在vue项目中引用element-ui时 让el-input 获取焦点的方法
- 【干货下载】2020新基建展望:新战略、新动力、新格局.pdf(附下载链接)
- 【java笔记】线程(4):匿名内部类创建线程
- 2. PHP 编译安装
- 计算机网络发展史及分类,计算机网络发展史简介
- dilated conv带孔卷积、pooling层提高感受野 反卷积 的理解
- android CircleIndicator 实现引导页
- 大地水准面 地球椭球体 大地基准面 地图投影理解
- c语言程序设计教程+西安交通大学,大学C程序设计教程-西安交通大学.ppt
- Hexo+Github: 博客网站搭建完全教程(看这篇就够了)
- u盘提示格式化怎么解决?数据怎么找回?
- DataGrip 用鼠标控制Query console中字体缩放大小
- oracle数据库led显示屏,LED大屏幕设置软件
- 1.学生版阿里云简单配置和win7、win10专业版及win10家庭版的远程桌面的配置详解
- 以下选项中不是python对文件的写操作方法的是_以下选项中不是Python对文件的写操作方法的是:()-智慧树品三国,论领导艺术章节答案...
- 2019年迟来的总结--和医院不得不说的故事
热门文章
- java获取指定日期当月和下个月的第一天
- python抓取彩票数据_编写python爬虫采集彩票网站数据,将数据写入mongodb数据库...
- MySQL 自联结 自连接
- Keil:Undefined symbol ......(referred from......)解决
- 如何查看Windows11系统是否为永久激活?
- pygame之display模块
- 闽南歌歌词有一句电子计算机,一首闽南歌,有一句歌词是(提起男儿的志气)歌名是什么?...
- Kubernetes InitContainers模式
- 一个人最顶级的修养,不与烂人烂事纠缠
- 描述性统计-正态性检验(SPSS,SAS)P-P图,Q-Q图,直方图,KS检验