2010-04-20 3 views
6

Запуск очень странной ошибки. Я запускаю Django на своем Mac OSX, и когда я попытался отправить электронное письмо из своего приложения, он зависает и дает мне эту ошибку: «Ошибка 61 Connection Refused»Django send_mail результаты с ошибкой 61 отказались от Mac OSX

Любые идеи? У меня нет брандмауэра. При необходимости я могу загрузить изображение ошибки.

+0

Прохладный. Поэтому я добавил конфиги в свои настройки.py, но теперь я получаю следующее: «Ошибка 60,« Время выполнения операции ». Исключение Место: ... python2.6/socket.py в create_connection – mymmaster

ответ

3

Действительно ли вы настроили настройки EMAIL_* в settings.py? Ошибка 61 - это ошибка, которую вы получите, если оставить ее по умолчанию, и у вас нет локального сервера SMTP.

В качестве альтернативы, как предлагает Питер, если вы настроили его, вам может потребоваться использовать аутентификацию с вашим SMTP-сервером.

+0

Спасибо. Позвольте мне проверить это. – mymmaster

+0

обновление опубликовано выше! – mymmaster

1

Будучи полностью незнакомым с Max OS X, я предполагаю, что ваш SMTP-сервер требует аутентификации.

1

Его простой, если Sendmail работает через командную строку, скопировать код из http://djangosnippets.org/snippets/1864/ в файл с именем 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 

Внутри настроек .py, установите переменную:

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

Добро пожаловать в переполнение стека. – qdot