首页 > 编程语言 >python 获取163 邮箱的邮件信息

python 获取163 邮箱的邮件信息

时间:2024-09-13 14:23:59浏览次数:10  
标签:now python datetime str time 邮箱 server email 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)

image

标签:now,python,datetime,str,time,邮箱,server,email,163
From: https://www.cnblogs.com/zxr1002/p/18412124

相关文章

  • Python第五章节——函数
    函数是组织好的,可重复使用的,用来实现特定功能的代码段一.自定义my_len函数实现对字符串中字符数量的统计二.函数的定义1.定义方式:def函数名(传入参数):    函数体    return返回值2.调用方式:函数名(参数)注意:1.如果不需要参数,那么可以对其进......
  • Python第四章节——循环语句
    学习循环语句的原因:循环在程序中和判断一样广泛存在,同样是非常多功能实现的基础一.while循环1.while循环的使用方法:while条件:    条件满足时完成的事件1    条件满足时完成的事件2    条件满足时完成的事件3    ...注意:1.只要条......
  • Python爬虫代理运行出错?解决办法在这里!
    在进行Python爬虫开发时,使用代理IP是常见的做法,特别是在需要大量请求目标网站时,代理IP可以有效地防止IP被封禁。然而,在实际操作中,使用代理IP往往会遇到各种问题和错误。本文将带你了解常见的Python爬虫代理运行出错的原因,并提供解决办法。常见的代理IP运行错误在使用代理IP进......
  • 1.1 Python基础
    1.1.1 推导式列表given_list=[0,1,2,3,4]given_list输出:[0,1,2,3,4]定义函数defmy_func(x):returnx**2new_list=[]foriinrange(5):new_list.append(my_func(i))new_list输出[0,1,4,9,16] 以上例子可以简化为......
  • 如何通过Python SDK 获取Collection
    本文介绍如何通过PythonSDK获取已创建的Collection对象。说明通过Collection对象,后续可进行Doc相关操作,如插入Doc、检索Doc、管理Partition等前提条件已创建Cluster:创建Cluster。已获得API-KEY:API-KEY管理。已安装最新版SDK:安装DashVectorSDK。接口定义Python......
  • 用Python实现时间序列模型实战——Day 19: 时间序列中的异常检测与处理
    一、学习内容1.时间序列中的异常检测方法在时间序列分析中,异常检测是识别时间序列中不同于正常行为的点。这些异常点可能是由于数据记录错误、极端事件或系统故障引起的,常见的异常检测方法包括:基于统计的方法:Z-score:计算每个数据点与其均值的标准差距离,判断其是否为异常......
  • Python 虚拟环境管理
    在另外一篇文章已经讲了Python版本管理。本文主要讲Python虚拟环境管理。有了这两个方面的工具,就可以实现在Python的不同版本不同虚拟环境间方便地切换。pyenv-virtualenv一般会随pyenv一起安装,也可以通过下文方式独立安装。什么是虚拟环境一种采用协作式隔离的运......
  • CTF/5/利用python自动请求网页
    最后编辑时间:2024-09-1309:23:09星期五利用python自动请求网页(面向CTF)前置知识:PythonHTMLBurp(或者任何一个你趁手的抓包软件)VSCode(或者任何一个你熟悉的编辑器)浏览器开发者模式(F12)POST请求和GET请求shell/cmd使用搭建web服务器基础为什么我们需要利用python来进......
  • Python与Go语言中的哈希算法实现及对比分析
    哈希算法是一种将任意大小的数据输入转化为固定大小的输出(通常为一个散列值)的算法,在密码学、数据完整性验证以及数据索引等场景中广泛应用。本文将详细介绍Python和Go语言如何实现常见的哈希算法,包括MD5、SHA-1、SHA-256等。文章不仅提供代码示例,还会详细解释每个算法的特点、应用......
  • Python 基础语法 06 包 模块
    模块概述模块是Python中一个包含Python代码的文件,通常以.py为扩展名。模块可以包含函数、类和变量,也可以包含可执行的代码。模块的主要作用是组织和封装代码,以便于重用和维护。导入模块的5种方式import模块名导入模块下所有的功能(函数、类等),但必须通过模块名.功能名()的......