首页 > 解决方案 > 使用 Sendgrid 和 Azure:550,b'不允许未经身份验证的发件人'

问题描述

我正在尝试通过我们正在使用 Django 开发的应用程序向用户发送密码重置电子邮件。在本地尝试应用程序时,用户可以选择如果忘记重置密码,在字段中输入他的电子邮件并提交,以便接收电子邮件。发件人电子邮件是企业电子邮件地址。检查 Sendgrid,我可以看到电子邮件已被处理和传递的活动日志。所以它似乎工作。

但是,当尝试在https://XXXXXX.azurewebsites.net/en/password_reset/上通过 Github、Azure 进行相同的传递时,我得到以下信息:

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)
]

谢谢尼古拉斯

标签: pythondjangoazureemailsendgrid

解决方案


这已解决:如果 SendGrid 在本地工作,但不在 Azure 上:

在 Azure 中,选择“配置”、“应用程序设置”、“新应用程序设置”,然后如下所示,使用正确的 API 名称使其工作。

在 SendGrid 中,我将我的 API 密钥命名为“test”,并认为在 Azure 中我应该将其命名为相同。但是,我应该将其命名为与我的代码中相同的名称:

SENDGRID_API_KEY

一开始并不明显。


推荐阅读