python 获取163 邮箱的邮件信息
此案例是是获取的一个亚马逊的验证码
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 邮箱的邮件信息的更多相关文章
- mailx加163邮箱发邮件
mailx加163邮箱发邮件 参考:https://www.cnblogs.com/myvic/p/9579954.html 配置 $ yum install mailx -y $ vim /etc/ ...
- python webdriver 登录163邮箱发邮件加附件, 外加数据和程序分离,配置文件的方式
配置文件:UiObjectMapSendMap.ini用来存放配置信息 GetOptionSendMail.py 用来读取配信息 #encoding=utf-8from selenium.webdri ...
- python通过163邮箱发送邮件
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib i ...
- python获取esxi的磁盘使用率信息
#!/usr/bin/python3 #coding:utf-8 #Author: ziming """ 只用于模拟开发功能测试 """ f ...
- python 向qq邮箱发邮件
#coding:utf-8 ''' Created on 2017-1-12 @author: xiaochun ''' import smtplib from email.mime.text imp ...
- python使用网易邮箱发邮件
# -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText import email.mime.multip ...
- 使用Python获取Linux系统的各种信息
哪个Python版本? 当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3 (3.3)上是不工作的,以及提供一份解释不同之处的备选代码 ...
- 转:python获取linux系统及性能信息
原文:http://amitsaha.github.io/site/notes/articles/python_linux/article.html In this article, we will ...
- 用python写的自动转发邮件信息模板
# -*- coding:utf-8 -*- #加密东西 def decrypt(key, s): c = bytearray(str(s).encode("gbk")) n = ...
- python 获取安装包apk, ipa 信息
# -*- coding:utf-8 -*- import re import os import zipfile from biplist import * from androguard.core ...
随机推荐
- odoo里面的动作
来源:Odoo中的五种action都是继承自ir.actions.actions模型实现的子类,共有五种,下面会一个一个给出具体例子 1.链接Action(ir.actions.act_url):ta ...
- Visio画图心得
关于Visio画图时的心得 1.关于对齐 我之前常常是在visio中视图里打开网格,然后根据网格来对齐框框,但是其实网格旁边的参考线用于对齐更好用. 首先,打开在视图选项卡里勾上参考线. 然后因为要根 ...
- 如何使用MCP开发一个客户端和服务端
如何使用MCP开发一个客户端和服务端 一.MCP和API以及Function Call核心概念对比 特性 API Function Call MCP (Model Context Protocol) ...
- vue中使用axios获取到的Promise {<pending>}数据,无法使用的问题
使用axios拿到后端数据后 返回的是 Promise {} 我们可以看到数据是在[[PromiseResult]]这个Object对象中 此时我们是无法获取对象的 解决方法:使用async和awai ...
- opencv学习:学习如何对图像进行缩放、剪切、移位等处理
又是每周一次的坑爹OPENCV!加油奥里给! 1.图像缩放--直接调用函数操作 Mat img = imread("E:/lena.jpg"); int img_cols = im ...
- Golang基础笔记二之字符串及其操作
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记二之字符串及其操作 这一篇笔记主要介绍 Golang 字符串相关处理,以下是本篇笔记目录: 字符串的定义和初始化 字符 字符串操作 1 ...
- 基于注解实现 SpringBoot 接口限流
编写注解类 import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java. ...
- 05 - Multitouch/RoutedEvents例子
文中例子是基于wpf Canvas写的,由于Maui还没有支持Canvas,所以顺手自己写一个.之前写了一个InkCanvas,发现扩展性太差了,这次写这个Canvas,支持自定义碰撞测试等.自己写的 ...
- 内网环境下Go module的包管理和包拉取解决方案
前言 很多开发的小伙伴在工作中经常会遇到需要在内网环境下开发生产,因此就必须要解决内网环境下Go语言的包管理和包拉取问题.恰逢我现在公司就需要在内网环境下开发新项目,因此在此记录我们内网环境下Go m ...
- Python 潮流周刊#110:JIT 编译器两年回顾,AI 智能体工具大爆发(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...