【问题标题】:django oscar send_email result in ValueError: EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive,django oscar send_email result in ValueError: EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive,
【发布时间】:2023-01-16 10:49:09
【问题描述】:

这个函数触发了一个对我来说没有意义的错误:

File "/venv/virtualenvs/ZHR-f7z/oscar/apps/communication/utils.py", line 128, in send_email_messages
email.send()

在设置中:

EMAIL_USE_SSL = None #False doesn't change result
EMAIL_USE_TLS = None

发生了一些错误,因为两者都是 None 所以这些不可能是真的:

File "/venv/virtualenvs/ZHR-f7z/lib/python3.9/site-packages/django/core/mail/backends/smtp.py", line 31, in __init__
        self.use_ssl = settings.EMAIL_USE_SSL if use_ssl is None else use_ssl
        self.timeout = settings.EMAIL_TIMEOUT if timeout is None else timeout
        self.ssl_keyfile = settings.EMAIL_SSL_KEYFILE if ssl_keyfile is None else ssl_keyfile
        self.ssl_certfile = settings.EMAIL_SSL_CERTFILE if ssl_certfile is None else ssl_certfile
        if self.use_ssl and self.use_tls:
            raise ValueError(
                "EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set "
                "one of those settings to True.")
        self.connection = None
        self._lock = threading.RLock()



[console ready]
>>> use_ssl
>>> self.use_ssl
'None'
>>> self.use_tls
'None'
>>> 

如果我启动一个 shell:

>>> from django.core import mail
>>> mail.send_mail(
...             'Subject here', 'Here is the message.',
...             'mailfrom', ['mailto'],
...             fail_silently=False,
...         )

结果成功。

任何建议,因为设置都是假的,如果两者都是真的,应该触发 ValueError 吗?

谢谢,BR

【问题讨论】:

    标签: django django-oscar


    【解决方案1】:

    EMAIL_USE_TLSEMAIL_USE_SSL是互斥的 您应该选择要使用的安全连接,取决于您的电子邮件提供商.

    在 Django 中,EMAIL_USE_TLS 默认使用端口 587,而 EMAIL_USE_SSL 使用端口 465

    所以,正确的设置必须是

    EMAIL_USE_SSL = False
    EMAIL_USE_TLS = True
    

    或者

    EMAIL_USE_SSL = True
    EMAIL_USE_TLS = False
    

    Django Doc on settings EMAIL_USE_TLS/EMAIL_USE_SSL

    【讨论】:

    • 感谢我尝试启用 TLS 的答案,但仍然以相同的 ValueError: [console ready] >>> self.use_ssl 'True' >>> self.use_tls 'False' ValueError: EMAIL_USE_TLS/EMAIL_USE_SSL 是互斥的,所以只将这些设置之一设置为 True。
    【解决方案2】:

    我有点困惑,TLS 是 True 而 SSL 是 False,触发 ValueErrror 的条件意味着:

    if self.use_ssl==True and self.use_tls == True 
    

    我希望两者都为 True 才能触发异常。 但是这里是在只有一个为真时触发的。

    或者我还缺少其他东西?

    【讨论】:

    • 我遇到了同样的问题 - 有没有人知道为什么我们会看到这个错误以及如何纠正它?谢谢。
    【解决方案3】:

    mail.send 已弃用。你应该使用 EmailMessage

    https://ltslashgt.com/2007/07/02/gmail-and-django/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2016-06-18
      • 1970-01-01
      相关资源
      最近更新 更多