【问题标题】:STARTTLS extension not supported by server - Getting this error when trying to send an email through Django and a private email address服务器不支持 STARTTLS 扩展 - 尝试通过 Django 和私人电子邮件地址发送电子邮件时出现此错误
【发布时间】:2016-06-30 23:14:36
【问题描述】:

我使用 namecheap.com 注册了一个域和一个私人电子邮件。我正在尝试从这封私人电子邮件发送一封电子邮件。但是,我得到标题中的错误。

在我的 settings.py 中,我有这些设置:

EMAIL_HOST = 'mail.privateemail.com'
EMAIL_HOST_USER = 'contact@mysite.com'
EMAIL_HOST_PASSWORD = 'my password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

我正在尝试通过视图发送电子邮件:

send_mail(
    'Subject here',
    'Here is the message.',
    'contact@mysite.com',
    ['myname@gmail.com'],
    fail_silently=False,
)

但是,我收到此错误:

SMTPException at /
STARTTLS extension not supported by server.

知道为什么吗?任何帮助表示赞赏。

编辑

将 EMAIL_USE_TLS 更改为 False,并将其删除以分别检查后,我现在收到此错误:

SMTP AUTH extension not supported by server.

知道为什么吗?谢谢!

【问题讨论】:

    标签: python django django-email


    【解决方案1】:

    您的服务器 mail.privateemail.com 不知道 STARTTLS 是什么 SMTP Commnad 是

    这可能在两种情况下发生:

    1. 您的服务器 (mail.privateemail.com) 根本不支持安全通信,您需要使用普通的非加密通信。
    2. 您尝试连接到已经使用 SSL 作为通信的端口,然后 STARTTLS 将连接升级到安全没有任何意义。
    3. 您的服务器配置不正确并忽略提交端口 (587) 上的 STARTTLS。

    判断,您正在连接到端口 587,它应该提供简单的通信 - 它是 1 或 3。

    如果您希望它正常工作,请删除 EMAIL_USE_TLS = True 或将其设置为 False,否则 - 应该修复 SMTP 服务器配置。

    【讨论】:

    • 谢谢,但这仍然不起作用。现在,我收到此错误:服务器不支持 SMTP AUTH 扩展。
    • 这是完全不同的错误,这意味着您的 SMTP 服务器不支持身份验证,删除/禁用 EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD 选项,然后在地板上滚动并为您的 smtp 服务器哭泣,因为它对垃圾邮件发送者...
    • 等等什么?所以你是说我不能从我刚买的私人邮箱发送邮件? T_T 那有什么解决办法吗?
    • 谁说没有?看起来每个人都可以:D
    • 知道怎么做吗?
    【解决方案2】:

    您可以通过在settings.py 中进行以下更改来尝试使用 SSL 而不是 TLS

    EMAIL_USE_SSL = True
    EMAIL_PORT = 465
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      在您的邮件服务器上设置 TLS 或使用 EMAIL_USE_TLS = False

      【讨论】:

      • 谢谢,但这仍然不起作用。现在,我收到此错误:服务器不支持 SMTP AUTH 扩展。
      • 嗨,TerenceLam,你修好了吗?我也是,总是有这些错误!你现在知道解决方法了吗?提前谢谢你。
      【解决方案4】:

      我可以通过修改下面的代码行来解决这个问题,方法是添加带有服务器名称的端口号:

      server = smtplib.SMTP('mail.mycompany.com:587')     
      

      【讨论】:

        【解决方案5】:

        不确定您是否已经解决了问题。我最近还试用了 NameCheap 提供的 2 个月免费私人电子邮件包。这是我的代码,截至 2018 年 1 月它适用于我:

        import smtplib
        from email.message import EmailMessage
        
        fromaddr = 'account@yourdomain.com'
        toaddrs  = "recipient@somedomain.com"
        SMTPServer = 'mail.privateemail.com'
        port = 465 #587
        login = "account@yourdomain.com"
        password = "password"
        
        msg = EmailMessage()
        msgtxt = "http://www.google.com"+"\n\n"+"This is a test."
        msg.set_content(msgtxt)
        msg['Subject'] = "Test message"
        msg['From'] = fromaddr
        msg['To'] = toaddrs
        
        server = smtplib.SMTP_SSL(SMTPServer, port) #use smtplib.SMTP() if port is 587
        #server.starttls()
        server.login(login, password)
        server.send_message(msg)
        server.quit()
        

        希望对您有所帮助!

        PS。您也可以使用端口 587,但您必须使用 smtplib.SMTP() 而不是 smtplib.SMTP_SSL(),并且还必须取消注释 server.starttls() 行。

        【讨论】:

          【解决方案6】:

          在 gmail 上测试

          from smtplib import SMTP_SSL, SMTP, SMTPAuthenticationError
          from ssl import create_default_context
          from email.message import EmailMessage
          
          sender = 'aaa@bbb.com'
          description = "This is the test description supposed to be in body of the email."
          msg = EmailMessage()
          msg.set_content(description)
          msg['Subject'] = 'This is a test title'
          msg['From'] = f"Python SMTP <{sender}>"
          msg['To'] = 'bbb@ccc.com'
          
          
          def using_ssl():
              try:
                  server = SMTP_SSL(host='smtp.gmail.com', port=465, context=create_default_context())
                  server.login(sender, password)
                  server.send_message(msg=msg)
                  server.quit()
                  server.close()
              except SMTPAuthenticationError:
                  print('Login Failed')
          
          
          def using_tls():
              try:
                  server = SMTP(host='smtp.gmail.com', port=587)
                  server.starttls(context=create_default_context())
                  server.ehlo()
                  server.login(sender, password)
                  server.send_message(msg=msg)
                  server.quit()
                  server.close()
              except SMTPAuthenticationError:
                  print('Login Failed')
          

          【讨论】:

            猜你喜欢
            • 2015-07-25
            • 1970-01-01
            • 2023-03-26
            • 1970-01-01
            • 2018-03-15
            • 1970-01-01
            • 2016-01-21
            • 1970-01-01
            相关资源
            最近更新 更多