Django EmailMultiAlternatives不附加pdf

时间:2015-01-05 05:23:02

标签: python django email pdf

我在Python中使用以下代码发送附带pdf的电子邮件。

result_url = '%s%s?analysis_id=%s' % (
        constants.HOST_URL, reverse('results'), analysis.id)
pdf_filename = ''.join(['report', str(analysis_id), '.pdf'])
utils.convert_to_pdf(result_url, pdf_filename)

这是我的utils.convert_to_pdf

def convert_to_pdf(url, filename):
    command = "phantomjs export.js %s %s" % (url, filename)
    execute_command(command).communicate()

以下是我发送电子邮件的方式。

email_ids = []
if analysis.user is not None:
    email_ids.append(analysis.user.email)

if email is not None:
    email_ids.append(email)

body = ANALYSIS_EMAIL_BODY % (result_url)

try:
    message = EmailMultiAlternatives(ANALYSIS_EMAIL_SUBJECT, body, settings.EMAIL_SENDER, email_ids)
    message.attach('Report.pdf', pdf_filename, 'application/pdf')
    message.send() 
except Exception as ex:
    logging.error('Send mail failed: %s', ex)

现在我看到PDF文件在我当前的文件夹中正确生成并附有邮件,但邮件大小为0KB,当我尝试打开它告诉的文件时。

It may be damaged or use a file format that preview doesn't recognize

这里出了什么问题。

1 个答案:

答案 0 :(得分:0)

您只是附加文件名作为文件的内容。

您需要附加实际内容,而不是文件名。

message.attach('Report.pdf', read_pdf_contents(), 'application/pdf')

确定如何从文件名中获取原始数据是您的职责。

就像myfile_like_object.read()