Использование Sendgrid и Azure : 550, b'Unauthenticated senders not allowed'
Я пытаюсь отправить письмо о сбросе пароля пользователям через приложение, которое мы разрабатываем на Django. При локальном использовании приложения пользователь может выбрать сброс пароля, если он забыт, ввести свой email в поле и отправить, чтобы получить письмо. Электронная почта отправителя - это адрес электронной почты предприятия. Проверяя Sendgrid, я вижу в журнале активности, что письмо было обработано и доставлено. Так что, похоже, все работает.
Однако, когда я пытаюсь сделать тот же самый переход через Github, Azure, на https://XXXXXX.azurewebsites.net/en/password_reset/, я получаю следующее :
SMTPSenderRefused at /en/password_reset/ (550, b'Unauthenticated senders not allowed', 'nicolas@XXXXX.com')
В журнале я также получаю следующее:
raise SMTPSenderRefused(code, resp, from_addr)
Есть ли что-то, чего мне не хватает в Azure, другой ключ, который нужно включить. Я прочитал много похожих вопросов, но не смог найти подходящего ответа на мою проблему. Тот факт, что Sendgrid работает в локальной сети, но не в Azure, заставляет меня думать, что мне не хватает соединения на этом уровне. В остальном, все остальные аспекты приложения работают при размещении его на Azure...
Ниже приведены коды, которые я использую:
в settings.py
import os
ALLOWED_HOSTS = ['XXXXXX.azurewebsites.net']
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY')
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey' #Exactly that
EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'nicolas@XXXXX.com'
в просмотрах :
from django.core import mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
def send_password_reset_email(request):
subject = 'email reset'
html_message = render_to_string('password_reset_email.html', {'context': 'values'})
plain_message = strip_tags(html_message)
from_email = 'nicolas@XXXXX.com'
form = (request.POST)
if form.is_valid():
data = form.cleaned_data
to=data.get("email")
mail.send_mail(subject, plain_message, from_email, [to], html_message=html_message,fail_silently=False)
в url.py:
urlpatterns=[
url('', views.send_password_reset_email)
]
merci Николя
Это решено: Если SendGrid работает локально, но не работает на Azure:
В Azure выберите 'configuration', 'Application settings', 'new application settings' и затем, как показано ниже, используя правильное имя API, все заработало.
В SendGrid я назвал свой API ключ 'test', и подумал, что в Azure я должен назвать его так же. Однако я должен был назвать его так же, как в моем коде:
SENDGRID_API_KEY
Не очевидно вначале.