2011-06-28 26 views
6

Djangoを使用してメール添付ファイルとしてmodels.FileFieldを送信する必要があります。私は未加工のrequest.FILESデータ(これはまだContent-Typeを含んでいます)でこれを行う方法を示すスニペットを見ましたが、あなたがすでにファイルを保存した後でそれを行う方法を示すものは何も見つかりませんでしたmodels.FileField。コンテンツタイプはmodels.FileFieldからアクセスできないと思われます。Django FileFieldを添付ファイルとして電子メールに送信するには?

これがどのように機能するかの例を教えていただけますか?私は、ファイルを保存するときにContent-Typeをモデルに格納しなければならないかもしれないと思っています。

ありがとうございます!

+0

答えとして見つけた解決策を教えてください。私はスニペットも見たいと思います。 – Doppelganger

答えて

0

私はコンテンツタイプを提供せず、受信者の電子メールクライアントがそれをうまく動作させることができます。珍しいことでない限り、それは問題ではありません。

RFC2616状態:

とメディアタイプは、Content-Typeフィールドによって与えられ ない場合にのみ、 受信者はその コンテンツの検査を経て メディアタイプを推測しようと可能性がある場合、および/または リソースを識別するために使用されるURIの名前拡張子 。

しかし ... あなたはそれを指定したい場合は、アップロード時にコンテンツタイプを格納することは非常に良いアイデアです。あなたが推測しようとすることができます* UNIX OS上にある場合は、Djangoの独自のドキュメントがverify the data from users

に言うことに留意すべきである/それを点検:

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

How to find the mime type of a file in python?から)

+0

ありがとう!私はこれを行って報告して戻します! –

13

取り付けDjangoのmodels.FileFieldファイルは、Djangoで素敵でシンプルです:

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

もう1つのアプローチ:

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

これは私のために働いた、ありがとう。 – Prateek

+2

Django 1.7.1で 'msg.attach_file(self.my_filefield.path)'を使わなければなりませんでした – sspross

関連する問題