如何通过电子邮件将Django FileField作为附件发送?
我需要使用Django将models.FileField
作为电子邮件附件发送。 我已经看到了一些片段,展示了如何使用原始request.FILES
数据(它仍包含Content-Type)执行此操作,但是一旦您已经保存了该文件,却无法找到任何显示该操作的内容在models.FileField
。 内容类型似乎无法从models.FileField
访问。
有人能给我一个这样的例子吗? 我开始认为当我保存文件时,我可能不得不在模型中存储Content-Type。
谢谢!
我只是不提供内容类型,并让收件人的电子邮件客户端解决它。 除非它是不寻常的,否则它不应该是一个问题。
RFC2616指出:
当且仅当媒体类型不是由内容类型字段给出时,接收者可以尝试通过检查媒体类型的内容和/或用于标识资源的URI的名称扩展来猜测媒体类型。
但是 ...如果你想指定它,那么在上传时存储内容类型是一个非常好的主意。 应该指出,django自己的文档说要验证用户的数据
如果你使用* unix操作系统,你可以尝试猜测/检查它:
import subprocess
subprocess.check_output(['file', '-b', '--mime', filename])
(从如何在python中查找文件的MIME类型?)
在django中将models.FileField文件附加到电子邮件中非常简单:
from django.core.mail import EmailMultiAlternatives
kwargs = dict(
to=to,
from_email=from_addr,
subject=subject,
body=text_content,
alternatives=((html_content, 'text/html'),)
)
message = EmailMultiAlternatives(**kwargs)
message.attach_file(model_instance.filefield.path)
message.send()
另一种方法:
from django.core.mail.message import EmailMessage
msg = EmailMessage(subject=my_subject, body=my_email_body,
from_email=settings.DEFAULT_FROM_EMAIL, to=[to_addressed])
msg.attach_file(self.my_filefield.file) # self.my_filefield.path for Django 1.7+
msg.send(fail_silently=not(settings.DEBUG))
链接地址: http://www.djcxy.com/p/46805.html