2017-10-04 28 views
0

この質問にはいくつかの要素がありますが、最終的な回答はありません。here私も、このいずれかを試してみましたDjango - ビューで生成されたPDFを添付してメールに添付する

@receiver(post_save, sender=Post) 
def first_mail(sender, instance, **kwargs): 
    if kwargs['created']: 
     user_email = instance.client.email 
     subject, from_email, to = 'New account', '[email protected]', user_email 
     post_id = str(instance.id) 
     domain = Site.objects.get_current().domain 
     post_pdf = domain + '/post/' + post_id + '.pdf' 

     text_content = render_to_string('post/mail_post.txt') 
     html_content = render_to_string('post/mail_post.html') 

     # create the email, and attach the HTML version as well. 
     msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) 
     msg.attach_alternative(html_content, "text/html") 
     msg.attach_file(post_pdf, 'application/pdf') 
     msg.send() 

from easy_pdf.views import PDFTemplateResponseMixin 

class PostPDFDetailView(PDFTemplateResponseMixin,DetailView): 
    model = models.Post 
    template_name = 'post/post_pdf.html' 

はその後、私はこれは次の電子メールにPDFを生成し添付するeasy_pdfでPDFを生成するビューがあり

msg.attach_file(domain + '/post/' + post_id + '.pdf', 'application/pdf') 

答えて

0

役立つかどうかはわかりませんが、作成したPDFを添付するにはEmailMessageビルトインを使用しました電子メールへの報告、私は送り出さ:

from django.core.mail import send_mail, EmailMessage 

draft_email = EmailMessage(
      #subject, 
      #body, 
      #from_email, 
      #to_email, 
) 

オプション1:

# attach a file you have saved to the system... expects the path 
draft_email.attach_file(report_pdf.name) 

オプション2:

draft_email.send() 

一部を:

# expects the name of the file object 
draft_email.attach("Report.pdf") 

その後は、あなたがすでに持っているように送信します最初の考え:あなたがしようとしているようですattach_fileを使用してシステムからファイルを添付しますが、システムにはありません。私はあなたのコードを正しく読んでいるならば、attach_fileの代わりにattachを使ってみることにします。なぜなら、pdfはシステムのLTSではなくあなたのメモリにあるからです。

+0

この問題は、ビューが要求されたときにPDFが生成され、電子メールに添付できないために発生すると考えられます。あれについてどう思う? –

+0

ファイルが作成されていないときに添付ファイルを使用しても問題はありませんでした。試してみる価値があります。ファイルが電子メールに添付しようとしたときにファイルがまだ開いていて、キャッシュに入っていると仮定します。あなたはあなたのエラーを共有できますか? – Doug

+0

easy_pdfを使用すると、PDFはどこかに保存されません。それは生成されるだけです。したがって、report.pdfファイルは存在しません。 –

0

私は、一時ファイルも保存せずにeasy_pdfで生成されたPDFを添付する方法を探していました。

from easy_pdf.rendering import render_to_pdf 
... 
post_pdf = render_to_pdf(
     'post/post_pdf.html', 
     {'any_context_item_to_pass_to_the_template': context_value,}, 
) 
... 
msg.attach('file.pdf', post_pdf, 'application/pdf') 

私はあなたがまだこれを行う方法により、興味があれば、それは助けていただければ幸いです:私は他の場所で解決策を見つけることができませんでしたので、私はeasy_pdf.rendering.render_to_pdfを使用して、短いと作業提案を示唆しています。

関連する問題