【问题标题】:Can't connect .env file of smtp details to django无法将 smtp 详细信息的 .env 文件连接到 django
【发布时间】:2021-05-27 13:47:21
【问题描述】:
  1. settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = os.environ.get('EMAIL_HOST')
EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER')
EMAIL_USE_TLS = True

EMAIL_PORT = 587
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
  1. .env
export EMAIL_HOST_PASSWORD=<>
export EMAIL_HOST_USER = <>
export EMAIL_HOST=<>

3.终端

(Carealenv) E:\atom data\mywebsite>source .env
'source' is not recognized as an internal or external command,
operable program or batch file.

我遇到 SMTPserverdisconnected 错误.. 请先运行 connect 我想将我的 .env 文件连接到 django 以便连接 SMTPServer 并且我可以向用户发送验证电子邮件。这将是很大的帮助.. 谢谢你

【问题讨论】:

    标签: django smtp


    【解决方案1】:

    除了 ruddra 的回答,您也可以使用python-dotenv

    pip install python-dotenv

    然后在你的 settings.py 中

    # settings.py
    from dotenv import load_dotenv
    load_dotenv()
    

    然后您可以使用 getenv 或您在示例中使用的内置 environ.get 模块中的函数 os 来获取环境变量并在它们不存在时提供默认值。

    from os import getenv
    
    EMAIL_HOST = getenv('EMAIL_HOST', 'localhost')
    

    其中 localhost 是您希望设置为默认值的任何内容。

    【讨论】:

      【解决方案2】:

      Stackoverflow 答案中所述,您不能在 Windows 机器中使用 source

      如果你想使用 .env 文件,可以考虑使用像 django-environ 这样的库,它会直接读取文件,不需要从 ENVIRONMENT 变量中加载它。

      settings.py 中的示例用法:

      import environ
      env = environ.Env(
          # set casting, default value
          DEBUG=(bool, False)
      )
      # reading .env file
      environ.Env.read_env()
      
      # False if not in os.environ
      EMAIL_HOST = env('EMAIL_HOST')
      

      另一种替代解决方案是将 Docker 与 docker-compose 一起使用,您可以在其中加载 environment variables from file

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        相关资源
        最近更新 更多