2010-04-20 34 views
6

Chạy vào lỗi rất nghiêm trọng. Tôi đang chạy Django trên Mac OSX của tôi và khi tôi cố gắng gửi một email từ ứng dụng của tôi nó treo và đưa cho tôi lỗi này: "Lỗi 61 kết nối bị từ chối"Kết quả Django send_mail bị lỗi 61 bị từ chối trên Mac OSX

Bất kỳ ý tưởng nào? Tôi chưa bật tường lửa của mình. Tôi có thể tải lên hình ảnh lỗi nếu cần.

+0

Làm mát. Vì vậy, tôi đã thêm cấu hình trong settings.py của mình nhưng bây giờ tôi nhận được điều này: "Lỗi 60, Thời gian hoạt động đã hết". Vị trí ngoại lệ: ... python2.6/socket.py trong create_connection – mymmaster

Trả lời

3

Bạn có thực sự đã định cấu hình cài đặt EMAIL_* trong settings.py không? Lỗi 61 là lỗi bạn nhận được nếu bạn để nó trên các giá trị mặc định và bạn không có máy chủ SMTP cục bộ đang chạy.

Ngoài ra, như Peter gợi ý, nếu bạn đã thiết lập, bạn có thể cần sử dụng xác thực với máy chủ SMTP của mình.

+0

Cảm ơn. Hãy để tôi kiểm tra điều này. – mymmaster

+0

cập nhật được đăng ở trên! – mymmaster

1

Hoàn toàn không biết về Max OS X, dự đoán đầu tiên của tôi là máy chủ SMTP của bạn yêu cầu xác thực.

1

của nó đơn giản, nếu sendmail làm việc thông qua dòng lệnh, sao chép mã từ http://djangosnippets.org/snippets/1864/ vào một tập tin gọi 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 

Bên trong các thiết lập .py, đặt biến:

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

Chào mừng bạn đến ngăn xếp tràn. – qdot

Các vấn đề liên quan