Не удалось импортировать переменную среды для django settings.py для отправки электронной почты в linux системе Ubuntu - PullRequest
0 голосов
/ 03 февраля 2020

Когда я указываю 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'). Я пытался добавить переменные в .bashr c и .bash_profile, но это не сработало. То, что я попробовал, показано ниже. Может ли кто-нибудь помочь мне в этом, пожалуйста.

settings.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')

.bashr c

Этот файл находится в тот же каталог, где существуют settings.py.

import os
export EMAIL_HOST_USER = 'name@gmail.com'
export EMAIL_HOST_PASSWORD = '9538913650'

main

ниже строк, которые я пробовал в терминале как в глобальной, так и в вертикальной среде.

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

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Во-первых, не используйте 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 будут работать только в том случае, если вы запускаете Django из оболочки, которая создала эти файлы. Удалите import os, это не Python.

Далее вам все равно понадобится export в вашей оболочке, если вы установите переменные перед запуском Django.

export EMAIL_HOST_USER=name@gmail.com
export EMAIL_HOST_PASSWORD=123456789

Если вы хотите установить переменные окружения в Python, тогда трактуйте os.environ как диктовку вместо попытки вызвать .set(...).

import os
os.environ['EMAIL_HOST_USER'] = 'name@gmail.com'
os.environ['EMAIL_HOST_PASSWORD'] = 12345678

Наконец, даже если это работает на вашем локальном компьютере , он может перестать работать при развертывании на сервере с другим IP-адресом. Каждую неделю я вижу вопросы о переполнении стека, когда пользователи пытаются отправить электронную почту с Django, используя gmail. Я обычно предлагаю им подумать об использовании другого провайдера электронной почты.

0 голосов
/ 03 февраля 2020

Вы пробовали библиотеку 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...