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

时间:2016-06-30 23:14:37

标签: python django django-email

我使用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.

知道为什么吗?谢谢!

6 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分:2)

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

EMAIL_USE_SSL = True
EMAIL_PORT = 465

希望有帮助

答案 2 :(得分:1)

在邮件服务器上设置TLS或使用mmap()

答案 3 :(得分:0)

我可以通过添加服务器名称的端口号来解决修改下面一行代码的问题:

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

答案 4 :(得分:0)

不确定您是否已解决问题。我最近还尝试了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()行。

答案 5 :(得分:-1)

在 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')