Envoyer des e-mails en pièce jointe à django

j'essaie d'envoyer un e-mail avec des images attachées à django. Code used is this snippet:http://www.djangosnippets.org/snippets/1063/. Je ne sais pas pourquoi la pièce jointe me renvoie une erreur de base.

le 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))

et voici l'image du site d'erreur : http://img201.imageshack.us/img201/6027/coreerror.png Ce que je fais mal ?

24
demandé sur einverne 2010-03-16 23:33:40

1 réponses

le traceback d'erreur que vous avez posté ne semble pas avoir quoi que ce soit à voir avec le code réel - il semble être une sorte de problème avec middleware (probablement lors du rendu de la page d'erreur 500).

cependant, votre erreur est probablement causée par votre utilisation du nom de la variable non définie attach dans les appels à mail.attach. Tu n'as pas de attach variable-vous avez appelé les fichiers postés image1 etc, donc vous devriez utiliser ces noms.

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)
26
répondu Daniel Roseman 2010-03-16 20:57:20