"Отказано в доступе" при попытке отправить письмо с подтверждением
Я запускаю веб-сайт 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