2010-04-20 11 views
6

Errore di stange. Sto eseguendo Django sul mio Mac OSX e quando ho provato a inviare una email dalla mia applicazione si blocca e mi dà questo errore: "Errore 61 Connessione rifiutata"Django send_mail ha dato un errore 61 rifiutato su Mac OSX

Qualche idea? Non ho il mio firewall acceso. Posso caricare un'immagine dell'errore se necessario.

+0

Freddo. Così ho aggiunto configs nel mio settings.py ma ora ho capito: "Errore 60, operazione scaduta". Posizione eccezione: ... python2.6/socket.py in create_connection – mymmaster

risposta

3

Avete effettivamente configurato le impostazioni EMAIL_* in settings.py? Errore 61 è l'errore che si ottiene se si lascia sui valori predefiniti e non si dispone di un server SMTP locale in esecuzione.

In alternativa, come suggerisce Peter, se è stato impostato, potrebbe essere necessario utilizzare l'autenticazione con il server SMTP.

+0

Grazie. Fammi controllare in questo. Aggiornamento – mymmaster

+0

pubblicato sopra! – mymmaster

1

Essendo totalmente ignaro Max OS X, la mia prima ipotesi sarebbe che il server SMTP richiede l'autenticazione.

1

La sua semplice, se sendmail funziona tramite linea di comando, copiare il codice da http://djangosnippets.org/snippets/1864/ in un file chiamato 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 

All'interno di impostazioni .py, impostare la variabile:

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

Benvenuti nello stack overflow. – qdot