«Отказано в доступе» при попытке отправить письмо с подтверждением - PullRequest
6 голосов
/ 27 октября 2011

Я использую веб-сайт django на сервере fedora (Fedora, выпуск 15 (Lovelock)), используя Apache и mod_wsgi. Недавно я попытался добавить систему регистрации с помощью приложения django-registration (версия 0.7), но, к сожалению, я получаю сообщение «[Errno 13] Permission denied», когда приложение пытается отправить подтверждающее письмо вновь зарегистрированному пользователю. Я настроил файл настроек моего проекта для отправки писем с использованием учетной записи Gmail следующим образом:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'myemailaddress@gmail.com'
EMAIL_HOST_PASSWORD = 'mypassword'
EMAIL_PORT = 587

Я могу отправлять электронные письма, когда вручную импортирую send_mail при использовании оболочки проекта. Я ничего не изменил во взглядах или моделях. вот файл шаблона регистрации:

{% extends "base.html" %}
{% load i18n %}

{% block content %}
<form method="post" action="/accounts/register/">
  {% csrf_token %}
  {{ form }}
  <input type="submit" value="Register"/>
</form>
{% endblock %}

и вот ошибка, которую я получаю:

[Errno 13] Permission denied
Request Method: POST
Request URL:    http://myip/accounts/register/
Django Version: 1.3.1
Exception Type: error
Exception Value:    
[Errno 13] Permission denied
Exception Location: /usr/lib64/python2.7/socket.py in create_connection, line 571

это полная трассировка:

Traceback:
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/.../lib/registration/views.py" in register
  148.             new_user = form.save(profile_callback=profile_callback)
File "/.../lib/registration/forms.py" in save
  88.                                                                     send_email = True)
File "/.../lib/registration/models.py" in create_inactive_user
  127.             send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [new_user.email])
File "/usr/lib/python2.7/site-packages/django/core/mail/__init__.py" in send_mail
  61.                         connection=connection).send()
File "/usr/lib/python2.7/site-packages/django/core/mail/message.py" in send
  251.         return self.get_connection(fail_silently).send_messages([self])
File "/usr/lib/python2.7/site-packages/django/core/mail/backends/smtp.py" in send_messages
  79.             new_conn_created = self.open()
File "/usr/lib/python2.7/site-packages/django/core/mail/backends/smtp.py" in open
  42.                                            local_hostname=DNS_NAME.get_fqdn())
File "/usr/lib64/python2.7/smtplib.py" in __init__
  239.             (code, msg) = self.connect(host, port)
File "/usr/lib64/python2.7/smtplib.py" in connect
  295.         self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib64/python2.7/smtplib.py" in _get_socket
  273.         return socket.create_connection((port, host), timeout)
File "/usr/lib64/python2.7/socket.py" in create_connection
  571.         raise err

Exception Type: error at /accounts/register/
Exception Value: [Errno 13] Permission denied

Ответы [ 3 ]

9 голосов
/ 27 октября 2011

Это может быть предотвращено SELinux.Я бы проверил эти журналы и посмотрел, отказывает ли вам в этом разрешение.Вероятно, вы можете найти основной журнал в /var/log/audit/audit.log Попробуйте выполнить действие и посмотрите, генерирует ли оно новое сообщение в конце журнала.Если это так, то SELinux запрещает отправку электронной почты.Если это приводит к отказу, вам необходимо обновить политику SELinux, возможно, с использованием audit2allow.Инструкции о том, как это сделать, см. В SELinux CentOS Howto .CentOS и Fedora достаточно близки, чтобы описанные здесь шаги работали, если SELinux - это то, что отрицает действие.Если нет, то, очевидно, это не имеет значения.

Вы также можете попытаться временно отключить принудительное применение SELinux с помощью команды setenforce 0 и посмотреть, исчезнет ли проблема.Независимо от того, работает он или нет, рекомендуется использовать setenforce 1, чтобы снова включить принудительное применение.

1 голос
/ 27 октября 2011

Это может быть ошибка ввода-вывода. Делаете ли вы какие-либо заявления для печати или пишете что-то в файл по вашему мнению? Если это так, у вас могут возникнуть проблемы с разрешениями. Пожалуйста, проверьте и ответьте.

0 голосов
/ 27 октября 2011

Это строки, которые вы должны добавить в настройки.py:

EMAIL_HOST = 'smtp.webfaction.com'
EMAIL_HOST_USER = '<mailbox>'
EMAIL_HOST_PASSWORD = '<password>'
DEFAULT_FROM_EMAIL = '<address>'
SERVER_EMAIL = '<address>'

delete @ domain.com в EMAIL_HOST_USER, так что это будет просто myemailaddress

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