Python 服务器不支持STARTTLS扩展-尝试通过Django和私人电子邮件地址发送电子邮件时出现此错误

Python 服务器不支持STARTTLS扩展-尝试通过Django和私人电子邮件地址发送电子邮件时出现此错误,python,django,django-email,Python,Django,Django Email,我使用namescape.com注册了一个域名和一封私人电子邮件。我正在尝试通过此私人电子邮件发送电子邮件。然而,我在标题中发现了错误 在my 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_B

我使用namescape.com注册了一个域名和一封私人电子邮件。我正在尝试通过此私人电子邮件发送电子邮件。然而,我在标题中发现了错误

在my 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.
知道为什么吗?感谢您的帮助

编辑

将电子邮件\u USE\u TLS更改为False,并将其删除以分别检查两者后,我现在收到此错误:

SMTP AUTH extension not supported by server.

知道为什么吗?谢谢

在邮件服务器上设置TLS或使用
EMAIL\u use\u TLS=False
您的服务器
mail.privatemail.com
不知道什么是
STARTTLS
SMTP通信

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

  • 您的服务器(mail.privatemail.com)根本不支持安全通信,您需要使用普通的非加密通信
  • 您试图连接到已经使用SSL作为通信的端口,然后启动TTLS升级连接以确保安全,这毫无意义
  • 服务器配置不正确,忽略提交端口(587)上的STARTTLS
  • 判断一下,您正在连接到587端口,该端口应提供普通通信-它是1或3


    如果您想让这一切正常工作,请删除
    电子邮件\u USE\u TLS=True
    或将其设置为
    False
    ,否则-SMTP服务器配置应该是固定的。

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

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

    不确定你是否已经解决了这个问题。我最近还试用了namescape提供的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()
    
    希望这有帮助


    另外,您也可以使用端口587,但是您必须使用
    smtplib.SMTP()
    而不是
    smtplib.SMTP\u SSL()
    ,并且还必须取消对
    server.starttls()
    行的注释。

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

    EMAIL_USE_SSL = True
    EMAIL_PORT = 465
    
    希望这有助于在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')
    
    从smtplib导入SMTP\u SSL、SMTP、SMTPAuthenticationError
    从ssl导入创建默认上下文
    从email.message导入EmailMessage
    发送者aaa@bbb.com'
    description=“这是邮件正文中应该包含的测试描述。”
    msg=EmailMessage()
    msg.set_内容(说明)
    msg['Subject']=“这是一个测试标题”
    msg['From']=f“Python SMTP”
    msg['To']='bbb@ccc.com'
    使用_ssl()定义:
    尝试:
    server=SMTP\u SSL(host='SMTP.gmail.com',port=465,context=create\u default\u context())
    服务器登录名(发件人、密码)
    server.send_消息(msg=msg)
    server.quit()
    server.close()
    除了SMTPAuthenticationError:
    打印('登录失败')
    使用_tls()定义:
    尝试:
    服务器=SMTP(主机=SMTP.gmail.com',端口=587)
    server.starttls(context=create\u default\u context())
    server.ehlo()
    服务器登录名(发件人、密码)
    server.send_消息(msg=msg)
    server.quit()
    server.close()
    除了SMTPAuthenticationError:
    打印('登录失败')
    
    谢谢,但这仍然不起作用。现在,我得到了这个错误:服务器不支持SMTP身份验证扩展。这是完全不同的错误,这意味着您的SMTP服务器不支持身份验证,删除/禁用电子邮件\u主机\u用户和电子邮件\u主机\u密码选项,然后在地板上卷起并在为垃圾邮件发送者打开SMTP服务器时哭喊…等等什么?你是说我不能用刚买的私人邮件发送邮件?那么有什么解决办法吗?谁说没有?看起来每个人都可以:DAny,怎么办?谢谢,但这仍然不起作用。现在,我发现了这个错误:服务器不支持SMTP身份验证扩展。嗨,TerenceLam,你修复了吗?我也是,总是犯错误!!!你现在知道解决办法了吗?先谢谢你。