Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending emails with attachment in django

I'm trying to send email with some images attached in django. Code used is this snippet : http://www.djangosnippets.org/snippets/1063/. I don't know, why the attachment part returns me a core error.

The code. forms.py

from django import forms from common import slugify_unique from django.conf import settings from django.core.cache import cache from django.contrib.admin import widgets     from django.shortcuts import get_object_or_404                                     class WorkForm(forms.Form):     name = forms.CharField(label='Name and surname', max_length=64, required = True )     nick = forms.CharField(label='nickname', max_length=40, required = True )     email = forms.EmailField(label='e-mail', required = True )     image1 = forms.Field(label='sample photo', widget = forms.FileInput,    required = True )     image2 = forms.Field(label='sample photo', widget = forms.FileInput, required = True )     image3 = forms.Field(label='sample photo', widget = forms.FileInput, required = True )     text = forms.CharField(label='Few words about you', widget=forms.Textarea, required = False ) 

views.py

from forms import WorkForm from django.core.mail import send_mail, EmailMessage   def work(request):     template = 'other/work.html'                                       if request.method == 'POST':         form = WorkForm(request.POST, request.FILES)         if form.is_valid():             name = form.cleaned_data['name']             nick = form.cleaned_data['nick']             email = form.cleaned_data['email']             subject = 'Work'             text = form.cleaned_data['text']             image1 = request.FILES['image1']             image2 = request.FILES['image2']             image3 = request.FILES['image3']             try:                 mail = EmailMessage(subject, text, ['EMAIL_ADDRESS'], [email])                 mail.attach(image1.name, attach.read(), attach.content_type)                 mail.attach(image2.name, attach.read(), attach.content_type)                 mail.attach(image3.name, attach.read(), attach.content_type)                 mail.send()                 template = 'other/mail_sent.html'             except:                 return "Attachment error"             return render_to_response(template, {'form':form},                               context_instance=RequestContext(request))        else:         form = WorkForm()                                   return render_to_response(template, {'form':form},                   context_instance=RequestContext(request)) 

And here's error site image : http://img201.imageshack.us/img201/6027/coreerror.png What am I doing wrong ?

like image 714
sasklacz Avatar asked Mar 16 '10 20:03

sasklacz


People also ask

How do I email a PDF in Django?

attach("document. pdf", pdf_file. read())' you can take your instance of PDFTemplateResponse (let's call the instance variable "res") and use 'message. attach("document.

How do I send an email in Django?

In most cases, you can send email using django.core.mail.send_mail() . The subject , message , from_email and recipient_list parameters are required.

How do I send multiple emails in Django?

How to send multiple mass emails django. We need to create a Tuple of messages and send them using send mass mail. In this tutorial, we create a project which sends email using Django. We fill the data in the form and send it using Django Email.


1 Answers

The error traceback you've posted doesn't seem to have anything to do with the actual code - it seems to be some sort of problem with middleware (presumably when rendering the 500 error page).

However, your error is probably caused by your use of the undefined variable name attach in the calls to mail.attach. You don't have an attach variable - you've called the posted files image1 etc, so you should use those names.

mail.attach(image1.name, image1.read(), image1.content_type) mail.attach(image2.name, image2.read(), image2.content_type) mail.attach(image3.name, image3.read(), image3.content_type) 
like image 179
Daniel Roseman Avatar answered Oct 16 '22 20:10

Daniel Roseman