Python—网络编程

it2022-05-05  130

案例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解析邮件的具体内容 案例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.com smtp_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 MIMEText mail_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'" # 添加到MIMEMultipart mail_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.com smtp_srv = "smtp.qq.com" try: import smtplib 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], mail_mul.as_string()) srv.quit() except Exception as e: print(e) **v10** from email.mime.text import MIMEText from email.header import Header msg = 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_to header_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 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 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协议默认端口是25 server.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)

最新回复(0)