2012-04-30 5 views
9

Lorsque la vue qui envoie l'email est utilisée, rien ne se passe, j'ai alors entré send_mail (...) dans le shell python et il est revenu 1 mais je n'ai reçu aucun email.Django send_mail ne fonctionne pas

Ceci est mon settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = '[email protected]' 
EMAIL_USE_TLS = True 

Voici la vue:

def send_email(request): 
    send_mail('Request Callback', 'Here is the message.', '[email protected]', 
     ['[email protected]'], fail_silently=False) 
    return HttpResponseRedirect('/') 
+0

Avez-vous consulté votre boîte de réception? Avez-vous créé l'enregistrement SPF? http://support.google.com/a/bin/answer.py?hl=fr&answer=33786 – jpic

Répondre

10

ainsi ajuster vos paramètres:

DEFAULT_FROM_EMAIL = '[email protected]' 
SERVER_EMAIL = '[email protected]' 
EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = '[email protected]' 

Adjust votre code:

from django.core.mail import EmailMessage 

def send_email(request): 
    msg = EmailMessage('Request Callback', 
         'Here is the message.', to=['[email protected]']) 
    msg.send() 
    return HttpResponseRedirect('/') 
0

Si vous ne se soucient paspour empêcher l'injection d'en-tête: (vous devriez en soucier: https://docs.djangoproject.com/es/1.9/topics/email/#preventing-header-injection, mais nous allons continuer)

Le settings.py:

EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'pass' 
EMAIL_USE_TLS = True 

Le views.py (exemple) :

from django.views.generic import View 
from django.core.mail import send_mail 
from django.http import HttpResponse, HttpResponseRedirect 

class Contacto(View): 
     def post(self, request, *args, **kwargs): 
      data = request.POST 
      name = data.get('name', '') 
      subject = "Thanks %s !" % (name) 
      send_mail(subject, data.get('message', ''), '[email protected]', [data.get('email', '')], fail_silently=False) 
     return HttpResponseRedirect('/') 

Il s'agit d'une manière dangereuse d'envoyer un e-mail

Lorsque vous essayez d'envoyer l'e-mail pour la première fois, vous recevez un e-mail de recommandation de ne pas le faire. Vous devez activer les applications moins sécurisées (https://www.google.com/settings/security/lesssecureapps) et réessayer. Deuxième fois fonctionne.