2010-04-20 5 views
6

L'exécution d'une erreur très étrange. Je cours Django sur mon Mac OSX et quand j'ai essayé d'envoyer un email de mon application il se bloque et me donne cette erreur: "Erreur 61 Connection Refused"Django send_mail renvoie une erreur 61 refusée sous Mac OSX

Des idées? Je n'ai pas mon pare-feu allumé. Je peux télécharger une image de l'erreur si nécessaire.

+0

Cool. J'ai donc ajouté des configs dans mes settings.py mais maintenant je reçois ceci: "Erreur 60, opération expirée". Exception Emplacement: ... python2.6/socket.py dans create_connection – mymmaster

Répondre

3

Avez-vous configuré les paramètres EMAIL_* dans settings.py? Erreur 61 est l'erreur que vous obtenez si vous laissez sur les valeurs par défaut et vous n'avez pas un serveur SMTP local en cours d'exécution. Comme l'indique Peter, si vous l'avez configuré, vous devrez peut-être utiliser l'authentification avec votre serveur SMTP.

+0

Merci. Laissez-moi vérifier cela. – mymmaster

+0

mise à jour publiée ci-dessus! – mymmaster

1

Étant totalement ignorant Max OS X, ma première supposition serait que votre serveur SMTP nécessite une authentification.

1

est simple, si sendmail fonctionne via la ligne de commande, copiez le code de http://djangosnippets.org/snippets/1864/ dans un fichier appelé sendmail.py

"""sendmail email backend class.""" 

import threading 

from django.conf import settings 
from django.core.mail.backends.base import BaseEmailBackend 
from subprocess import Popen,PIPE 

class EmailBackend(BaseEmailBackend): 
    def __init__(self, fail_silently=False, **kwargs): 
     super(EmailBackend, self).__init__(fail_silently=fail_silently) 
     self._lock = threading.RLock() 

    def open(self): 
     return True 

    def close(self): 
     pass 

    def send_messages(self, email_messages): 
     """ 
     Sends one or more EmailMessage objects and returns the number of email 
     messages sent. 
     """ 
     if not email_messages: 
      return 
     self._lock.acquire() 
     try: 
      num_sent = 0 
      for message in email_messages: 
       sent = self._send(message) 
       if sent: 
        num_sent += 1 
     finally: 
      self._lock.release() 
     return num_sent 

    def _send(self, email_message): 
     """A helper method that does the actual sending.""" 
     if not email_message.recipients(): 
      return False 
     try: 
      ps = Popen(["sendmail"]+list(email_message.recipients()), \ 
         stdin=PIPE) 
      ps.stdin.write(email_message.message().as_string()) 
      ps.stdin.flush() 
      ps.stdin.close() 
      return not ps.wait() 
     except: 
      if not self.fail_silently: 
       raise 
      return False 
     return True 

A l'intérieur des paramètres .py, définissez la variable:

EMAIL_BACKEND = 'path.to.sendmail.EmailBackend' 
+1

Bienvenue dans le débordement de la pile. – qdot