如何使用保存在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
选项,它不应该知道文件在哪里吗?
由于
由于
答案 0 :(得分: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'),))
答案 1 :(得分:2)
通常,像aganders3建议的那样,我会使用:
mail.attach_file(myfile.path) as well
但是,我注意到包含空格的附件失败了。
答案 2 :(得分:0)
我认为这样做会:
mail.attach(os.path.basename(myfile.name), myfile.read(), 'application/pdf')
我可能会忽略MIME编码步骤,但IIRC mail.attach会这样做。
答案 3 :(得分:0)
尝试:
myfile = mymodel.somefilefield
mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach('File Name', myfile.path, 'application/pdf')
mail.send()
答案 4 :(得分:0)
其他建议应该有效,但您也可以这样做:
mail.attach_file(myfile.path)
您可以选择将MIME类型作为第二个参数传递,但如果您不提供它,它只会尝试从文件名中找出它。