6

我正在使用 Apache 和 mod_wsgi 在 Fedora 服务器(Fedora 版本 15 (Lovelock))上运行 django 网站。最近我尝试使用 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

当我在使用项目的 shell 时手动导入 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

这是完整的追溯:

追溯:
get_response 中的文件“/usr/lib/python2.7/site-packages/django/core/handlers/base.py”
  111. 响应 = 回调(请求,*callback_args,**callback_kwargs)
注册中的文件“/.../lib/registration/views.py”
  148. new_user = form.save(profile_callback=profile_callback)
保存文件“/.../lib/registration/forms.py”
  88. 发送电子邮件 = 真)
create_inactive_user 中的文件“/.../lib/registration/models.py”
  127. send_mail(主题,消息,设置。DEFAULT_FROM_EMAIL,[new_user.email])
send_mail 中的文件“/usr/lib/python2.7/site-packages/django/core/mail/__init__.py”
  61. 连接=连接).send()
发送中的文件“/usr/lib/python2.7/site-packages/django/core/mail/message.py”
  251. return self.get_connection(fail_silently).send_messages([self])
send_messages 中的文件“/usr/lib/python2.7/site-packages/django/core/mail/backends/smtp.py”
  79. new_conn_created = self.open()
打开文件“/usr/lib/python2.7/site-packages/django/core/mail/backends/smtp.py”
  42. local_hostname=DNS_NAME.get_fqdn())
__init__ 中的文件“/usr/lib64/python2.7/smtplib.py”
  239.(代码,味精)= self.connect(主机,端口)
连接中的文件“/usr/lib64/python2.7/smtplib.py”
  295. self.sock = self._get_socket(主机,端口,self.timeout)
_get_socket 中的文件“/usr/lib64/python2.7/smtplib.py”
  273.返回socket.create_connection((端口,主机),超时)
create_connection 中的文件“/usr/lib64/python2.7/socket.py”
  571.引发错误

异常类型:/accounts/register/ 处的错误
异常值:[Errno 13] 权限被拒绝
4

3 回答 3

9

这可能会被 SELinux 阻止。我会检查这些日志,看看它是否拒绝了你的许可。您可能可以在 /var/log/audit/audit.log 找到主日志 尝试该操作并查看它是否在日志末尾生成一条新消息。如果是这样,是 SELinux 不允许发送电子邮件。如果这导致拒绝,那么您需要更新您的 SELinux 策略,可能使用 audit2allow。有关如何执行此操作的说明,请参阅SELinux CentOS Howto。CentOS 和 Fedora 足够接近,如果 SELinux 是拒绝该行动的原因,那么那里概述的步骤应该可以工作。如果不是,那么显然,这将是无关紧要的。

您还可以尝试使用该命令暂时禁用 SELinux 强制setenforce 0,看看问题是否消失。无论是否这样做,使用它setenforce 1来重新启用执法都是一个好主意。

于 2011-10-27T06:57:12.617 回答
1

这可能是 IO 错误。您是否正在执行任何打印语句或将内容写入您视图中的文件?如果是这样,您可能会遇到权限问题。请检查并回复。

于 2011-10-27T09:24:07.620 回答
0

这些是您必须添加到 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

于 2011-10-27T07:00:30.797 回答