通过 django 发送电子邮件在 Gunicorn / NGinx 上不起作用`

通过 django 发送电子邮件在 Gunicorn / NGinx 上不起作用`

我正在尝试从我的 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

相关内容