簡體   English   中英

無法為 django settings.py 導入環境變量以在 linux ubuntu 系統中發送電子郵件

[英]Couldn't able to import environment variable for django settings.py for sending email in linux ubuntu system

當我指定 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')以下錯誤(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.bash_profile只有在您從提供這些文件的 shell 中運行 Django 時才有效。 刪除import os ,它不是 Python。

接下來,如果您在運行 Django 之前設置了變量,您仍然需要在 shell 中export

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 發送電子郵件。 我通常建議他們考慮使用不同的電子郵件提供商。

您是否嘗試過decouple庫? 這是一個很好的例子: https : //simpleisbetterthancomplex.com/2015/11/26/package-of-the-week-python-decouple.html

用法:

# settings.py
from decouple import config

EMAIL_HOST_USER = config('EMAIL_HOST_USER')

然后創建一個 .env 文件(並在需要時將其添加到 .gitignore):

# .env (save in the same folder as manage.py)
EMAIL_HOST_USER = 'my_email@some_url.some_extension'

又浪費了 2 個小時...你只需要重新啟動你的電腦,它就會與你的原始代碼一起工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM