python - 无法为 django settings.py 导入环境变量以在 linux ubuntu 系统中发送电子邮件
问题描述
当我直接指定 EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD 时,电子邮件发送正确但是如果尝试使用 os.environ 它会抛出以下错误(530, b'5.7.0 Authentication Required. Learn more at\n5.7.0 https://support.google.com/mail/?p=WantAuthError l26sm20714449pgn.46 - gsmtp', 'webmaster@localhost')
。我曾尝试在 .bashrc 和 .bash_profile 中添加变量,但没有奏效。我尝试过的内容如下所示。谁能帮帮我。
设置.py
变量如下所示。
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
# EMAIL_HOST_USER = 'name@gmail.com'
# EMAIL_HOST_PASSWORD = '123456789'
EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER')
print('variable :',os.environ.get('EMAIL_HOST_USER'))
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
.bashrc
此文件位于 settings.py 所在的同一目录中。
import os
export EMAIL_HOST_USER = 'name@gmail.com'
export EMAIL_HOST_PASSWORD = '9538913650'
主要的
下面是我在全球和虚拟环境中尝试过的终端。
EMAIL_HOST_USER=name@gmail.com
EMAIL_HOST_PASSWORD=123456789
使用 python 命令
代码如下所示。
import os
os.environ.set('EMAIL_HOST_USER') = 'name@gmail.com'
os.environ.set('EMAIL_HOST_PASSWORD') = 12345678
解决方案
首先,不要使用os.environ.get('...')
- 当环境变量丢失时它会静默失败。改为使用os.environ['...']
。
EMAIL_HOST_USER = os.environ['EMAIL_HOST_USER']
print('variable :',os.environ['EMAIL_HOST_USER'])
EMAIL_HOST_PASSWORD = os.environ['EMAIL_HOST_PASSWORD']
接下来,.bashrc
or.bash_profile
仅在您从已获取这些文件的 shell 运行 Django 时才有效。删除import os
,它不是 Python。
接下来,export
如果您在运行 Django 之前设置了变量,您的 shell 中仍然需要 。
export EMAIL_HOST_USER=name@gmail.com
export EMAIL_HOST_PASSWORD=123456789
如果要在 Python 中设置环境变量,则将其os.environ
视为 dict 而不是尝试调用.set(...)
.
import os
os.environ['EMAIL_HOST_USER'] = 'name@gmail.com'
os.environ['EMAIL_HOST_PASSWORD'] = 12345678
最后,即使这适用于您的本地机器,当您部署在具有不同 IP 地址的服务器上时,它也可能停止工作。每周我都会在 Stack Overflow 上看到用户在使用 gmail 从 Django 发送电子邮件时遇到的问题。我通常建议他们考虑使用不同的电子邮件提供商。
推荐阅读
- r - R - 在 gsub 之后无法计算词频
- c# - 视图中的 ASP.NET MVC 模型 (ViewModel) 三元运算符空值检查
- c# - 在我测试的软件更新后,Visual Studio 2017 中的编码 UI 测试停止工作。这会发生在其他人身上吗?
- vba - 复制粘贴过滤的数据未按预期工作
- c# - 无法在 Azure Bot 中全局声明 Timer
- regex - Perl 正则表达式替换
- html - 表行呈现在表父级之外
- javascript - Materialise sidenav 不会出现
- html - 如何使用水豚编辑 div 类
- azure-active-directory - 本机应用程序未授权其他租户用户