移动邮件(copy)
此处可以理解为MOVE移动,而不是复制,移动后原邮件会被删除。
UID 和 NUM 的区别
UID (Unique ID):
每封邮件在邮箱文件夹中的唯一标识符,删除中间邮件,后续邮件UID不会自动变化。
使用 mail.uid 方法进行操作,例如 mail.uid('search', None, 'UNSEEN')。
NUM (Message Number):
邮件在当前文件夹中的序号,中间邮件操作删除、移动等,后续邮件NUM会重新排序。
使用 mail.search 或 mail.fetch 等方法进行操作,例如 mail.search(None, 'UNSEEN')。
Python示例代码
场景:3封邮件,分别以uid和num方式,使用copy命令,从folder1移动到folder2。
重要
风险提示:下述代码在Python 3.11.9进行的测试,用于生产环境之前请务必先做好测试。
# -*- coding: utf-8 -*-
import imaplib
def before_after_move_email(source_folder, destination_folder):
# 选择文件夹
mail.select(source_folder)
# uid
result, data = mail.uid('search', None, 'UNSEEN')
print(f'{source_folder}搜索结果UID:{result},{data}')
# # num
# result, data = mail.search(None, 'UNSEEN')
# print(f'{source_folder}搜索结果NUM:{result},{data}')
# 选择文件夹
mail.select(destination_folder)
# 搜索邮箱中所有邮件的UID,推荐
# uid
result, data = mail.uid('search', None, 'UNSEEN')
print(f'{destination_folder}搜索结果UID:{result},{data}')
# num
# result, data = mail.search(None, 'UNSEEN')
# print(f'{destination_folder}搜索结果NUM:{result},{data}')
# 设置邮箱信息
# 配置 IMAP 服务器
imap_server = 'imap.qiye.aliyun.com' # IMAP 服务器地址
username = 'test@example.com' # 用户名
password = '*******' # 密码
port = 993 # 端口号
source_folder = 'folder1'
destination_folder = 'folder2'
# 连接到IMAP服务器
mail = imaplib.IMAP4_SSL(imap_server, port)
mail.login(username, password)
print('移动前:')
before_after_move_email(source_folder, destination_folder)
# 移动指定的UID
mail.select(source_folder)
# uid
result, copy_data = mail.uid('COPY', '6', destination_folder)
# num
# result, copy_data = mail.copy('1', destination_folder)
print('移动后:')
before_after_move_email(source_folder, destination_folder)
说明
上述代码注释为# uid和# num的有三处,用于切换uid和num方式。
总结:uid方式移动后会取新文件夹的下一个最大值,num则会重新计数。
运行效果
uid方式
移动邮件16,到新文件夹时,取新文件夹的下一个最大值,计数为14
num方式
移动邮件2,到新文件夹时,重新排序为1
文档内容是否对您有帮助?