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

import time
from imaplib import IMAP4_SSL
import imaplib,email,datetime
from lxml import etree
from dateutil.parser import parse def 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 out def send_mail(now_time):
max_retries = 5 # 最大重试次数
retry_delay = 2 # 每次重试的间隔时间(秒)
while True:
status = 0
sender = 'XXX' # 邮箱
password = 'XXX' # 开启163邮箱的IMAP,获取授权码
# 尝试连接 IMAP 服务器
for attempt in range(max_retries):
try:
email_server = IMAP4_SSL(host='imap.163.com')
break
except Exception as e:
if attempt < max_retries - 1:
print(f"连接失败,正在重试... (尝试 {attempt + 1}/{max_retries})")
time.sleep(retry_delay)
else:
print("连接失败,已达到最大重试次数。")
return None
email_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 = 1
pass
else:
time.sleep(3)
print('暂未收到验证码!等待3秒后重试')
email_server.close()
email_server.logout()
break
message_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 code
else:
continue
if status == 1:
break
time.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)

python 获取163 邮箱的邮件信息的更多相关文章

  1. mailx加163邮箱发邮件

    mailx加163邮箱发邮件 参考:https://www.cnblogs.com/myvic/p/9579954.html 配置 $ yum install mailx -y $ vim /etc/ ...

  2. python webdriver 登录163邮箱发邮件加附件, 外加数据和程序分离,配置文件的方式

    配置文件:UiObjectMapSendMap.ini用来存放配置信息 GetOptionSendMail.py 用来读取配信息 #encoding=utf-8from selenium.webdri ...

  3. python通过163邮箱发送邮件

    from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib i ...

  4. python获取esxi的磁盘使用率信息

    #!/usr/bin/python3 #coding:utf-8 #Author: ziming """ 只用于模拟开发功能测试 """ f ...

  5. python 向qq邮箱发邮件

    #coding:utf-8 ''' Created on 2017-1-12 @author: xiaochun ''' import smtplib from email.mime.text imp ...

  6. python使用网易邮箱发邮件

    # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText import email.mime.multip ...

  7. 使用Python获取Linux系统的各种信息

    哪个Python版本? 当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3 (3.3)上是不工作的,以及提供一份解释不同之处的备选代码 ...

  8. 转:python获取linux系统及性能信息

    原文:http://amitsaha.github.io/site/notes/articles/python_linux/article.html In this article, we will ...

  9. 用python写的自动转发邮件信息模板

    # -*- coding:utf-8 -*- #加密东西 def decrypt(key, s): c = bytearray(str(s).encode("gbk")) n = ...

  10. python 获取安装包apk, ipa 信息

    # -*- coding:utf-8 -*- import re import os import zipfile from biplist import * from androguard.core ...

随机推荐

  1. FastAPI与MongoDB分片集群:异步数据路由与聚合优化

    title: FastAPI与MongoDB分片集群:异步数据路由与聚合优化 date: 2025/05/26 16:04:31 updated: 2025/05/26 16:04:31 author ...

  2. web ctf日记

    X-Forworded-For:从本地访问 Refer:从**网址访问 一句话木马:`<?php @eval($_POST['a']);?>` eval将a作为PHP程序post进入(用蚁 ...

  3. C#学习:构建一个更真实的基于LLM的简历评估系统

    前言 昨天的Demo以txt文件为例进行说明,并且评估标准写死了,跟真实的简历评估系统差别太大了.今天分享的是经过改进后更加真实的基于LLM的简历评估系统. 使用AI生成了5份不同的简历,如下所示: ...

  4. wso2~自定义event-publisher

    自定义event/publishers的步骤 介绍 event/publishers功能位于carbon平台的event菜单,选择publishers菜单项即可打开发布者配置列表,你可以添加自定义的发 ...

  5. Qt 图片轮播

    最近研究了一下图片轮播,主要是用到了QPropertyAnimation这个类,具体代码示例如下: main.cpp #include <QApplication> #include &q ...

  6. 洛谷 P1416 攻击火星 排版重构

    洛谷 P1416 攻击火星 原题P1416 Update 20210307 修复了挂掉的图片 20210307 重构排版 Solution understand 首先,你弄明白了什么是度吗? 一个点的 ...

  7. 玩转AI新声态 | 玩转TTS/ASR/YuanQI 打造自己的AI助手

    前言 halo, 各位佬友这是我24年写的整理一下发出来, 可能有点老了, ai发展这么快...... 本次带来的是腾讯云玩转AI新声态语音产品应用实践,利用 TTS / ASR / 元器智能体 打造 ...

  8. 数栈技术分享:详解FlinkX中的断点续传和实时采集

    数栈是云原生-站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变 ...

  9. stm32 单片机主要优点有哪些?

    STM32单片机主要优点有哪些?一个十年嵌入式老兵的深度剖析 看到这个问题,我不禁想起了十年前那个拿着STM32开发板发愁的自己.作为一个本硕都是机械专业,却误打误撞进入嵌入式领域的过来人,从24岁在 ...

  10. Windows下Gitlab多账号配置(SSH)终极解决方案

    多 Git 账号管理(SSH 模式) 动机: 我在使用多个 Git 账号时经常遇到麻烦:每次切换账号都要重新登录,尤其是在浏览器中进行身份验证时,问题更明显.我的默认浏览器是 Edge,而 GitHu ...