"Отказано в доступе" при попытке отправить письмо с подтверждением

Я запускаю веб-сайт django на сервере fedora (Fedora release 15 (Lovelock)) с помощью Apache и mod_wsgi. недавно я попытался добавить систему регистрации с помощью приложения django-registration (версия 0.7), но, к сожалению, я получаю "[Errno 13] разрешение отказано", когда приложение пытается отправить подтверждение по электронной почте новому зарегистрированному пользователю. Я настроил файл настроек моего проекта для отправки писем с помощью учетной записи 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:

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 ответов


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

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


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


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

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

удалить @domain.com в EMAIL_HOST_USER Так что это будет просто myemailaddress