我正在尝试从我的 django 应用程序发送一封电子邮件。
但是,这在我的 NGINX(用于静态资源)+ GUNICORN 服务器上不起作用。
但是,在 django 的默认 web 服务器上也可以这样做。到目前为止,我还没有设置邮件服务器。
我不确定问题是什么。
让我解释一下整个情况,因为这个问题解释得不太清楚。
如果我使用默认调试 WSGI 从 Django 中的 Web 应用发送电子邮件,
以及以下代码
from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', '[email protected]',
['[email protected]'], fail_silently=False)
我可以发送电子邮件。
但是,我已经同时设置了 nginx 服务器和 gunicorn wsgi。我无法发送邮件。
我的 nginx.conf 如下所示
server {
listen 80;
listen 443;
listen 587;
server_name 172.17.110.205;
client_max_body_size 0M;
access_log /home/msrb_db/msrb_db_application/access.log;
error_log /home/msrb_db/msrb_db_application/error.log;
location /static {
root /home/msrb_db/msrb_db_application;
}
location / {
proxy_pass http://172.17.110.205:8080;
}
}
我有一个 gunicorn 服务器作为 systemd 文件,其工作原理如下
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=msrb_db
Group=users
WorkingDirectory=/home/msrb_db/msrb_db_application/
ExecStart=/usr/bin/gunicorn --bind 172.17.110.205:8080 --workers 3 --pythonpath /home/msrb_db/msrb_db_application/ msrb_db_application.wsgi:application
[Install]
WantedBy=multi-user.target
~
我也尝试过使用其他 Gmail API 来实现这一点 电子邮件消息类
我的settings.py如下
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 443
EMAIL_HOST_USER = '[email protected]
EMAIL_HOST_PASSWORD = 'plplplp'
~
我不确定我错过了什么。任何帮助我都感激不尽。
Django 日志:
你好,我从 Django 中取出了日志,没有发现与电子邮件相关的异常
/post/test_csv.zip' already exists
Nov 19 10:06:10 msrbdb gunicorn[58290]: sending email
Nov 19 10:06:10 msrbdb gunicorn[58290]: email sent
Nov 19 10:06:10 msrbdb gunicorn[58290]: Exception SystemExit: 0 in <module 'threading' from '/usr/lib64/python2.7/threading.pyc'> ignored
而且,NGINX 没有错误
多谢。
答案1
EMAIL_PORT = 443
您用于连接 smtp 主机的端口号 ( ) 错误。它永远无法工作。TCP 端口 443 为 HTTPS 保留。请尝试使用 Google 规定的端口 465(需要 SSL)或端口 587(需要 TLS)。
listen 587;
您还在nginx.conf 中使用了标准 SMTP 端口 587。您应该将其删除。
有关详细信息,请参阅此处的 Google 参考: https://support.google.com/a/answer/176600?hl=en