8.2.1---Python入门之邮箱登录查询
2021/4/24 1:25:16
本文主要是介绍8.2.1---Python入门之邮箱登录查询,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
''' 思路: 1.收件邮箱地址: pop.qq.com(端口:110) [收件地址] 2.账户密码: 3.接收邮件的类库包: import poplib 4.登录邮件服务器: 5.获取数据 [将获取的数据,按照指定格式进行解析,得到自己相要的数据] 6.解析目标邮件: ==============邮箱服务器地址================ QQ邮箱: POP3服务器地址:pop.qq.com(端口:110) [收件地址] SMTP服务器地址:smtp.qq.com (端口:25)[发件地址] 腾讯企业邮箱: POP3/SMTP协议: 接收邮件服务器:pop.exmail.qq.com (端口 110),使用SSL,端口号995 [收件地址] 发送邮件服务器:smtp.exmail.qq.com (端口 25),使用SSL,端口号465或587 [发件地址] IMAP协议: 接收邮件服务器:imap.exmail.qq.com (端口 143),使用SSL,端口号993 发送邮件服务器:smtp.exmail.qq.com (端口 25),使用SSL,端口号465或587 ============================== ''' #!/usr/bin/env python3 # -*- coding: utf-8 -*- ########################################## ### 一. 登录邮箱服务器的准备 ## ## 1.收件邮箱地址: import poplib from email.header import decode_header from email.parser import Parser from email.utils import parseaddr server_info = "pop.qq.com" ## 2.账户密码: user = "登录的邮箱地址" pwd = "Password" ########################################## ### 二. 连接邮箱 ## ## 1.创建邮箱服务器连接: [poplib是登录邮箱服务器的包,需要导包] ## 调用方法 .POP3(self, host="邮箱服务器的收件地址", port=POP3_PORT,(POP3_PORT默认值110) ## timeout=socket._GLOBAL_DEFAULT_TIMEOUT) ## 进行邮箱服务器的连接基本信息绑定: client = poplib.POP3(host=server_info,port=110) ## port可不填,默认值就是110 ## 2.登录服务器: client.user(user=user) client.pass_(pswd=pwd) ## 3.获取邮件信息: ## 3.1 通过list 方法,获取所有的邮件信息 ,得到本次请求可以获取到多少个邮件 # resp : 状态信息,有多少封邮件 # list : 返回每一份邮件,以及邮件大小 # octets: 邮件字节 resp, list, octets = client.list() # print(resp) # print(list) # print(octets) ## 3.2 获取最后一封邮件的信息 用lin方法,得到list中总共有多少邮件,并获取最后一个 ## 此处 the_mail的值是 bytes 字节类型 .该类型需要转换为String类型进行处理 the_mail= client.retr(len(list)-1)[1] # print(the_mail) # 打印下刚拿到邮件时的信息 ## 3.3 解析邮件 ### 3.3.1 [这里在对 bytes 字节类型转String时,需要将每个元素用分隔符\r,换行符\n 进行分隔,否则工具类无法识别] mail_str = b'\r\n'.join(the_mail).decode('utf-8') # print(mail_str) # 打印下对邮件进行字Bytes转String后的格式,指定分隔; ### 3.3.2 导入工具类:Parser, 对邮件进行解析,(输入文件或字符串) message = Parser().parsestr(mail_str) ### 3.3.2.1 得到发件人 : message.get("From") 即得到标题:谁发的,返回一个tuple元组("发件人","email地址") ### 3.3.2.1.1 将字符串转为tuple 方法: parseaddr() # 将addr解析为其组成的realname和email地址部分。 # 返回一个实名和电子邮件地址的元组,除非解析失败,在 # 这种情况下返回一个二元组(",") from_tuple = parseaddr(message.get("From")) print("from_email: ", from_tuple[1]) ## 获取索引位为1的信息,得到发件人的邮箱; ### 3.3.2.1.2 调用标题解析方法:decode_header() ;对得到的标题tuple 值进行编码解析,(解码消息头值而不转换字符集): # 返回一个list列表,["字符串"、"字符集"] from_name_list = decode_header(from_tuple[0])[0] print("原字符编码: ", from_name_list[1]) from_name = from_name_list[0].decode('utf-8') ## 获取索引位为0的字符串信息,谁发的邮件,并指定字符编码; print("from_name: ", from_name) ## 打印谁发的邮件 ### 3.3.2.2 得到收件人 to_tuple = parseaddr(message.get("To")) ### 3.3.2.2.1 调用标题解析方法:decode_header() to_tuple_list = decode_header(to_tuple[0])[0] to_name = to_tuple_list[0]#.decode("utf-8") ## 获取索引位为0的字符串信息,谁发的邮件,并指定字符编码;[注意:只有命名是中文时才能指定字符集,否则报错] print("to_name: ", to_name) ## 打印发给谁的邮件 print("to_email: ", to_tuple[1]) ## 获取索引位为1的信息,得到发件人的邮箱; ### 3.3.2.3 得到标题 print(message.get("Subject")) ### 3.3.2.4 得到内容 ## get_payload() 方法默认会对文章内容进行解析,即decode ## 如果不需要默认解析,则设置(decode=True),表示需要自定义解析,并指定字符编码即可. print(message.get_payload(decode=True).decode('utf-8'))
这篇关于8.2.1---Python入门之邮箱登录查询的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python