【python实用小脚本系列】用 Python 自动下载邮件附件,轻松搞定文件管理!
嘿,小伙伴们!今天我来给大家介绍一个超实用的 Python 小工具——一个能自动下载邮件附件的“文件管家”!是不是听起来很酷?再也不用手动下载附件啦!接下来,我带大家看看这个神奇的代码是怎么工作的,还能怎么玩出更多花样!
第一步:揭秘核心代码,看看它是怎么“自动下载”的
这个工具的核心功能是从你的邮箱中自动下载符合条件的附件。听起来是不是有点像魔法?其实,它背后的工作原理非常有趣!接下来,我们来看看它是怎么实现的。
1. 登录邮箱:告诉程序你的邮箱信息
mail = imaplib.IMAP4_SSL("imap.gmail.com", port=993)
mail.login(USEREMAIL, USERPASS)
这段代码的作用是登录你的邮箱。你需要在代码中填写你的邮箱地址(USEREMAIL)和密码(USERPASS)。程序会通过 IMAP 协议连接到 Gmail 的服务器,并登录你的邮箱。
2. 搜索邮件:找到所有邮件
mail.select()
result, data = mail.uid("search", None, "ALL")
mails = len(data[0].split())
这段代码的作用是选择你的邮箱文件夹(默认是收件箱),并搜索所有邮件。mail.uid("search", None, "ALL") 会返回所有邮件的 UID(唯一标识符),程序会统计邮件的数量。
3. 遍历邮件并下载附件:找到符合条件的附件并下载
for i in range(mails):
latestEmailUID = data[0].split()[i]
result, emailData = mail.uid("fetch", latestEmailUID, "(RFC822)")
rawEmail = emailData[0][1]
rawEmailString = rawEmail.decode("utf-8")
emailMessage = email.message_from_string(rawEmailString)
这段代码的作用是遍历所有邮件,获取每封邮件的内容。mail.uid("fetch", latestEmailUID, "(RFC822)") 会根据邮件的 UID 获取邮件的原始数据,程序会解析这些数据,提取邮件的内容。
4. 检查附件并保存:只下载符合条件的附件
for content in emailMessage.walk():
if content.get_content_maintype() == "multipart":
continue
if content.get("Content-Disposition") is None:
continue
fileName = content.get_filename()
if bool(fileName):
if fileName.endswith(".pdf"):
if fileName.startswith("SOMETHING"):
filePath = os.path.join("PATH", fileName)
if not os.path.isfile(filePath):
fileWrite = open(filePath, "wb")
fileWrite.write(content.get_payload(decode=True))
fileWrite.close()
print(f'Downloaded "{fileName}" from "{fromEmail}"')
这段代码的作用是检查邮件中的每个部分,找到附件并保存。程序会检查文件名是否以 .pdf 结尾,并且是否以 SOMETHING 开头。如果符合条件,程序会把附件保存到指定路径。你可以通过修改 PATH 参数,设置不同的保存路径。
第二步:这个代码能用来干啥?应用场景大揭秘!
这个工具不仅仅是一个简单的“附件下载器”,它的应用场景其实非常广泛!以下是一些有趣的用法:
- 自动下载重要文件:比如,自动下载所有以
.pdf结尾的文件,方便你整理工作文件。 - 文件归档:自动下载并归档特定发件人的邮件附件,方便你查找历史文件。
- 自动化工作流程:结合其他工具,自动处理下载的文件,比如批量转换格式或上传到云存储。
总之,只要你需要自动下载邮件附件,这个工具都能帮你轻松搞定!
第三步:扩展玩法,让工具更强大!
接下来,我来教大家两个进阶玩法,让你的工具变得更智能、更有趣!
扩展 1:按发件人下载附件——只下载特定人的文件
我们可以扩展代码,让它只下载特定发件人的附件。比如,你只想下载老板发来的文件,这个功能就能派上用场!
def download_attachments_from_sender(sender_email):
for i in range(mails):
latestEmailUID = data[0].split()[i]
result, emailData = mail.uid("fetch", latestEmailUID, "(RFC822)")
rawEmail = emailData[0][1]
rawEmailString = rawEmail.decode("utf-8")
emailMessage = email.message_from_string(rawEmailString)
fromEmail = emailMessage["from"]
if sender_email in fromEmail:
for content in emailMessage.walk():
if content.get_content_maintype() == "multipart":
continue
if content.get("Content-Disposition") is None:
continue
fileName = content.get_filename()
if bool(fileName):
filePath = os.path.join("PATH", fileName)
if not os.path.isfile(filePath):
fileWrite = open(filePath, "wb")
fileWrite.write(content.get_payload(decode=True))
fileWrite.close()
print(f'Downloaded "{fileName}" from "{fromEmail}"')
这个函数会遍历所有邮件,检查发件人是否是 sender_email。如果是,就会下载附件。
扩展 2:定期检查邮件并下载附件——自动更新文件
我们可以让程序定期运行,自动检查邮件并下载附件。比如,每天早上自动下载所有符合条件的附件,方便你开始一天的工作!
import schedule
import time
def download_attachments_periodically():
downloadAttachment()
print("Attachments downloaded successfully!")
# 每天早上 7 点运行
schedule.every().day.at("07:00").do(download_attachments_periodically)
while True:
schedule.run_pending()
time.sleep(1)
这个脚本会每天早上 7 点自动运行,下载符合条件的附件。你可以通过修改 schedule.every().day.at("07:00"),设置不同的运行时间。
总结:自动下载邮件附件,文件管理更轻松!
好了,今天的分享就到这里啦!是不是觉得这个工具超级实用?它不仅能帮你自动下载邮件附件,还能通过简单的扩展,实现更多有趣的功能。有了它,你的文件管理会变得更加轻松和高效。
如果你也想拥有这样一个“文件管家”,那就赶紧动手试试吧!相信我,有了它,你的生活会变得更加轻松和有序。
最后,别忘了点赞和分享,让更多人知道这个超实用的 Python 小工具!我们下次再见!
需要完整的源码,请在评论区留言,或私信我。
更多推荐
所有评论(0)