【问题标题】:Sending emails with attachment in django在 django 中发送带附件的电子邮件
【发布时间】:2011-01-28 07:28:48
【问题描述】:

我正在尝试发送带有 django 中附加的一些图像的电子邮件。使用的代码是这个 sn-p:http://www.djangosnippets.org/snippets/1063/。我不知道,为什么附件部分返回核心错误。

代码。 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))

这是错误站点图片: http://img201.imageshack.us/img201/6027/coreerror.png 我做错了什么?

【问题讨论】:

    标签: django django-forms attachment


    【解决方案1】:

    您发布的错误回溯似乎与实际代码没有任何关系 - 这似乎是中间件的某种问题(大概是在呈现 500 错误页面时)。

    但是,您的错误可能是由于您在对mail.attach 的调用中使用了未定义的变量名称attach 而引起的。您没有 attach 变量 - 您已将发布的文件称为 image1 等,因此您应该使用这些名称。

    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)
    

    【讨论】:

    【解决方案2】:

    在 Django 中发送带有附件的邮件

    forms.py

    from django import forms
    
    
    class SendMailForm(forms.Form):
        email_id = forms.EmailField()
        email_cc = forms.EmailField()
        email_bcc = forms.EmailField()
        subject = forms.CharField(max_length=200)
        msg = forms.CharField(widget=forms.Textarea)
        attachment = forms.FileField()
    

    views.py

    from django.core.mail import EmailMessage
    from django.shortcuts import render, HttpResponse, HttpResponseRedirect
    
    from .forms import SendMailForm
    
    
    # Create your views here.
    def simple_send_mail(request):
        if request.method == 'POST':
            fm = SendMailForm(request.POST or None, request.FILES or None)
            if fm.is_valid():
                subject = fm.cleaned_data['subject']
                message = fm.cleaned_data['msg']
                from_mail = request.user.email
                print(from_mail)
                to_mail = fm.cleaned_data['email_id']
                to_cc = fm.cleaned_data['email_cc']
                to_bcc = fm.cleaned_data['email_bcc']
                print(fm.cleaned_data)
                attach = fm.cleaned_data['attachment']
                if from_mail and to_mail:
                    try:
                        mail = EmailMessage(subject=subject, body=message, from_email=from_mail, to=[to_mail], bcc=[to_bcc],
                                            cc=[to_cc]
                                            )
                        mail.attach(attach.name, attach.read(), attach.content_type)
                        mail.send()
                    # except Exception as ex:
                    except ArithmeticError as aex:
                        print(aex.args)
                        return HttpResponse('Invalid header found')
                    return HttpResponseRedirect('/mail/thanks/')
                else:
                    return HttpResponse('Make sure all fields are entered and valid.')
        else:
            fm = SendMailForm()
        return render(request, 'mail/send_mail.html', {'fm': fm})
    

    settings.py

    # Email Configurations
    
    # DEFAULT_FROM_EMAIL = ''
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_HOST_USER = 'example@abc.com'
    EMAIL_HOST_PASSWORD = '************'
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True
    

    send_mail.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Mail</title>
    </head>
    <body>
        <form method="POST" action="" enctype="multipart/form-data">
            {% csrf_token %}
            <center><h1>Mail send from "{{request.user.email}}"</h1></center>
            {{fm.as_p}}
            <input type="submit" value="Send">
        </form>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-11
      • 2015-08-28
      • 2014-04-24
      • 1970-01-01
      • 2014-04-23
      • 2019-03-09
      • 2015-09-09
      相关资源
      最近更新 更多