python通过zmail备份腾讯企业邮件
'''
备份你邮箱中的全部邮件
支持断点续传
支持重命名
保存原始信息,不加任何额外信息
'''
import os, re
import zmail
def get_walk(backup_path_walkfile):
'''
是否存在备份的步骤记录文件,如果存在则读取其中的步数,如果不存在则返回1。
:param path_file: 备份步数记录文件
:return:
'''
if os.path.exists(backup_path_walkfile):
with open(backup_path_walkfile, mode='r') as f:
walk_num = int(f.read())
return walk_num
return 1
def save_walk(backup_path_walkfile, walk_num):
'''
将当前步数保存到备份步数记录文件中
:param path_file: 备份步数记录文件
:param _walk: 步数
:return:
'''
with open(backup_path_walkfile, mode='w') as f:
f.write(str(walk_num))
def bak_email(account, passwd, backup_path):
'''
备份邮箱功能
:param account: 邮箱账号
:param passwd: 邮箱密码
:param backup_path: 保存路径必须带r 如 r'd:\back'
:return:
'''
# 1.连接到邮件服务器并获取邮件信息
server = zmail.server(account, passwd, smtp_host='smtp.exmail.qq.com', pop_host='pop.exmail.qq.com')
##验证smtp、pop功能是否正常
# if server.smtp_able():
print('smtp 正常')
# if server.pop_able():
print('pop 正常')
# (mail_count邮件的数量, mail_size邮箱的大小)
mail_count, mail_size = server.stat()
# print(mail_size,mail_count)
# 3.备份目录&相关设置
backup_dir = os.path.join(backup_path, f'{account}_bak')
os.makedirs(backup_dir, exist_ok=True) # 递归创建
os.chdir(backup_dir) # 作为根目录输出
# print(os.getcwd()) # d:\back\XXXX@XXXX_bak
persist_walk = True # 用于确定是否要记录备份步数。
walk_steps = 10 # 定义了每次备份的邮件数量。
backup_path_walkfile = os.path.join(backup_dir, 'walk.txt') # 存储了备份步数的记录文件。
# 如果 persist_walk 为真(即 True),则将 get_walk() 的返回值赋给 walk;否则,将值 1 赋给 walk。
walk = get_walk(backup_path_walkfile) if persist_walk else 1
# 步数 walk 还没有达到或超过邮件总数 mail_count,循环就会继续执行
while walk <= mail_count:
mails = server.get_mails(start_index=walk, end_index=walk + walk_steps)
for mail in mails:
# print(zmail.show(mail))
# # 移除文件名中不允许的字符
emailname_subject = re.sub(r'[\\/*?:"<>|]', '', str(mail['subject']).strip())
emailname_date = re.sub(r'[\\/*?:"<>|]', '', str(mail['date']).strip())
emailname = emailname_subject + emailname_date + '.eml'
# print(emailname)
zmail.save(mail
, name=emailname
, target_path=backup_dir
, overwrite=True
)
print(f"{emailname} 第{walk}/{mail_count}封邮件")
walk += 1
if persist_walk:
save_walk(backup_path_walkfile, walk)
# bak_email('XXXX@XXXX.cn', 'XXXXXXXXXXXX', r'd:\back')
THE END
0
二维码
打赏
海报
python通过zmail备份腾讯企业邮件
'''
备份你邮箱中的全部邮件
支持断点续传
支持重命名
保存原始信息,不加任何额外信息
'''
import os, re
import zmail
def get_wal……
共有 0 条评论