IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 有关imap-tools模块实现邮件移动的问题 -> 正文阅读

[网络协议]有关imap-tools模块实现邮件移动的问题

最近在做邮件过滤,在写到邮件客户端的时候,有个问题就是算法检测出了垃圾邮件后,如何将邮件移动到用户邮件目录下的垃圾邮件箱?
Emmm…具体的过滤之后再说吧
这次就说邮件的移动 用python实现的

本来选用的是poplib模块,后来发现pop只能读取收件箱,那用户目录下的发件箱、垃圾箱、回收站之类的都查看不了啊

直到我看到了一段说明——垃圾邮件到了客户端的“垃圾邮件”文件夹,使用POP3连接的客户端无法同步到,使用IMAP连接的客户端和WEB端可以看到垃圾邮件

所以就尝试了imaplib模块。

POP3和IMAP协议的区别
虽然这两个协议都是从邮件服务器那里下载邮件到本地的协议,但是不同的是IMAP提供跟邮件服务器的双向通信,也即在客户端所作的更改会反馈给服务器端,跟服务器端形成同步(例如删除邮件,创建文件夹等等的操作)。
而POP3是单向通信的,即下载邮件到本地就算了,所作的更改都只是在客户端,不会反映到服务器端。所以使用IMAP协议也会更便捷,体验更好,更可靠。

一般来说主流的qq、163邮箱都是要SSL协议认证的,有SSL则要开启在邮箱设置中开启对应服务且获取授权码
我是用我自己搭建的邮件服务器,所以就没有SSL,选用的登陆方式就是imaplib.IMAP4()
可进入imaplib IMAP4 查看更多信息,包括一些函数的默认参数都有说明

import imaplib

#以下二选一,一般来说主流的qq、163邮箱都是要SSL协议认证的
#没有SSL
mail = imaplib.IMAP4('你的域名')
mail.login("你的邮箱@你的域名", "密码")
#有SSL
mail = imaplib.IMAP4_SSL('你的域名')  #如qq就是imap.qq.com
mail.login("你的邮箱@你的域名", "SMTP/IMAP授权码")  
#记得在邮箱账户设置中开启对应服务


#查看邮件文件夹
for i in mail.list()[1]:
    print(i)

#比如我自己的,由输出结果可得,包含的文件夹有:
# 'Trash'   回收站邮件
# 'Spam'    垃圾邮件
# 'Sent'    已发送邮件
# 'Drafts'  草稿箱
# 'Archive' 存档
# 'INBOX'   收件箱


#查看了一下qq邮箱的,由输出结果可得,包含的文件夹有:
# 'INBOX'            收件箱
# 'Sent Messages'    已发送邮件
# 'Drafts'           草稿箱
# 'Deleted Messages' 已删除邮件
# 'Junk'             垃圾邮件

可以读取用户邮箱文件后,要如何实现邮件的删除、复制、移动这些呢?其实主要还是邮件的移动,因为我们都知道,在我们的邮箱里删除了一封邮件,这封邮件并不是真正删掉了,而是进入了邮箱的回收站/“已删除”,在服务器中它暂时还是存在的

使用imap-tools模块就可以做到
imap-tools模块是python的第三方扩展, 它使用标准库imaplib,并将常见的邮件处理事件封装

它的项目描述是这么说的

通过 IMAP 处理电子邮件:
基本操作:登陆、获取消息、uid
分析的电子邮件属性
电子邮件操作:复制、删除、标记、移动、追加
文件夹操作:列出、设置、获取、创建、存在、重命名、订阅、删除、状态
空闲命令:启动、轮询、停止、等待
失败操作的异常 ; 无外部依赖关系

有移动!
emmmm那我们就来用用它
先安装

$ pip install imap-tools

imap-tools官方文档及使用说明
imap-tools项目及示例代码

然后就用它登陆邮箱

from imap_tools import MailBox, AND

mailbox=MailBox('你的域名')
mailbox.login("你的邮箱@你的域名", "密码或SMTP/POP/IMAP授权码", initial_folder='INBOX')
#initial_folder默认就是INBOX,也可选其他文件夹

结果显示报错??
在这里插入图片描述
提示—>远程主机强迫关闭了一个现有的连接
应该就是登陆SSL认证的问题,就是我的邮件服务器是没有开启SSL的,用imaplib模块时用的是IMAP4,而不是IMAP4_SSL

由于imap-tools内部包含了标准imaplib模块,那么问题应该是出在imap-tools的配置文件中登陆使用的是IMAP4_SSL

解决办法:
找到本地python文件夹下,进入 \lib\site-packages\imap_tools目录,找到mailbox.py文件,查看MailBox类里面的**_get_mailbox_client()**函数,可以看到确实使用的是SSL连接登陆
在这里插入图片描述
在这里插入图片描述

不使用SSL的话就修改如下
在这里插入图片描述
三个要注意的地方:
【1】端口——>要改为port=143
【2】def _ init__()后面的keyfile=None, certfile=None, ssl_context=None
以及
self._keyfile = keyfile
self._certfile = certfile
self._ssl_context = ssl_context
都可以删了
【3】两个return
(1) return imaplib.IMAP4_SSL(self._host, self._port, self._keyfile, self._certfile, self._ssl_context)
改为
return imaplib.IMAP4(self._host, self._port)
(2)return imaplib.IMAP4_SSL(self._host, self._port, self._keyfile, self._certfile, self._ssl_context,self._timeout)
改为
return imaplib.IMAP4(self._host, self._port, self._timeout)

保存,运行原来的

from imap_tools import MailBox, AND

mailbox=MailBox('你的域名')
mailbox.login("你的邮箱@你的域名", "密码或SMTP/POP/IMAP授权码", initial_folder='INBOX')
#initial_folder默认就是INBOX,也可选其他文件夹

登陆成功!
后续就可以继续使用它来完成各种操作啦
比如查看收件箱邮件的uid

for msg in mailbox.fetch():  # generator: imap_tools.MailMessage
    print(msg.uid)   

邮件的移动

from imap_tools import MailBox, AND

mailbox=MailBox('你的域名')
mailbox.login("你的邮箱@你的域名", "密码/授权码", initial_folder='Trash')  
#Trash即垃圾箱

print(mailbox.uids())#查看Trash文件夹下的邮件uids
print(mailbox.uids()[0])#查看Trash文件夹下的第一封邮件的uid

# MOVE操作:将当前选择的邮件移动到指定文件夹中
# mailbox.uids()[0]即选择uids邮件列表中第一封邮件,并移动到INBOX收件箱中
mailbox.move(mailbox.uids()[0], 'INBOX')

# 关闭连接
mailbox.logout()

在这里插入图片描述

等等…

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:15:05  更:2022-04-22 19:17:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 3:53:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码