How to Email a Django FileField as an Attachment?
I need to send a models.FileField
as an email attachment using Django. I've seen snippets that show how to do this with the raw request.FILES
data (which still contains the Content-Type), but have not been able to find anything that shows how to do it once you've already saved the file in a models.FileField
. The content type seems to be inaccessible from the models.FileField
.
Can someone give me an example of how this would work? I'm beginning to think that I might have to store the Content-Type in the model when I save the file.
Thanks!
I would just not supply a content type and let the recipient's email client work it out. Unless it will be something unusual it shouldn't be a problem.
RFC2616 states:
If and only if the media type is not given by a Content-Type field, the recipient MAY attempt to guess the media type via inspection of its content and/or the name extension(s) of the URI used to identify the resource.
but ... If you want to specify it then storing the content type on upload is a very good idea. It should be noted that django's own docs say to verify the data from users
If you are on a *unix OS you could try to guess/inspect it:
import subprocess
subprocess.check_output(['file', '-b', '--mime', filename])
(from How to find the mime type of a file in python? )
在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/46806.html
上一篇: 上传的文件类型验证