2011-10-27 25 views
6

Estoy ejecutando un sitio web django en un servidor fedora (versión 15 de Fedora (Lovelock)) usando Apache y mod_wsgi. Recientemente traté de agregar un sistema de registro usando la aplicación django-registration (versión 0.7), pero desafortunadamente recibí un "[Errno 13] Permiso denegado" cuando la aplicación está tratando de enviar un correo electrónico de verificación a un usuario recién registrado. He configurado el archivo de configuración de mi proyecto para enviar mensajes de correo electrónico con una cuenta de Gmail de esta manera:"Permiso denegado" al intentar enviar un correo electrónico de verificación

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'mypassword' 
EMAIL_PORT = 587 

puedo enviar mensajes de correo electrónico al importar manualmente send_mail durante el uso de la cáscara del proyecto. No he cambiado nada en las vistas o modelos. aquí está el archivo de plantilla de registro:

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

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

y aquí está el error que consigo:

[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 

este es el rastreo completo:

 
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 
+0

¿Puedes poner en la sección de vista de tu código que realmente envía el correo electrónico? – unni

+0

Agregué el rastreo – mmbrian

Respuesta

9

Esto puede ser impedido por SELinux. Verificaría esos registros y vería si te está negando el permiso. Probablemente pueda encontrar el registro principal en /var/log/audit/audit.log Pruebe la acción y vea si genera un nuevo mensaje al final del registro. Si es así, es SELinux el que no permite el envío de correo electrónico. Si eso genera la denegación, entonces deberá actualizar su política de SELinux, probablemente utilizando audit2allow. Para obtener instrucciones sobre cómo hacerlo, consulte el SELinux CentOS Howto. CentOS y Fedora están lo suficientemente cerca como para que los pasos descritos allí funcionen, si SELinux es lo que niega la acción. De lo contrario, obviamente, esto sería irrelevante.

También puede intentar deshabilitar temporalmente la ejecución de SELinux utilizando el comando setenforce 0 y ver si el problema desaparece. Ya sea que lo haga o no, es una buena idea usar setenforce 1 para volver a activar la aplicación.

+0

¿quiere decir registros de error de Apache? He revisado el que está en/etc/httpd/logs/error_log y encontré esto: [error] [cliente 173.242.117.169] mod_wsgi (pid = 11534): Se produjo una excepción procesando script WSGI '/var/www/algorithms.ir/ algorithms_ir/apache/django.wsgi '., referer: http: //.../accounts/register/ [jue 27 oct 02:01:14 2011] [error] [cliente 173.242.117.169] IOError: error al escribir data, referer: http: //.../accounts/register/ – mmbrian

+0

¿Qué significa? – mmbrian

+0

He ampliado la respuesta algunas con más detalles. El registro de Apache no era el que me refería. –

0

Estas son las líneas que hay que añadir a su settings.py:

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

eliminar @ domain.com en EMAIL_HOST_USER así que será simplemente myemailaddress

+0

No estoy usando webfaction, y no tengo problemas para enviar correos electrónicos con esta configuración cuando intento send_mail después de ejecutar "python manage.py shell". Configuré DEFAULT_FROM_EMAIL y SERVER_EMAIL pero todavía da el mismo error – mmbrian

1

Esto podría ser un error IO. ¿Estás haciendo alguna declaración de impresión o escribiendo cosas en un archivo a tu vista? Si es así, puedes tener problemas de permisos. Por favor revisa y responde.

+0

siento por mi retraso, lo único que ocurre en mi opinión es agregar un nuevo usuario inactivo a mi base de datos y luego generar un mensaje de activación para el usuario y enviar el correo electrónico. No configuré el nombre dns de mi servidor, supongo que eso es lo que está causando el problema. por ahora, he decidido usar una aplicación de verificación de captcha en lugar de la verificación de correo electrónico – mmbrian

Cuestiones relacionadas