2011-08-15 22 views
5

我在使用gevent的gunicorn 0.12.2上運行django應用程序並安裝在virtualenv環境中。當我嘗試連接到smtp.gmail.com(Django的註冊帳戶創建視圖)我得到以下錯誤:當使用gevent socket.py時,無法使用Django連接到smtp服務器

Traceback: 
File "/home/.../env/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args,  **callback_kwargs) 
File "/home/.../web/www/registration/views.py" in register 
    148.    new_user = form.save(profile_callback=profile_callback) 
File "/home/.../web/www/registration/forms.py" in save 
    87.                profile_callback=profile_callback) 
File "/home/.../web/www/registration/models.py" in create_inactive_user 
    127.    send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [new_user.email]) 
File "/home/.../env/lib/python2.6/site-packages/django/core/mail/__init__.py" in send_mail 
    61.       connection=connection).send() 
File "/home/.../env/lib/python2.6/site-packages/django/core/mail/message.py" in send 
    251.   return self.get_connection(fail_silently).send_messages([self]) 
File "/home/.../env/lib/python2.6/site-packages/django/core/mail/backends/smtp.py" in send_messages 
    79.    new_conn_created = self.open() 
File "/home/.../env/lib/python2.6/site-packages/django/core/mail/backends/smtp.py" in open 
    42.           local_hostname=DNS_NAME.get_fqdn()) 
File "/usr/lib/python2.6/smtplib.py" in __init__ 
    239.    (code, msg) = self.connect(host, port) 
File "/usr/lib/python2.6/smtplib.py" in connect 
    295.   self.sock = self._get_socket(host, port, self.timeout) 
File "/usr/lib/python2.6/smtplib.py" in _get_socket 
    273.   return socket.create_connection((port, host), timeout) 
File "/usr/lib/python2.6/socket.py" in create_connection 
    500.  for res in getaddrinfo(host, port, 0, SOCK_STREAM): 
File "/home/.../env/lib/python2.6/site-packages/gevent-1.0a2-py2.6-linux-x86_64.egg/gevent/socket.py" in getaddrinfo 
    653.  return get_hub().resolver.getaddrinfo(host, port, family, socktype, proto, flags) 
File "/home/.../env/lib/python2.6/site-packages/gevent-1.0a2-py2.6-linux-x86_64.egg/gevent/resolver_ares.py" in getaddrinfo 
    149.     return self._getaddrinfo(host, port, family, socktype, proto, flags) 
File "/home/.../env/lib/python2.6/site-packages/gevent-1.0a2-py2.6-linux-x86_64.egg/gevent/resolver_ares.py" in _getaddrinfo 
    98.   port, socktype = self._lookup_port(port, socktype) 
File "/home/.../env/lib/python2.6/site-packages/gevent-1.0a2-py2.6-linux-x86_64.egg/gevent/resolver_ares.py" in _lookup_port 
    80.      raise gaierror(EAI_SERVICE, 'Servname not supported for ai_socktype') 

Exception Type: gaierror at /accounts/register/ 
Exception Value: [Errno -8] Servname not supported for ai_socktype 

編輯:添加了完整的追溯

回答

7

該端口是一個字符串。當它傳遞給_socket.getservbyname()時會導致無法解讀的錯誤,該錯誤需要一個字符串,例如'smtp'。

0

你能嘗試gevent-1.0a2?它有一個完全不同的DNS實現。

+0

我試了一下,沒有骰子... – Kevin

+0

你能給予充分的追蹤? –

+0

發佈已更新 – Kevin

5

我嘗試在EMAIL_PORT的settings.py中使用環境變量時遇到了同樣的問題。該環境變量默認返回一個字符串,但該端口必須是一個整數。

EMAIL_PORT = os.environ.get('MAILGUN_SMTP_PORT', 25) 

到:從我改變了我的設置

EMAIL_PORT = int(os.environ.get('MAILGUN_SMTP_PORT', 25)) 
相關問題