Django在WebFaction服务器的邮箱设置

  • 发布时间:2016年2月20日 16:50
  • 作者:杨仕航
  • 分类标签: Django
  • 阅读(8473)
  • 评论(0)

(本文是讲有关WebFaction服务器中,Django发送邮件的配置。不想看过程,就直接跳到后面看具体配置吧。)

在前面有一篇博文《我的网站搭建(第12天) 关闭调试》里面提到设置邮箱可以自动发送错误报告邮件。我在本地测试是没问题的,就部署到了WebFaction服务器。一般部署到服务器是不会产生500错误的,也就是没有机会发送错误报告邮件。

近期,在添加用户认证功能(登录、注册等)。其中,在注册的环节需要发送一个激活连接邮件到用户的邮箱中。在本地测试也是没问题。更新到服务器之后,测试了一下,并没有发送邮件,还报错了,而且也没有发送错误报告到我设置的邮箱中。

打开错误日志,发现报错的内容很奇怪:socket.error: [Errno 111] Connection refused

大致意思是发送邮件的时候,用socket创建连接被拒绝。

settings.py文件里面的邮箱设置是没问题的,本地windows系统是可以正常发送邮件。查阅了大量资料,各种尝试之后,终于通过有效途径发现问题,并解决问题。


用ssh方式登录WebFaction后台,执行命令 python2.7,进入python。执行以下命令:

>>>import socket
>>>s=socket.create_connection(('smtp.qq.com',25),1000)
Traceback (most recent call last):
  File "", line 1, inFile "/usr/lib64/python2.7/socket.py", line 571, in create_connection
    raise err
socket.error: [Errno 111] Connection refused

用socket.create_connection方法指定host和port端口,就报错了。退出python,执行以下命令,查看linux的sendmail服务是否启动(25端口对应这个服务):

$ service sendmail status
Redirecting to /bin/systemctl status  sendmail.service
● sendmail.service - Sendmail Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/sendmail.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2015-12-04 14:32:58 UTC; 2 months 16 days ago

大致意思是这个服务可用,但是供应商预设不可用。(太坑了)尝试打开这个服务:

$ service sendmail start
Redirecting to /bin/systemctl start  sendmail.service
Failed to start sendmail.service: Interactive authentication required.

果然,是我想多了,没权限打开。。。明明这个服务是打开的,却被拒绝。难道只有自己的服务器的邮箱可以使用?进入python尝试一下:

>>>import socket
>>> s=socket.create_connection(('smtp.webfaction.com',25),1000)

执行第二句之后,竟然没报错!(果然是个坑)


反复测试,最后找到问题所在。只需要把settings.py文件中的email相关设置改成WebFaction服务器的邮箱。WebFaction有赠送邮箱,需要登录后台,自己创建一个。(后台的EMAIL菜单,先创建一个Mailbox,再创建一个邮箱地址绑定到这个Mailbox。)


WebFaction的SMTP设置不太一样。settings.py文件的邮箱具体设置如下:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST= 'smtp.webfaction.com'
EMAIL_PORT= 25
EMAIL_HOST_USER = '*********'          #Mailbox的名称
EMAIL_HOST_PASSWORD = '*************'  #Mailbox的密码 默认有SMTP服务
EMAIL_SUBJECT_PREFIX = '[yshblog.com]' #邮件标题前缀,默认是'[django]'
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = SERVER_EMAIL = '*****@yshblog.com' #发件人的邮箱地址

测试一下,在服务器可以正常发送邮件。(在本地就不行了,本地测试再换成其他的邮箱即可)

上一篇:Linux下操作SQLite

下一篇:Excel vba 网抓天气预报

评论列表

智慧如你,不想发表一下意见吗?

新的评论

清空