2010-03-16 9 views
22

Sto cercando di inviare e-mail con alcune immagini allegate in django. Il codice utilizzato è questo snippet: http://www.djangosnippets.org/snippets/1063/. Non so perché la parte di allegato mi restituisce un errore di base.Invio di e-mail con allegato in django

Il codice. 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)) 

e l'immagine del sito errore qui è: http://img201.imageshack.us/img201/6027/coreerror.png Che cosa sto facendo di sbagliato?

risposta

24

Il traceback di errore che hai pubblicato non sembra avere nulla a che fare con il codice reale - sembra essere una sorta di problema con il middleware (presumibilmente quando si esegue il rendering della pagina di errore 500).

Tuttavia, l'errore è probabilmente causato dall'utilizzo del nome variabile non definito attach nelle chiamate a mail.attach. Non hai una variabile attach - hai chiamato i file pubblicati image1 ecc, quindi dovresti usare quei nomi.

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

corretto, grazie! – owca