python - 如何使用 Sudo 在生产服务器上配置 Django 电子邮件

标签 python django apache ubuntu linode

我最近将我在 Django 中开发的站点部署到运行 Ubuntu 和 Apache 的生产服务器上。
除了在我配置要发送的电子邮件的任何地方发送电子邮件之外,该站点在各个方面都可以正常运行,页面不断加载并且没有任何 react ,尽管在后端保存了任何信息,就像联系我们一样。
在本地主机上,电子邮件工作得非常好,而在部署的站点上,它只是没有发送,页面不断加载。
这是联系我们配置views.py的示例

def contact_us(request):
    if request.method == 'POST':  # check post
        form = ContactForm(request.POST)
        if form.is_valid():
            data = ContactMessage()  # create relation with model
            data.name = form.cleaned_data['name']  # get form input data
            data.email = form.cleaned_data['email']
            data.subject = form.cleaned_data['subject']
            data.message = form.cleaned_data['message']
            data.save()  # save data to table
            messages.success(request, "Your message has ben sent. Thank you for your message.")
            template = render_to_string("marketing/contact_us_email.html", {'first_name': request.user.first_name,
                                                                  'last_name': request.user.last_name, 'form': form})

            msg = EmailMessage('Contact Us Message', template,
                               settings.EMAIL_HOST_USER, ['email@email.com'])
            msg.content_subtype = "html"  # Main content is now text/html
            msg.fail_silently = False
            msg.send()
            return HttpResponseRedirect('/')

    form = ContactForm
    context = {'form': form}
    template = 'marketing/contact_us.html'
    return render(request, template, context)
这是部署 settings.py 中的电子邮件配置
import json
from pathlib import Path

with open('/etc/config.json') as config_file:
    config= json.load(config_file)

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = config.get('EMAIL_USER')
EMAIL_HOST_PASSWORD = config.get('EMAIL_PASSWORD')
在我的 json 文件中
{
        "SECRET_KEY":".............................",
        "EMAIL_USER":"............................",
        "EMAIL_PASSWORD":"...................."
}
我试图检查 ufw 状态
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
我是部署项目的新手,我不确定如何针对这个特定问题进行调试。
我尝试了以下命令:
(venv) user@django-server:~/Project$ /var/log/apache2/access.log
-bash: /var/log/apache2/access.log: Permission denied
这是我使用时的日志:sudo tail /var/log/syslog
Jan 24 20:42:48 django-server kernel: [ 6559.610360] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=180.76.76.76 DST=172.105.20.139 LEN=84 TOS=0x00 PREC=0x00 TTL=43 ID=11161 PROTO=ICMP TYPE=0 CODE=0 ID=10784 SEQ=0
Jan 24 20:42:57 django-server kernel: [ 6568.510344] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=194.147.140.103 DST=172.105.20.139 LEN=40 TOS=0x00 PREC=0x00 TTL=245 ID=36909 PROTO=TCP SPT=48813 DPT=4308 WINDOW=1024 RES=0x00 SYN URGP=0
Jan 24 20:43:05 django-server kernel: [ 6576.489136] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=223.5.5.5 DST=172.105.20.139 LEN=84 TOS=0x00 PREC=0x00 TTL=116 ID=11169 PROTO=ICMP TYPE=0 CODE=0 ID=10784 SEQ=0
Jan 24 20:43:16 django-server kernel: [ 6588.096503] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=175.176.40.44 DST=172.105.20.139 LEN=60 TOS=0x08 PREC=0x00 TTL=41 ID=5992 DF PROTO=TCP SPT=58866 DPT=554 WINDOW=65535 RES=0x00 SYN URGP=0
Jan 24 20:43:22 django-server kernel: [ 6594.383419] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=142.250.78.106 DST=172.105.20.139 LEN=60 TOS=0x00 PREC=0x80 TTL=50 ID=14200 PROTO=TCP SPT=443 DPT=53584 WINDOW=65535 RES=0x00 ACK SYN URGP=0
Jan 24 20:43:37 django-server kernel: [ 6609.134643] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=129.6.15.29 DST=172.105.20.139 LEN=76 TOS=0x00 PREC=0x20 TTL=52 ID=33054 PROTO=UDP SPT=123 DPT=123 LEN=56
Jan 24 20:43:42 django-server kernel: [ 6614.123887] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=142.250.78.106 DST=172.105.20.139 LEN=60 TOS=0x00 PREC=0x80 TTL=50 ID=65111 PROTO=TCP SPT=443 DPT=53582 WINDOW=65535 RES=0x00 ACK SYN URGP=0
Jan 24 20:43:56 django-server kernel: [ 6627.945386] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=45.155.205.32 DST=172.105.20.139 LEN=40 TOS=0x00 PREC=0x20 TTL=244 ID=1247 PROTO=TCP SPT=51101 DPT=7993 WINDOW=1024 RES=0x00 SYN URGP=0
Jan 24 20:44:02 django-server kernel: [ 6633.768443] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=142.250.78.106 DST=172.105.20.139 LEN=60 TOS=0x00 PREC=0x80 TTL=50 ID=11134 PROTO=TCP SPT=443 DPT=53579 WINDOW=65535 RES=0x00 ACK SYN URGP=0
Jan 24 20:44:16 django-server kernel: [ 6647.454385] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=154.73.167.39 DST=172.105.20.139 LEN=62 TOS=0x00 PREC=0x00 TTL=51 ID=62076 DF PROTO=UDP SPT=58743 DPT=554 LEN=42
(venv) ahesham@django-server:~/Project$ sudo tail /var/log/syslog
Jan 24 20:44:57 django-server kernel: [ 6688.601259] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=188.210.155.24 DST=172.105.20.139 LEN=60 TOS=0x00 PREC=0x00 TTL=244 ID=29174 DF PROTO=TCP SPT=17692 DPT=554 WINDOW=65535 RES=0x00 SYN URGP=0
Jan 24 20:45:01 django-server CRON[3699]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Jan 24 20:45:06 django-server kernel: [ 6698.191321] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=5.52.105.55 DST=172.105.20.139 LEN=40 TOS=0x00 PREC=0x00 TTL=231 ID=3396 DF PROTO=TCP SPT=53854 DPT=554 WINDOW=0 RES=0x00 ACK RST URGP=0
Jan 24 20:45:17 django-server kernel: [ 6709.135708] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=129.6.15.28 DST=172.105.20.139 LEN=76 TOS=0x00 PREC=0x20 TTL=52 ID=46172 PROTO=UDP SPT=123 DPT=123 LEN=56
Jan 24 20:45:36 django-server kernel: [ 6727.528369] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=176.54.129.234 DST=172.105.20.139 LEN=60 TOS=0x08 PREC=0x40 TTL=128 ID=11651 DF PROTO=TCP SPT=25663 DPT=554 WINDOW=65535 RES=0x00 SYN URGP=0
Jan 24 20:45:57 django-server kernel: [ 6748.751374] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=51.39.168.251 DST=172.105.20.139 LEN=1228 TOS=0x00 PREC=0x00 TTL=44 ID=34033 DF PROTO=UDP SPT=2775 DPT=554 LEN=1208
Jan 24 20:46:01 django-server kernel: [ 6752.489383] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=223.5.5.5 DST=172.105.20.139 LEN=84 TOS=0x00 PREC=0x00 TTL=116 ID=11291 PROTO=ICMP TYPE=0 CODE=0 ID=10784 SEQ=0
Jan 24 20:46:04 django-server kernel: [ 6755.471870] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=119.29.29.29 DST=172.105.20.139 LEN=84 TOS=0x08 PREC=0x00 TTL=50 ID=52379 PROTO=ICMP TYPE=0 CODE=0 ID=10784 SEQ=0
Jan 24 20:46:07 django-server kernel: [ 6758.426753] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=114.114.114.114 DST=172.105.20.139 LEN=84 TOS=0x08 PREC=0x20 TTL=80 ID=60475 PROTO=ICMP TYPE=0 CODE=0 ID=10784 SEQ=0
Jan 24 20:46:17 django-server kernel: [ 6769.135354] [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:92:6a:a2:2e:5a:b0:f6:f2:ad:52:08:00 SRC=129.6.15.28 DST=172.105.20.139 LEN=76 TOS=0x00 PREC=0x20 TTL=52 ID=47969 PROTO=UDP SPT=123 DPT=123 LEN=56
我的问题是这个错误的原因是什么以及如何解决它?

最佳答案

要检查您的服务器和 gmail 之间的连接,您可以简单地使用 telnet:

telnet smtp.gmail.com 587
如果你看到这样的东西
Trying 173.194.76.108...
Connected to smtp.gmail.com.
Escape character is '^]'.
220 smtp.gmail.com ESMTP a184sm19715075wme.35 - gsmtp
连接很好,问题出在其他地方(可能在您的代码中)。
如果您收到“连接被拒绝”或“连接超时”,则表示您有网络问题:您无法在端口 587 上访问 gmail,这可能是由于您和 gmail 之间的防火墙。您必须启用从服务器到 TCP 端口 587 的传出流量(您或您的网络管理员必须这样做)。我不知道 ufw,但您可以尝试禁用它以了解它是否会导致您出现问题:如果它解决了问题,正如我之前写的,您必须配置防火墙以允许传出流量到端口 587 TCP。

关于python - 如何使用 Sudo 在生产服务器上配置 Django 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65875004/

相关文章:

python - 如何使用 python 请求获取 uuid

python - 如何从不是 django 项目文件夹的文件夹运行 gunicorn

python - 完全使用 Django 渲染模板

mysql - 确定 CentOS 6 Apache 服务器运行缓慢的问题

java - 具有 IP 验证且仅允许用户投票的机制 : problem in getting user IP address with two app servers and apache in front

Python - 我的 MySQL 查询中的错误在哪里?

python - 自定义蜘蛛图 --> 在 matplotlib 中显示极坐标图上点之间的曲线而不是直线

python - Scipy 拟合向量中的参数

django - I18n停止工作

python - apache 用户无法写入 .python-eggs