使用Python在特定目录中监控文件变化并发送邮件通知

2 投票
2 回答
4857 浏览
提问于 2025-04-16 05:51

我想写一个程序,它会在一个特定的文件夹里查找文件。如果发现有新文件,就应该发送一封通知邮件。

我已经准备了一个脚本,可以在文件夹里查找新文件,它会把新文件的通知打印到控制台上。但现在我希望能通过邮件收到通知,一旦有新文件到达。有人能帮忙吗?

import os, time
def run():
    path_to_watch = "//D$:/testfolder/"
    print "watching: " + path_to_watch
    before = dict ([(f, None) for f in os.listdir (path_to_watch)])
    while 1:
        after = dict ([(f, None) for f in os.listdir (path_to_watch)])
        added = [f for f in after if not f in before]
        removed = [f for f in before if not f in after]
        if added: print "Added: ", ", ".join (added)
        if removed: print "Removed: ", ", ".join (removed)
        before = after
        time.sleep (10)
if __name__ == "__main__":
    print run()

2 个回答

0

好的,在这种情况下,我找到了自己的解决办法。可能这对有类似任务的人会有所帮助。

import os, time, smtplib

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

path_to_watch = "//networkpath/test/filetest"
print "watching: " + path_to_watch
before = dict ([(f, None) for f in os.listdir (path_to_watch)])
while 1:
    after = dict ([(f, None) for f in os.listdir (path_to_watch)])
    added = [f for f in after if not f in before]
    removed = [f for f in before if not f in after]
    if removed: print "Removed: ", ", ".join (removed)
    if added:
        print "Added: ", ", ".join (added)
        me = "me@test.de"
        you = "you@test.de"
        msg = MIMEMultipart('alternative')
        msg['Subject'] = "New file has approached."
        msg['From'] = me
        msg['To'] = you
        text = "New file has approached in:\n\\\networkpath\test\filetest"
        part1 = MIMEText(text, 'plain')
        msg.attach(part1)
        s = smtplib.SMTP('smtp.test.com')
        s.sendmail(me, you, msg.as_string())
        s.quit()
    time.sleep (10)
    before = after

祝你玩得开心!

1

如果你已经设置好了一个SMTP邮件服务器(我假设你有一个邮件系统!),那么这件事非常简单。总共大约只需要10行代码。这里有一个Python的例子

如果你遇到任何问题,我们需要更多的信息来进一步帮助你。例如,你使用的是什么邮件系统等等。

撰写回答