2011-10-27 14 views
6

Tôi đang chạy một trang web django trên máy chủ fedora (Fedora phát hành 15 (Lovelock)) bằng cách sử dụng Apache và mod_wsgi. gần đây tôi đã cố gắng thêm một hệ thống đăng ký sử dụng ứng dụng đăng ký django (phiên bản 0.7), nhưng tiếc là tôi nhận được "[Errno 13] Permission bị từ chối" khi ứng dụng đang cố gắng gửi email xác minh tới người dùng mới đăng ký. Tôi đã cấu hình các tập tin cài đặt của dự án của tôi để gửi email sử dụng tài khoản gmail theo cách này:"Quyền bị từ chối" khi cố gắng gửi email xác minh

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 

tôi có thể gửi email khi tôi tự nhập send_mail khi sử dụng vỏ của dự án. Tôi chưa thay đổi gì trong chế độ xem hoặc kiểu máy. dưới đây là mẫu đăng ký file:

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

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

và đây là lỗi tôi nhận được:

[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 

đây là traceback hoàn chỉnh:

 
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

bạn có thể đặt trong phần xem của mã thực sự gửi email không? – unni

+0

Tôi đã thêm traceback – mmbrian

Trả lời

9

này có thể được ngăn ngừa bằng cách SELinux. Tôi sẽ kiểm tra các bản ghi đó và xem liệu nó có từ chối cho bạn sự cho phép hay không. Bạn có thể tìm thấy nhật ký chính tại /var/log/audit/audit.log Hãy thử hành động và xem nó có tạo ra một thư mới ở cuối nhật ký hay không. Nếu có, SELinux không cho phép gửi email. Nếu điều đó tạo ra sự từ chối, thì bạn sẽ cần phải cập nhật chính sách SELinux của bạn, có thể sử dụng audit2allow. Để biết hướng dẫn về cách thực hiện điều đó, hãy xem SELinux CentOS Howto. CentOS và Fedora đủ gần để thực hiện các bước được nêu ra, nếu SELinux là những gì từ chối hành động. Nếu không, thì rõ ràng, điều này sẽ không liên quan.

Bạn cũng có thể thử tắt tạm thời việc thực thi SELinux bằng cách sử dụng lệnh setenforce 0 và xem sự cố có bị mất hay không. Dù có hay không, bạn nên sử dụng setenforce 1 để bật lại tính năng thực thi.

+0

bạn có nghĩa là nhật ký lỗi apache không? Tôi cheched một tại/etc/httpd/logs/error_log và tìm thấy điều này: [lỗi] [client 173.242.117.169] mod_wsgi (pid = 11534): Ngoại lệ xảy ra khi xử lý kịch bản WSGI '/var/www/algorithms.ir/ thuật toán_ir/apache/django.wsgi '., referer: http: //.../accounts/register/ [Thu Oct 27 02:01:14 2011] [lỗi] [client 173.242.117.169] IOError: không viết được dữ liệu, referer: http: //.../accounts/register/ – mmbrian

+0

có nghĩa là gì? – mmbrian

+0

Tôi đã mở rộng câu trả lời cho một số chi tiết. Nhật ký Apache không phải là nhật ký tôi đang đề cập đến. –

0

Đó là các dòng bạn cần phải bổ sung vào settings.py của bạn:

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

xóa @ domain.com trong EMAIL_HOST_USER vì vậy nó sẽ được chỉ myemailaddress

+0

Tôi không sử dụng webfaction, và tôi không có vấn đề khi gửi email với cấu hình này khi tôi thử send_mail sau khi runnig "python manage.py shell" .Tôi đã định cấu hình DEFAULT_FROM_EMAIL và SERVER_EMAIL nhưng vẫn cho lỗi tương tự – mmbrian

1

này thể là một lỗi IO. Bạn đang làm bất kỳ báo cáo in hoặc viết công cụ vào một tập tin trong quan điểm của bạn? Nếu vậy bạn có thể có các vấn đề về quyền. Vui lòng kiểm tra và trả lời.

+0

xin lỗi vì sự chậm trễ của tôi, điều duy nhất xảy ra trong quan điểm của tôi là thêm người dùng không hoạt động mới vào cơ sở dữ liệu của tôi và sau đó tạo thông báo kích hoạt cho người dùng và gửi email. Tôi chưa định cấu hình tên dns của máy chủ, tôi đoán đó là nguyên nhân gây ra sự cố. bây giờ tôi đã quyết định sử dụng một ứng dụng xác thực xác thực thay vì xác minh email – mmbrian