我的网站使用Mezzanine 4.2.3与Django-Oscar 1.5.2和Django 1.10.8,在Digitalocean上运行Ubuntu 16.04。当我在使用createdb
创建的演示页面上使用Mezzanine联系表单时,以及从我自己的计算机上,它成功发送了电子邮件。但是当我在运行Ubuntu 16.04的Digitalocean Droplet上测试时,我得到502坏网关。
nginx错误日志记录此错误:*13 upstream prematurely closed connection while reading response header from upstream, client: [an IP I can't identify], server: [my website url], request: "POST /contact/ HTTP/1.1", upstream: "http://unix:/home/my-django-app/my-django-app.sock:/contact/", host: "[my website url]", referrer: "[my website url]/contact/"
。该数字在*1
,*7
和*13
之间变化,但文字相同。
我用Google搜索并发现了各种可能的解决方案:
Increasing the timeout for nginx proxy_pass。这包括将proxy_connect_timeout 75s;
和proxy_read_timeout 300s;
添加到nginx配置,然后将--timeout 300
添加到gunicorn。这产生了实际的超时错误:*21 upstream timed out (110: Connection timed out) while reading response header from upstream,
在UFW中允许端口587。这不重要,因为如果我使用gmail,那么这应该是Google的一个端口,对吧?我之所以这样做是因为我看到了各种解决方案(大多数尚未解决),并谈到了解锁此端口的必要性。
让nginx收听端口587:server {listen 80; listen 587; ... list 443 ssl; ...}
。
通过nginx侦听端口587,sudo netstat -tulnp | grep 587
显示:
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 12815/nginx -g daem
我的电子邮件设置似乎很好:
EMAIL_USE_TLS = True
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "!#%%&&*%^#$^*%@gmail.com"
EMAIL_HOST_PASSWORD = "^*#^@#$%&@$%%#$"
EMAIL_PORT = 587
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
我也尝试使用端口465进行SSL。它适用于我的本地副本,但不适用于服务器。相同的错误消息502。
我认为"上游"表示gunicorn,所以我为它设置了一个错误日志,但是当页面加载时,它记录的全部是状态代码200和302。当502发生时,它没有记录任何事情。
我没有想法。我错过了什么?
2018年6月3日更新:
$ telnet smtp.gmail.com 587
Trying 108.177.96.109...
Trying 108.177.96.108...
Trying 2a00:1450:4013:c01::6c...
telnet: Unable to connect to remote host: Network is unreachable
用465和25也试过这个。这是否意味着Digitalocean阻止连接?有precedent。
答案 0 :(得分:0)
是的,Digitalocean会阻止SMTP。他们回复我的电子邮件:
为了帮助限制您帐户上的SMTP服务,可以 请告诉我们以下内容:
- 你的名字。
- 您将代表其网站(如果存在)发送邮件的业务或个人。
- 您要发送什么类型的邮件(密码重置,简报,营销邮件,订单等交易邮件) 确认)。
- 如果您代表的是非自己的企业或个人,您与该企业或您的关系是什么 个体
醇>此外,由于我们是一家美国公司,我想确保你 了解我们要求我们网络的所有用户同时遵循 CAN-SPAM的要求( https://www.ftc.gov/tips-advice/business-center/guidance/can-spam-act-compliance-guide-business )针对发送给任何订户的任何非交易邮件采取行动 世界上任何地方,以及CASL( http://fightspam.gc.ca/eic/site/030.nsf/eng/home)您发送的任何电子邮件 发送给加拿大的任何订阅者。
此外,发送电子邮件还有其他限制 欧盟用户及其成员创建的欧洲用户 国家,并建议您调查并遵循所有 您所在欧洲国家/地区的相关指南 可能有。
我回答了他们,他们回答说:
感谢您提供的信息。
我们已审核了这些信息,并已从中删除了SMTP阻止 你的帐户。
重申 - 我们要求订户遵循CAN-SPAM 代理所有电子邮件,以及发送给订阅者的任何电子邮件的CASL 加拿大。
如果您不这样做,我们收到违规投诉,我们可以撤销 我们可以自行决定访问SMTP,不再发出警告。