0

如何发送包含保存在 FileField 中的文件的邮件?我不知道如何访问下面代码中的文件。

mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach(?, ?, 'application/pdf')
mail.send()

编辑

我试图用

f = list_pca.pdf_file.open(mode='rb')

其中 list_pca 是

class ListPCA(models.Model):
    pdf_file = models.FileField(upload_to=get_file_path_j, null=True, blank=True)

但我收到错误“没有这样的文件或目录”,因为路径错误。

list_pca.pdf_file.path

也返回错误的路径。upload_to由于该选项,它不应该知道文件在哪里吗?

谢谢

谢谢

4

5 回答 5

2
mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach('arbitrary_filename', myfile.read(), 'application/pdf')
mail.send()

由于您使用的是 EmailMessage,因此您也可以将附件 kwarg 传递给它。

email = EmailMessage(subject, message, 'from@from,com', ['to@to.com'], 
    attachments=(('foo.pdf', myfile.read(), 'application/pdf'),))
于 2012-01-25T19:21:09.887 回答
2

通常,就像 aganders3 建议的那样,我会使用:

mail.attach_file(myfile.path) as well

但是,我注意到它对于包含空格的附件失败。

于 2012-10-13T23:06:11.513 回答
0

我认为这会做到:

mail.attach(os.path.basename(myfile.name), myfile.read(), 'application/pdf')

我可能会忽略 MIME 编码步骤,但 IIRC mail.attach 会这样做。

于 2012-01-25T19:21:31.223 回答
0

尝试:

myfile = mymodel.somefilefield

mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach('File Name', myfile.path, 'application/pdf')
mail.send()
于 2012-01-25T19:23:27.010 回答
0

其他建议应该有效,但您也可以这样做:

mail.attach_file(myfile.path)

您可以选择将 MIME 类型作为第二个参数传递,但如果您不提供它,它只会尝试从文件名中找出它。

于 2012-01-25T19:26:27.227 回答