Python:通过crontab发送电子邮件时文件附件无法正常工作

时间:2018-04-19 06:59:01

标签: python unix cron

以下源代码在手动运行时工作正常,但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

1 个答案:

答案 0 :(得分:0)

我认为此问题与附件所在的文件夹有关。

请记住,如果您从crontab运行脚本,您的python执行可能与您手动执行它的文件夹不同。

因此,我建议两种可能的解决方案:

  • 使用附件的绝对路径
  • 脚本启动后立即将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路径移动到脚本路径