Py网络基础编程 8_第1页
Py网络基础编程 8_第2页
Py网络基础编程 8_第3页
Py网络基础编程 8_第4页
Py网络基础编程 8_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机网络第10章电子邮件处理Python网络编程·邮件协议与自动化处理EmailProcessingwithPythonCONTENTS本章导学掌握电子邮件核心协议与Python编程实践01电子邮件协议SMTP、POP、IMAP三大核心协议的原理与应用02构造和解析电子邮件MIME格式、邮件结构与Python实现03Python邮件处理库标准库与第三方库的全景概览04邮件发送和接收自动化自动化脚本与通知系统的构建01PART01电子邮件协议SMTP、POP、IMAP三大核心协议的原理与应用10.1.1SMTP协议——邮件发送的标准简单邮件传输协议(SimpleMailTransferProtocol,SMTP)是互联网上发送电子邮件的标准协议,最早于1982年作为RFC821发布。核心功能:从邮件客户端向SMTP服务器发送邮件在SMTP服务器之间路由转发邮件支持群发邮件(多个RCPTTO命令)SMTP加密方式对比特性SMTPSSTARTTLS加密时机连接建立即加密发送STARTTLS后加密端口465587兼容性需要SMTPS支持兼容普通SMTP关键提示:几乎所有发送电子邮件的行为都通过SMTP完成。SMTP解决了不同邮件系统间的互操作性问题,使得Gmail用户可以轻松向YahooMail用户发送邮件。04常用端口:端口25:标准SMTP端口(明文传输)端口465:SMTPS(全程SSL/TLS加密)端口587:STARTTLS(动态升级加密)10.1.1SMTP工作流程与传输安全SMTP五步工作流程连接建立TCP连接SMTP握手HELO/EHLO邮件发送MAILFROM/RCPTTO数据传输DATA命令QUIT退出邮件传输安全性保障身份验证使用AUTHLOGIN或AUTHPLAIN命令进行身份验证,客户端需提供用户名和密码SMTPS/STARTTLSSMTPS全程SSL/TLS加密;STARTTLS在已建立连接上动态启用TLS加密保护数据完整性TLS加密保护数据不被篡改,确保邮件在传输过程中保持完整性#Python代码示例·使用smtplib发送邮件importsmtplibfromemail.mime.textimportMIMEText#创建邮件内容msg=MIMEText('正文','plain','utf-8');msg['Subject']='主题';msg['From']='发件人';msg['To']='收件人'#建立SMTP连接server=smtplib.SMTP('',25)server.starttls()#如果需要TLS加密则调用此方法server.login('username@','password')#登录认证#发送邮件server.sendmail(¹发件人邮箱',['收件人邮箱'],msg.as_string())#断开连接server.quit()0510.1.2POP3协议——邮件接收的基础邮局协议(PostOfficeProtocol,POP)于1984年作为RFC918提出,当前广泛使用的版本是POP3。POP3允许用户通过邮件客户端从远程服务器下载邮件到本地设备查看和管理,默认下载后从服务器删除邮件。POP3工作流程连接服务器TCP:110/995身份认证USER+PASS交互操作LIST/RETR/DELEPOP3核心特点简单高效:协议相对简单,易于实现和使用离线访问:邮件下载到本地,无网络也能阅读节省空间:下载后删除服务器副本,但无法多设备同步适用场景:带宽有限或需要本地备份的情况Pythonpoplib示例server=poplib.POP3_SSL('');server.user('username');server.pass_('password')msg_count=server.stat()[0];resp,lines,octets=server.retr(msg_count)0610.1.2POP3协议——邮件接收的基础Pythonpoplib示例importpoplibfromemail.parserimportParser#邮件服务器地址和端口pop3_server=''pop3_port=110#用户名和密码username='your-username'password='your-password'#连接到POP3服务器server=poplib.POP3(pop3_server,pop3_port)server.set_debuglevel(1)#可以设置调试级别以打印通信过程#身份认证server.user(username)server.pass_(password)#获取邮件统计信息messages_count,messages_size=server.stat()print('邮件数:%s.总大小:%s’%(messages_count,messages_size))07#获取邮件列表resp,mails,octets=server.list()#获取最新一封邮件,注意索引号从1开始index=len(mails)resp,lines,octets=server.retr(index)#lines存储了邮件的原始文本的每一行msg_content=b'\r\n'.join(lines).decode('utf-8')#解析邮件msg=Parser().parsestr(msg_content)#可以根据邮件索引号直接从服务器删除邮件:#server.dele(index)#关闭连接server.quit()10.1.3IMAP协议——邮件管理的高级方案互联网消息访问协议(InternetMessageAccessProtocol,IMAP)于1986年作为RFC1064发布,旨在克服POP协议的限制。IMAP允许用户在邮件服务器上保留和管理邮件,支持多设备同步,已成为现代邮件客户端的首选协议。灵活性支持部分下载邮件内容,例如只下载邮件头部或指定部分,有效节省带宽和时间多设备同步邮件在服务器上保持同步,用户可在任何设备查看相同的邮件状态(已读/未读/标记)服务器端管理支持创建/删除/重命名文件夹,对邮件进行复制、移动和标记等操作,端口143/993IMAP工作流程连接服务器TCP:143/993身份认证LOGIN邮件操作搜索/获取/标记邮件同步状态保持一致LOGOUT断开连接0810.1.3IMAP协议——邮件管理的高级方案09importimaplibimportemail#邮件服务器地址和端口imap_server=''imap_port=993#用户名和密码username='your-username'password='your-password'#连接到IMAP服务器mail=imaplib.IMAP4_SSL(imap_server,imap_port)#身份认证mail.login(username,password)#选择邮箱mail.select('inbox')#搜索邮件result,data=mail.search(None,'ALL')#获取邮件列表mail_ids=data[0]id_list=mail_ids.split()#获取最新一封邮件的信息latest_email_id=id_list[-1]result,data=mail.fetch(latest_email_id,'(RFC822)')#解析邮件内容raw_email=data[0][1]email_message=email.message_from_bytes(raw_email)#关闭选择的邮箱mail.close()#断开连接mail.logout()10.1三大邮件协议对比对比维度SMTPPOP3IMAP功能定位发送邮件接收/下载邮件接收/管理邮件标准端口25/465/587110/995143/993工作模式推送模式:客户端→服务器拉取模式:下载到本地在线模式:服务器端管理邮件存储不存储,只转发默认下载后删除服务器保留,多设备同步加密支持SMTPS/STARTTLSPOP3_SSLIMAP4_SSL适用场景所有发件场景简单检索、本地备份多设备、高级管理核心结论:SMTP负责发送,POP3/IMAP负责接收。现代邮件系统通常组合使用SMTP+IMAP,兼顾发送能力和多设备同步管理。1002PART02构造和解析电子邮件MIME格式、邮件结构与Python实现10.2.1MIME格式与邮件结构MIME(MultipurposeInternetMailExtensions,多用途互联网邮件扩展)是电子邮件的扩展标准,支持非ASCII文本、多媒体附件、HTML内容等多种数据类型。MIME类型由类型/子类型组成,通过Content-Type头部字段指定:MIME类型用途说明text/plain纯文本内容text/htmlHTML格式邮件正文multipart/mixed混合不同类型内容(含附件)multipart/alternative同一内容的不同表示形式邮件结构类型简单文本邮件使用text/plainMIME类型的基本邮件,仅包含文本内容,结构最简单多部分邮件包含多个不同MIME类型的部分,每个部分有自己的Content-Type,如同时包含纯文本和HTML版本带附件邮件使用multipart/mixed类型,可包含一个或多个附件,每个附件作为邮件的一个独立部分关键头部字段:MIME-Version|Content-Type|Content-Transfer-Encoding1210.2.2构造复杂邮件(文本+HTML+附件)五步构造流程Step1创建MIMEMultipart顶层容器对象Step2添加文本和HTMLMIMEText对象Step3添加附件MIMEBase+Base64Step4设置头部字段Subject/From/ToStep5转换为字符串Python代码示例·构造带附件的复杂邮件fromemail.mime.multipartimportMIMEMultipart;fromemail.mime.textimportMIMEText;fromemail.mime.baseimportMIMEBasemsg=MIMEMultipart();msg['Subject']='邮件主题';msg['From']='sender';msg['To']='recipient'msg.attach(MIMEText('纯文本内容','plain'));msg.attach(MIMEText('<html>...</html>','html'))attachment=MIMEBase('application','octet-stream')with

open('file.pdf','rb')asf:attachment.set_payload(f.read())fromemailimportencoders;encoders.encode_base64(attachment)attachment.add_header('Content-Disposition','attachment;filename="file.pdf"')msg.attach(attachment)1310.2.3解析和处理邮件内容解析邮件是处理电子邮件的关键步骤。邮件以原始文本形式接收,包含头部信息、编码后的正文和附件。解析过程将这些原始文本转换为可操作的对象。四步解析流程1创建Message对象Parser/BytesParser2遍历MIME各部分msg.walk()方法3按Content-Type处理区分文本/HTML/附件4解码与保存输出内容Python代码示例·解析邮件并处理各部分fromemail.parserimportBytesParser;fromemailimportpolicymsg=BytesParser(policy=policy.default).parsebytes(email_bytes)forpartinmsg.walk():ctype=part.get_content_type();disp=part.get('Content-Disposition')ifctype=='text/plain'

and

'attachment'

notindisp:#处理纯文本elif

'attachment'

indisp:filename=part.get_filename();open(filename,'wb').write(part.get_payload(decode=True))1403PART03Python中的电子邮件处理库标准库与第三方库的全景概览10.3.1/10.3.2Python标准库邮件模块smtplibSMTP客户端会话SMTP类:封装SMTP连接和操作sendmail():发送邮件starttls():启动TLS加密SMTPException异常处理email邮件消息管理message类:邮件对象表示MIME子模块:创建各类MIME部分Parser/BytesParser:解析邮件header模块:头部编码解码poplibPOP3协议客户端POP3/POP3_SSL类user()/pass_():登录认证stat()/list()/retr():获取邮件dele()/quit():删除和断开imaplibIMAP协议客户端IMAP4/IMAP4_SSL类select()/search():选择和搜索fetch():检索邮件数据store():更改标记状态1610.3.3第三方邮件处理库除了Python标准库,众多第三方库提供了更简洁的API和更丰富的功能,可大幅提升邮件处理效率。发送yagmail简化SMTP发送过程,特别是Gmail用户。消除smtplib的复杂性,提供更直观的API解析mail-parser解析原始邮件的库,可提取邮件头、正文、附件,提供简单方法处理邮件数据IMAPimapclient易于使用的IMAP库,提供Pythonic接口访问IMAP服务器,比标准库imaplib更易用HTMLpremailer将CSS样式内联到HTML元素中,大多数邮件客户端不支持外部样式表,此库非常实用验证email-validator验证和解析电子邮件地址,确保格式正确,可提取本地部

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论