在Python中发送邮件,消息缺失

-2 投票
1 回答
580 浏览
提问于 2025-04-18 11:30

我正在删除一些超过30天的文件夹,并想通过Gmail给自己发一封邮件,列出所有被删除的文件夹。

现在文件夹删除得很顺利,但邮件里的内容和主题都是空的。我漏掉了什么呢?

import os
import time
import shutil
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import encoders



sender = "my_email@gmail.com"
receivers = ["my_email@gmail.com"]

username = 'my_email'
password = 'passwd'

numdays = 86400*30
now = time.time()
directory=os.path.join("/home","/Downloads/trial/")
for r,d,f in os.walk(directory):
    for dir in d:
         timestamp = os.path.getmtime(os.path.join(r,dir))
         if now-numdays > timestamp:
            try:
                print "removing ",os.path.join(r,dir)
                shutil.rmtree(os.path.join(r,dir))  
            except Exception,e:
                print e
                pass
            else:
                print "Deleted folders are: %s" % os.path.join(r,dir)



msg = MIMEMultipart()
msg['To'] = 'my_email@gmail.com'
subject = "Deleted Folders : %s" % os.path.join(r,dir)
msg['Subject'] = subject

try:
mailserver = smtplib.SMTP("smtp.gmail.com", 587)
mailserver.ehlo()
mailserver.starttls()
mailserver.ehlo()
mailserver.login(sender, password)
mailserver.sendmail(sender, to, msg.as_string())
mailserver.close()
print "Successfully Sent email"
except smtplib.SMTPException:
print"Error: Unable to send email"

我收到了主题为“已删除文件夹:/home/Downloads/trial/4/4”的邮件。

我的目标是让邮件里有一段内容,列出所有被删除的文件夹。我在标准输出中看到了我想要的结果,也就是:

removing  /home/Downloads/trial/1
Deleted folders are: /home/Downloads/trial/1
removing  /home/Downloads/trial/2
Deleted folders are: /home/Downloads/trial/2
removing  /home/Downloads/trial/3
Deleted folders are: /home/Downloads/trial/3

1 个回答

1

试试这个:

deleted_folders = []

for r,d,f in os.walk(directory):
    for dir in d:
         timestamp = os.path.getmtime(os.path.join(r,dir))
         if now-numdays > timestamp:
             try:
                 shutil.rmtree(os.path.join(r,dir))  
                 deleted_folders.append("Deleted folders are: %s" %
                                        os.path.join(r,dir))
             # Bad, it's almost never appropriate to catch all Exceptions
             # In this case, OSError seems better
             except Exception,e:
                 pass

body = MIMEText("\n".join(deleted_folders), "plain")
msg.attach(body)

撰写回答