Не удается подключиться к серверу SMTP с Django при использовании gevent socket.py - PullRequest
5 голосов
/ 16 августа 2011

Я запускаю приложение django на gunicorn 0.12.2 с использованием gevent и установлен в среде virtualenv.Когда я пытаюсь подключиться к smtp.gmail.com (представление создания учетной записи django-регистрации), я получаю следующую ошибку:

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

РЕДАКТИРОВАТЬ: добавлена ​​полная трассировка

Ответы [ 3 ]

7 голосов
/ 19 августа 2011

порт был строкой. это приводило к нешифруемой ошибке, когда она передавалась в _socket.getservbyname (), которая ожидает строку, такую ​​как 'smtp'.

5 голосов
/ 02 декабря 2012

У меня была такая же проблема при попытке использовать переменную окружения в моем settings.py для EMAIL_PORT.Переменная окружения возвращает строку по умолчанию, но порт должен быть целым числом.Я изменил свои настройки с:

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

на:

EMAIL_PORT = int(os.environ.get('MAILGUN_SMTP_PORT', 25))
0 голосов
/ 16 августа 2011

Не могли бы вы попробовать gevent-1.0a2 ? У него совершенно другая реализация DNS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...