以下源代码在手动运行时工作正常,但crontab作业邮件已成功发送但未附加文件。如何解决?
#!/usr/bin/python
import smtplib
import os
import datetime
import glob
import time
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
now = datetime.datetime.now()
fi = now.strftime("%d%m%Y" '_0600_final.txt')
files1=glob.glob('*%s'%fi)
time.sleep(20)
print(files1)
me = 'abc@abc.com'
you = ['abc@abc.com']
msg = MIMEMultipart('alternative')
msg['Subject'] = "abc Report"
msg['From'] = me
msg['To'] = ", ".join(you)
text = "Hi!\n\nPlease find attached today's Counter files.\n\nRegards,\nabc"
part1 = MIMEText(text, 'plain')
msg.attach(part1)
for f in files1:
file_path = os.path.join('/tmp/', f)
print(file_path)
attachment = MIMEApplication(open(file_path, "rb").read(), _subtype="txt")
attachment.add_header('Content-Disposition','attachment', filename=f)
msg.attach(attachment)
s = smtplib.SMTP('10.0.0.1')
s.sendmail(me, you, msg.as_string())
s.quit()
这是crontab作业条目:
0 9 * * * python /tmp/send_mail_2.py
答案 0 :(得分:0)
我认为此问题与附件所在的文件夹有关。
请记住,如果您从crontab运行脚本,您的python执行可能与您手动执行它的文件夹不同。
因此,我建议两种可能的解决方案:
您可以使用类似的代码段获得第二个结果:
import os
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)
如果您想要排除故障并更好地了解正在发生的事情,您可以使用crontab运行当前版本的脚本,并使用类似的东西将其当前工作目录保存在文件中:
with open('somefile.txt', 'a') as the_file:
the_file.write(os.getcwd())
编辑: 使用建议的第二个选项解决了该问题:在脚本启动后立即将Python路径移动到脚本路径。