0

Ich versuche, eine E-Mail mit einem Anhang mit Django zu senden, die angehängte Datei wird von einem vom Benutzer übermittelten Formular an den Server gesendet. Mein Code ist untenDjango Mailanhang ist leer

gezeigt
form = RequestForm(request.POST, request.FILES) 
if form.is_valid(): 
     form.save() 
     messages.info(request, '') 
     subject = '' 
     message = "" 
     attachment = request.FILES['attachment'] 
     mail = EmailMessage(subject, message, '', ['']) 
     mail.attach(filename=attachment.name, mimetype=attachment.content_type, content=attachment.read()) 
     mail.send() 

ich die Mail erhalten, sondern die Anlage in der E-Mail ist leer, das heißt es keine Inhalte enthält. Was fehlt mir hier?

Antwort

1

ich das Problem gelöst habe, legte ich die form.save () am Ende, dh nach dem Senden der Mail und das Problem gelöst. Der Grund dafür ist, dass sobald wir form.save() verwenden, der Anhang in seinem Pfad gespeichert wird und wir ihn öffnen müssen, bevor wir ihn lesen.

form = RequestForm(request.POST, request.FILES) 
if form.is_valid(): 
     messages.info(request, '') 
     subject = '' 
     message = "" 
     attachment = request.FILES['attachment'] 
     mail = EmailMessage(subject, message, '', ['']) 
     mail.attach(filename=attachment.name, mimetype=attachment.content_type, content=attachment.read()) 
     mail.send() 
     form.save() 
0

Ich glaube, dass Sie attach_file anstelle von attach verwenden müssen. attach_file ermöglicht es Ihnen, einen Pfad zu übergeben, während Sie die eigentlichen Daten mit attach übergeben müssen. Siehe docs.

Auch Test, dass Ihre Befestigung tatsächlich hochgeladen bekommen, dass Sie die richtige enctype auf dem Formular angegeben, usw. Zum Beispiel:

<form enctype="multipart/form-data" action="/whatever/" method="post"> 
Verwandte Themen