gpt4 book ai didi

python - 通过 gmail 在 django 中发送电子邮件时出错

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:36 24 4
gpt4 key购买 nike

我正在尝试使用 django 通过 gmail 发送邮件。

以下是我的settings.py代码:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'me@mycompany.com'
EMAIL_HOST_PASSWORD = 'mypassword'
EMAIL_USE_TLS = True

view.py 我正在使用方法 send_mail():

send_mail(subject, contact_message, emailfrom, emailto)

当我执行代码并在联系表单中输入详细信息并点击提交时。我收到以下错误:

smtplib.SMTPNotSupportedError: STARTTLS extension not supported by server.    

请推荐!

最佳答案

我不了解 Gmail,也不了解 Django,但希望以下解释对您有所帮助。

快速分析表明您的情况有点奇怪。有一种简单的方法可以测试 SMTP 服务器提供的功能/扩展:获取命令行 telnet 客户端,连接到有问题的服务器并查询其功能。下面展示了在 Linux 中是如何完成的,但与 Windows 基本相同:

root@spock:~# telnet smtp.gmail.com 587              <-- Type this on the command line
Trying 74.125.71.109... <-- This is output
Connected to gmail-smtp-msa.l.google.com. <-- This is output
Escape character is '^]'. <-- This is output
220 smtp.gmail.com ESMTP s196sm2489285wmb.6 - gsmtp <-- This is output
EHLO localhost.com <-- **YOU** must type this
250-smtp.gmail.com at your service, [46.83.27.246] <-- The following lines are output
250-SIZE 35882577
250-8BITMIME
250-STARTTLS <-- NOTE THIS LINE
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8

这里的关键点是 telnet 命令的第二个命令行参数,它指定要使用的端口,以及您键入的 EHLO 命令(确保您确实键入 EHLO) > 而不是 HELO 这是另一个命令)。

从示例中可以看出,smtp.gmail.com 绝对支持 STARTTLS 命令/扩展。我在正常环境下测试过;我的 Linux 机器位于 NAT 路由器后面,这是私有(private)家庭和小公司的常见设置。没有端口转发或其他特殊配置。

所以我建议的第一件事是你在你的地方重复这个简单的测试。那么,

  • 如果您得到与我相同的结果,特别是如果您得到的输出还包含行 250-STARTTLS,那么除了 Django 本身的错误之外,绝对没有任何解释这里发生了什么。您使用的是最新版本吗?我在这里帮不了你,因为我从来没有使用过它,我对此一无所知。

  • 如果 250-STARTTLS不在您得到的输出中,则一定会发生完全奇怪的事情。正如我的示例所示,至少我所在的客户端支持 STARTTLS ,并且您所在的客户端没有理由不支持它。

  • 异常(exception)情况可能是中国或类似国家/地区的政府试图阻止使用加密。所以我可以想象,当来自这样一个国家的客户端连接时,Google 会关闭基于地理封锁的 STARTTLS 扩展。但我真的不知道!我们鼓励这样做的人发表评论......

  • 也许您使用的代理会干扰您的客户端 (Django) 和 SMTP 服务器之间的通信。

如果您还没有发现问题,您可以执行以下操作:

  • 您可以尝试端口 25 而不是端口 587。我已验证 smtp.gmail.com 在端口 25 上也支持 STARTTLS。对于大多数电子邮件客户端,使用端口 25 还是端口 587 并不重要。您应该可以通过在配置文件中输入 EMAIL_PORT = 25 来让 Django 使用端口 25

  • 您可以尝试使用隐式 TLS(通常称为 SSL)而不是显式 STARTTLS。通常用于此目的的端口是465。要实现此目的,请在配置文件中输入 EMAIL_PORT = 465EMAIL_USE_TLS = FalseEMAIL_USE_SSL = True

关于python - 通过 gmail 在 django 中发送电子邮件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46420975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com