首页 > 其他分享 >收邮件

收邮件

时间:2022-10-14 16:44:06浏览次数:42  
标签:uids self imap 邮件 email select

# -*- coding: utf-8 -*-
# @Author  : 107
# @File    : emaildriver.py
# @explain : 收邮件
import json
import re
import smtplib
import email
import time
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
import imaplib

import os
class CheckEmail:
def __init__(self, username, token, server, emails_path):
"""
:param sender: 邮箱账号
:param sender_token: 邮箱令牌(当时申请smtp给的口令)
:param server: 邮件服务器地址
:param emails_path: 保存原文件的位置[文件夹](原文件:未经处理的邮件内容,txt格式)
"""
self.username = username
self.token = token
self.server = server
self.emails_path = emails_path
self.email_uids = []

def login(self):
_ = self
"""登录"""
# 连接
imap = imaplib.IMAP4_SSL(host=self.server)
# 登录
imap.login(self.username, self.token)
return imap

def select(self, imap):
_ = self
"""查询邮件"""
imaplib.Commands['ID'] = ('AUTH')
args = ("name", "zhang3", "contact", f"{self.username}", "version", "2.58", "vendor", "myclient")
ID_type, ID_result = imap._simple_command('ID', '("' + '" "'.join(args) + '")')
# print(imap._untagged_response(ID_type, ID_result, 'ID'))

# inbox = imap.select('"INBOX"')[-1][0].decode('utf-8') # 收到的邮件总数
# already_inbox = imap.select('"INBOX"', readonly=True)[-1][0].decode('utf-8') # 收到的邮件总数
# sent = imap.select('"Sent Items"')[-1][0].decode('utf-8') # 发送的邮件总数
# trash = imap.select('"Trash"')[-1][0].decode('utf-8') # 垃圾消息
# print(f"收到的邮件总数:{inbox},已读邮件总数:{already_inbox},发送的邮件总数:{sent},垃圾消息{trash}")
imap.select('INBOX', readonly=True)
# state, result = imap.search(None, 'ALL') # 返回一个元组,data为此邮箱的所有邮件数据
state, result = imap.uid("search", None, 'ALL') # 返回一个元组,data为此邮箱的所有邮件的uid
return state, result

def save(self, single):
_ = self
"""存储邮件内容"""
for response in single[-1]:
if isinstance(response, tuple):
# content = response[1].decode('utf-8')
# msg = email.message_from_string(content)
file_name = f"{time.time()}.txt"
print(f"邮件名:{file_name}")
path = os.path.join(self.emails_path, file_name)
with open(path, "wb") as w:
w.write(response[1])

def run(self):
"""
:return: 返回所有邮件的id
"""
imap = self.login()
print("登陆成功")
select_state, select_result = self.select(imap)
print(select_state, select_result)
if select_state == "OK":
email_uids = select_result[0].split(b' ')
email_uids = [i for i in email_uids if i]
self.email_uids = email_uids
# email_uids = [i for i in email_uids if i][1::-1]
email_number = len(email_uids)
for i in range(email_number):
uid = email_uids[i]
print(f"邮件uid:{uid}")
single = imap.uid("fetch", uid, "(BODY.PEEK[] FLAGS)")
self.save(single)
return self.email_uids

 

标签:uids,self,imap,邮件,email,select
From: https://www.cnblogs.com/hudieren/p/16792045.html

相关文章

  • 当今市场上 最佳假电子邮件生成器 临时邮箱
    如果您想发现世界上最好的假邮件生成器,那么您来对地方了。我们对它们进行了测试和审查,以便为您提供一些重要的选择建议。什么是假邮件生成器?假邮件生成器是一种工具,可让......
  • 【Vegas原创】SQL Server调用CDO发送邮件
    •用于某事件过期mail提醒。操作步骤:1.新建DailyJob,事件中填写:execdbo.EIP_DeadLine_Notice/***********************************************************......
  • 【Vegas原创】CDO发送邮件
    <%Group_ID=Request("Group_ID")onerrorresumenext'SetRs=Conn.Execute(Access)WhileNotRs.EofConstcdoSendUsingMethod="http://schemas.microsoft.com/cdo/con......
  • 邮件相关三:一个发邮件的FM和一个…
    只是方便以后项目用的时候直接copy,呵呵一、发邮件的FMZLM_TEST_MAIL_01.*"---------------------------------------------------------------------......
  • (Python)email 邮件发送
    """1.发送邮件的几个步骤:1)与邮件服务器建立会话连接2)指定用户的登录3)发送邮件2.一个标准邮件包含:1)邮件头:标题;收件人、发送人、抄送cc、密送bcc......
  • 各大运营商的邮件服务器配置方法
    常见错误:501badaddresssyntax收件地址错误,在系统设置里面配置收件人501badsyntax基本上属于邮件参数错误451Error:queuefilewriteerror网络错误吧,重试......
  • SpringBoot学习-(二十三)SpringBoot发送邮件
    基本步骤:添加pom文件依赖配置邮件相关书写代码测试添加pom文件依赖<!--springbootmail--><dependency><groupId>org.springframework.boot</groupId><artifactId......
  • 每天工作忙,学会python自动收发邮件,代替你问候女友
    如果觉得文章写得好,如果你想要博客文章中的数据,请关注公众号:【数据分析与统计学之美】,进群和作者交流!目录  ​​1、相关库介绍​​​    ​​​​​​1)yagmail​​​......
  • Exchange Online 发送邮件
    项目背景2022年10月4日微软更改了Exchange的验证方式,原来exchangelib的库没法继续实现邮件的发送。实现方式利用MicrosoftGraphAPI里  发送邮件-MicrosoftGrap......
  • SpringBoot 整合邮件发送
    邮件发送更多参考:https://mrbird.cc/Spring-Boot-Email.html引入依赖在SpringBoot中发送邮件,需要用到spring-boot-starter-mail,引入spring-boot-starter-mail:<depend......