2011-06-28 13 views
6

Django kullanarak bir e-posta eki olarak models.FileField göndermek gerekir. Bu işlemin, request.FILES verileri (hala İçerik Türü'nü içeren) ile nasıl yapılacağını gösteren snippet'leri gördüm, ancak dosyayı daha önce bir kez kaydettikten sonra nasıl yapılacağını gösteren bir şey bulamadılar. models.FileField. İçerik türü models.FileField erişilemez gibi görünüyor.Nasıl bir ek olarak bir Django FileField Email?

Birisi bana bu işe nasıl kullanıldığını açıklayan bir örnek verebilir misiniz? Dosyayı kaydettiğimde modele İçerik Türü'nü saklamanız gerektiğini düşünmeye başladım.

Teşekkürler!

+0

Yanıt olarak bulduğunuz çözümü verebilir misiniz? Snippet'i de görmek istiyorum. – Doppelganger

cevap

0

Ben sadece bir içerik türünü tedarik ve alıcının e-posta istemcisi work it out izin vermedi. Olağandışı bir şey olmadığı sürece sorun olmamalı.

RFC2616 devletler:

ve ortam türü bir Content-Type alanı tarafından verilen açık olmaması gerekir, alıcı onun içeriğinin gözlenmesi yoluyla ortam türünü tahmin etmeye kalkışabilir ve/veya adı uzantısı (lar) URI kaynak tanımlamak için kullanılan.

ama ... sonra yükleme içerik türünü depolamak bunu belirtmek istiyorsanız çok iyi bir fikirdir. Tahmin deneyebilirsiniz a * unix OS üzerinde ise Django kendi docs verify the data from users

söylemek unutulmamalıdır/inceleyebilirler:

import subprocess 
subprocess.check_output(['file', '-b', '--mime', filename]) 

(How to find the mime type of a file in python? itibaren)

+0

Teşekkürler! Bunu bir geri vereceğim ve rapor vereceğim! –

13

ekleme Bir email.FileField dosyası bir e-posta iletisine Django'da güzel ve basittir:

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() 
3

Başka bir yaklaşım :

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)) 
+0

Bu benim için çalıştı, teşekkürler. – Prateek

+2

Django 1.7.1 ile 'msg.attach_file (self.my_filefield.path)' kullanmak zorundaydım – sspross

İlgili konular