Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/08/2014, 14:29
Avatar de kojicomics
kojicomics
 
Fecha de Ingreso: junio-2013
Mensajes: 49
Antigüedad: 10 años, 10 meses
Puntos: 1
Enviar Email desde Django

Hola, estoy intentando enviar un email desde un formulario en Django pero algo falla

He visto que Django tiene dos funciones para enviar emails: send_email y EmailMessage.

Al parecer la segunda es más actual y permite más funciones, pero he probado con ambas y ninguna me ha funcionado

Los ficheros que utilizo son los siguientes:

"apps/contact/forms.py"
Código Python:
Ver original
  1. from django import forms
  2.  
  3.  
  4. class ContactForm(forms.Form):
  5.     subject = forms.CharField(max_length=100)
  6.     message = forms.CharField(widget=forms.Textarea)
  7.     sender = forms.EmailField()
  8.     cc_myself = forms.BooleanField(required=False)

"apps/contact/urls.py"
Código Python:
Ver original
  1. from django.conf.urls import patterns, include, url
  2. from .views import *
  3.  
  4.  
  5. urlpatterns = patterns('',
  6.     url(r'^$', ContactFormView.as_view(), name='contact'),
  7.     )

"apps/contact/views.py"
Código Python:
Ver original
  1. from django.views.generic import FormView
  2. from django.core.mail import EmailMessage
  3. from django.core.urlresolvers import reverse_lazy
  4. from .forms import ContactForm
  5.  
  6.  
  7. class ContactFormView(FormView):
  8.     template_name = 'contact/form.html'
  9.     form_class = ContactForm
  10.     success_url = reverse_lazy('contact')
  11.  
  12.     def form_valid(self, form):
  13.         subject = form.cleaned_data['subject']
  14.         message = form.cleaned_data['message']
  15.         sender = form.cleaned_data['sender']
  16.         recipients = ['[email protected]']
  17.         cc_myself = form.cleaned_data['cc_myself']
  18.  
  19.         if cc_myself:
  20.             recipients.append(sender)
  21.  
  22.         mail = EmailMessage(subject, message, sender, recipients)
  23.  
  24.         mail.send()
  25.  
  26.         return super(ContactFormView, self).form_valid(form)

"templates/contact/form.html"
Código Python:
Ver original
  1. {% extends 'general/base.html' %}
  2. {% load i18n %}
  3.  
  4. {% block head %}Contacta{% endblock %}
  5.  
  6. {% block title %} Contacta {% endblock %}
  7.  
  8. {% block content %}
  9.     <div class="form-div">
  10.         <form action="/contact/" method='POST'>
  11.         {% csrf_token %}
  12.             {% for field in form %}
  13.                 {% ifequal field.name "subject" %}
  14.                     <input id="id_subject" type="text" name="subject" placeholder="{% trans 'Subject' %}"/>
  15.                 {% else %}{% ifequal field.name "message" %}
  16.                     <textarea id="id_message" rows="5" cols="40" placeholder="{% trans 'Message' %}"></textarea>
  17.                 {% else %}{% ifequal field.name "sender" %}
  18.                     <input id ="id_sender" type="email" name="sender" placeholder="{% trans 'Email' %}"/>
  19.                 {% else %}{% ifequal field.name "cc_myself" %}
  20.                     <div class="checkbox">
  21.                         <input id="id_cc_myself" type="checkbox" name="cc_myself" />
  22.                         <label for="id_cc_myself">{% trans 'CC Myself' %}</label>
  23.                     </div>
  24.                 {% else %}{{ field }}
  25.                 {% endifequal %}{% endifequal %}{% endifequal %}{% endifequal %}
  26.             {% endfor %}
  27.             <p class="submit">
  28.                 <input type="submit" name="mail" class="button" value="{% trans 'Send' %}" />
  29.             </p>
  30.         </form>
  31.     </div>
  32. {% endblock %}

"settings.py"
Código Python:
Ver original
  1. EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
  2. EMAIL_HOST = 'smtp.gmail.com'
  3. EMAIL_PORT = 587
  4. EMAIL_HOST_USER = '[email protected]'
  5. EMAIL_HOST_PASSWORD = 'pass'
  6. EMAIL_USE_TLS = True

He probado a enviarlo desde consola mediante "python manage.py shell" y ha funcionado correctamente

¿Alguna idea?

Gracias