Django 可以从 Python Shell 发送电子邮件,但从前端表单发送时 Gmail 会阻止邮件

时间:2021-01-17 07:15:01

标签: python django django-forms gmail django-email

我正在尝试按照此处的教程通过电子邮件页面重置密码: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Authentication#password_reset_templates

我可以在 Python-Django shell 中发送电子邮件,但是当我尝试通过该表单发送邮件时,Gmail 会阻止我的邮件。

我将 settings.py 中的电子邮件设置配置为:

#gmail_send/settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'foo@gmail.com'
EMAIL_HOST_PASSWORD = os.environ['EMAIL_PASSWORD']
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

当我使用 shell 执行此操作时,我能够收到电子邮件:

>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', 'your@email.com', ['test@email.com'])

我的密码重置表单看起来像这样(base_generic 只有一些引导程序和 jquery CDN 内容以及导航栏)

{% extends "myApp/base_generic.html" %}

{% block content %}
  <form action="" method="post">
  {% csrf_token %}

  {% if form.email.errors %}
    {{ form.email.errors }}
  {% endif %}
      <p>Please enter your email:</p>
      <p>{{ form.email }}</p>
    
    <input type="submit" class="btn btn-primary main_menu_button" value="Reset password">
  </form>
{% endblock %}

当我按下提交时,一切看起来都很好,我得到了一个

[17/Jan/2021 07:04:12] "GET /accounts/password_reset/done/ HTTP/1.1" 200 2105

在我的 Django 控制台中,但我在我的发件人 gmail 邮箱中收到了该消息的副本,其中包含以下消息: Gmail blocked my message!

我使用的电子邮件模板:

Someone asked for password reset for email {{ email }}. Follow the link below:
{{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

无身份验证错误,不安全的应用设置已开启。

错误链接: https://support.google.com/mail/answer/6596?visit_id=637464630298083682-3552657575&rd=1

没有告诉我为什么它被阻止了。 我早些时候使用我的个人 Gmail 尝试过这个,它得到了相同的结果,我可以使用 shell 而不是通过表单发送它。然后我最终收到了一些每日限额错误,所以现在我在使用 Google Workspace 帐户并收到相同的错误。


更新:

好的,所以当我用 “TESSST 测试测试” 它工作正常。

我正在我的本地机器上测试它,所以电子邮件看起来像

To reset your password for the account using foobar@gmail.com, open the link below:
http://127.0.0.1:8000/accounts/reset/MQ/aglzs9-564bdd0d8b571edc81c193346a0df9cd/

我猜 http://127.0.0.1:8000 一定是一个被禁止的词组什么的。

出于安全原因,Google 可能有一堆未记录在案的屏蔽短语,您不能将其包含在电子邮件中。

0 个答案:

没有答案
相关问题