python 获取163 邮箱的邮件信息

news/2024/9/20 3:06:57/文章来源:https://www.cnblogs.com/zxr1002/p/18412124

此案例是是获取的一个亚马逊的验证码

import time
from imaplib import IMAP4_SSL
import imaplib,email,datetime
from lxml import etree
from dateutil.parser import parsedef str_to_unicode(s, encoding=None):return str(s, encoding) if encoding else str(s)def get_xpath(xpath, content):# xpath 工具out = []tree = etree.HTML(content)results = tree.xpath(xpath)for result in results:if 'ElementStringResult' in str(type(result)) or 'ElementUnicodeResult' in str(type(result)):out.append(result)else:out.append(etree.tostring(result))return outdef send_mail(now_time):max_retries = 5  # 最大重试次数retry_delay = 2  # 每次重试的间隔时间(秒)while True:status = 0sender = 'XXX'  # 邮箱password = 'XXX'  # 开启163邮箱的IMAP,获取授权码# 尝试连接 IMAP 服务器for attempt in range(max_retries):try:email_server = IMAP4_SSL(host='imap.163.com')breakexcept Exception as e:if attempt < max_retries - 1:print(f"连接失败,正在重试... (尝试 {attempt + 1}/{max_retries})")time.sleep(retry_delay)else:print("连接失败,已达到最大重试次数。")return Noneemail_server.login(user=sender, password=password)imaplib.Commands["ID"] = ('AUTH',)args = ("name", sender, "contact", sender, "version", "1.0.0", "vendor", "myclient")email_server._simple_command("ID", str(args).replace(",", "").replace("\'", "\""))email_server.select('INBOX', readonly=True)emaillist = email_server.search(None, 'UnSeen')emailist = emaillist[1][0].split()for unseen in reversed(emailist):status, emaildata = email_server.fetch(unseen, '(RFC822)')messages = email.message_from_string(emaildata[0][1].decode('utf-8'))date = datetime.datetime.strftime(parse(messages['Date']) + datetime.timedelta(hours=8),'%Y-%m-%d %H:%M:%S')print(date, now_time)if date >= now_time:status = 1passelse:time.sleep(3)print('暂未收到验证码!等待3秒后重试')email_server.close()email_server.logout()breakmessage_subject = email.header.decode_header(messages["Subject"])subject = str_to_unicode(message_subject[0][0], message_subject[0][1])if 'amazon.com' in subject or 'Account data access attempt' in subject:for data in messages.walk():if data.get_content_type() == 'text/html':charset = data.get_content_charset()data = data.get_payload(decode=True).decode(charset)code = str(get_xpath('/html/body/table/tbody/tr/td/table/tbody/tr[6]/td/p/text()', data)[0]).strip()email_server.close()email_server.logout()print(code)return codeelse:continueif status == 1:breaktime.sleep(3)if __name__ == '__main__':now_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')code = send_mail(now_time)print(code)
now_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')
code = send_mail(now_time)

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/796549.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支付宝携手HarmonyOS SDK打造高效便捷的扫码支付体验

背景 在日常的购物转账、生活缴费等在线支付中,用户在正式拉起支付界面前,均需要至少经历一次"识别"+两次"寻找",即识别归属应用、寻找应用、寻找扫码入口,才能完成扫码、付款,每一步都带来不同程度的用户流失。如何将步骤繁琐的扫码支付做到最简化,…

基于Java+Springboot+Vue开发的鲜花商城管理系统

项目简介该项目是基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学…

基于Java+Springboot+Vue开发的体育用品商城管理系统

项目简介该项目是基于Java+Springboot+Vue开发的体育用品商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的体育用品商城管理系统项目,大学生可以在…

基于Java+Springboot+Vue开发的口腔牙科诊所预约管理系统

项目简介该项目是基于Java+Springboot+Vue开发的口腔牙科诊所预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的口腔预约管理系统项目,大学生可以在…

南沙C++信奥老师解一本通题: 1212:LETTERS

​题目描述】给出一个rowcol的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。【输入】第一行,输入字母矩阵行数R和列数S,1≤R,S≤20。 接着输出R行S列字母矩阵。【输出】最多能走过的不同字母的个…

ubuntu 采用.run文件安装的cuda,升级版本,安装cudnn

cuda下载 https://developer.nvidia.com/cuda-downloadscudnn下载 https://developer.nvidia.com/rdp/cudnn-archive关闭docker服务 sudo systemctl stop docker.socket sudo systemctl stop docker sudo systemctl stop docker.service卸载,采用nvidia-smi官方给的卸载方法:…

终于有人把Modbus讲明白了5i

合集 - 上位机开发(2)1.终于有人把Modbus讲明白了09-132.RS485与ModbusRTU09-10:westworld加速收起 大家好!我是付工。 2012年开始接触Modbus协议,至今已经有10多年了,从开始的懵懂,到后来的顿悟,再到现在的开悟,它始终岿然不动,变化的是我对它的认知和理解。 今天跟大家…

WPF 实现一个吃豆豆的Loading加载动画

运行的效果如下 先引入一下我们需要的库在nuget上面搜一下"expression.Drawing",安装一下这个包我们再创建一个Window,引入一下这个包的命名空间我们设置一下这个加载动画呈现的窗体的样式xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing&quo…

[EGOI2024] Infinite Race题解

[EGOI2024] Infinite Race 妙妙题。 我们设 \(cnt[x]\) 表示当Anika和第 \(x\) 位选手相遇时Anika至少几次经过终点线。 设定初始状态 \(cnt[x]=-1\) 表示两种等价的情况:Anika还未和第 \(x\) 位选手相遇过 Anika被第 \(x\) 位选手超越了因此只剩下Anika超越了第 \(x\) 位选手…

仁科环境监控平台 温湿度采集 报错

應用程式: Monitor.exe Framework 版本: v4.0.30319 描述: 處理序已終止,因為有未處理的例外狀況。例外狀況資訊: System.AccessViolationException 於 Gecko.SpiderMonkey.JS_ExecuteScript_Win32(IntPtr, IntPtr ByRef, Gecko.MutableHandleValue ByRef) 於 Gecko.SpiderMon…

2024 ICPC复习 20-30页

https://www.luogu.com.cn/problem/CF1703G首先这个题一定要意识到 他是一个折半的操作 1e9最多被操作30次 所以我么完全dp第二维可以放这个次数 然后 dp数组就开出来了 时间复杂度也就明确了 对于某一个箱子 可以使用好钥匙打开也可以不用 用坏钥匙 好钥匙打开就是 dp i j=dp…

3、静态链表

1、静态链表初始化 head指向-1代表当前为空链表,pool指向下一个可用空间(在数组下标为2的空间),2指向3,3指向4,最后的指向0表示没有下一个节点,以此链接起来。2、实现代码#include<stdio.h> #include<malloc.h>#define MAX_SIZE 20typedef char ElemType;type…