使用 Django 和 Gmail 后端发送电子邮件

Send email using Django and Gmail backend

提问人:fr0zie 提问时间:9/4/2023 更新时间:9/4/2023 访问量:146

问:

我正在努力使用 Gmail 后端使用自定义域发送电子邮件。

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = os.environ["EMAIL_HOST_USER"]
EMAIL_HOST_PASSWORD = os.environ["EMAIL_HOST_PASSWORD"]
EMAIL_PORT = 587
EMAIL_USE_TLS = True
email = EmailMessage(
    subject,
    content,
    "my[email protected]",
    [customer.email]
)
email.send()

我已经使用自定义域创建了一个 Google 帐户并生成了一个应用密码,但是当使用自定义域时,我得到:EMAIL_HOST_USER(535, b'5.7.8 Username and Password not accepted. Learn more at https://support.google.com/mail/?p=BadCredentials')

EMAIL_HOST_USER = os.environ["EMAIL_HOST_USER"] # [email protected]

然后我尝试使用 gmail.com 域的 Google 帐户,这次它有效:

EMAIL_HOST_USER = os.environ["EMAIL_HOST_USER"] # [email protected]

因此,我需要发件人的邮件与. 我尝试在 Google 中添加辅助邮件地址并使用,但它似乎没有改变任何东西。[email protected]DEFAULT_FROM_EMAIL = "[email protected]"

我也尝试了这篇文章中的解决方案,同样的问题。

python django 电子邮件 gmail-api

评论


答:

1赞 Hassaan 9/4/2023 #1

请按照下列步骤操作

设置 Gmail 帐户应用密码 为了让 Django 能够通过 Gmail 发送电子邮件并遵守 Gmail 的发送策略,您需要设置安全性较低的应用程序访问权限并创建应用程序密码。

如果您未设置安全性较低的应用访问权限,则在尝试发送电子邮件时将收到 SMTPAuthenticationError。

  1. 导航到 myaccount.google.com/lesssecureapps 并打开 less 安全应用程序的选项。

  2. 启用 2 因素身份验证。这是必需的,以便使用 安全性较低的应用。

  3. 导航到 myaccount.google.com/security 并向下滚动到 “登录 Google”部分。点击“应用密码”。

  4. 系统会要求您输入个人 Gmail 帐号密码。下一个 点击“选择应用”,输入你的 Django 应用的名称。使用 与你在终端中为应用指定的名称相同 (DjangoEmailServer.)单击“生成”。

  5. 现在,您可以将生成的应用程序密码复制到 EMAIL_HOST_PASSWORD settings.py 文件中的值。

    从 django.core.mail 导入send_mail 从 django.conf 导入设置

    send(subject, message, recipients):
        send_mail(
                subject=subject,
                message=message,
                from_email=settings.EMAIL_HOST_USER,
                recipient_list=recipients)
    

`

评论

0赞 fr0zie 9/4/2023
正如您所说,Google 不再支持安全性较低的应用程序访问,那么为什么要告诉我打开安全性较低的应用程序的选项呢?该页面显示“此设置不适用于您的帐户”。顺便说一句,我已经尝试过“from_email”参数,它没有任何作用。发件人的电子邮件仍然是 gmail 的电子邮件。
0赞 Hassaan 9/4/2023
如果您使用的是 Window,那么请注意 Sendmail 剂量不容易工作,您需要为它编写函数
0赞 fr0zie 9/4/2023
它确实有效,问题是即使使用“from_email=settings.EMAIL_HOST_USER“,我收到的邮件仍然由 Gmail 地址发送。