2010-04-20 7 views
6

Se ejecuta en un error muy común. Estoy ejecutando Django en mi Mac OSX y cuando traté de enviar un correo electrónico desde mi aplicación se cuelga y me da este error: "Error 61 Conexión rechazada"Django send_mail resultados en el error 61 se negó en Mac OSX

¿Alguna idea? No tengo mi firewall activado. Puedo subir una imagen del error si es necesario.

+0

Cool. Así que agregué configuraciones en mi settings.py pero ahora obtengo esto: "Error 60, Tiempo de espera de la operación". Ubicación de excepción: ... python2.6/socket.py en create_connection – mymmaster

Respuesta

3

¿Ha configurado realmente las configuraciones EMAIL_* en settings.py? El error 61 es el error que obtiene si lo deja en los valores predeterminados y no tiene un servidor SMTP local ejecutándose.

Alternativamente, como sugiere Peter, si lo ha configurado, es posible que necesite utilizar la autenticación con su servidor SMTP.

+0

Gracias. Déjame ver esto. – mymmaster

+0

actualización publicada arriba! – mymmaster

1

Siendo totalmente ignorante de Max OS X, mi primera suposición sería que su servidor SMTP requiere autenticación.

1

Su simple, si Sendmail funciona a través de línea de comandos, copiar el código de http://djangosnippets.org/snippets/1864/ en un archivo llamado 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 

Dentro de los ajustes .py, establecer la variable:

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

Bienvenido al desbordamiento de pila. – qdot

Cuestiones relacionadas