【问题标题】:Email in Django not sendingDjango中的电子邮件不发送
【发布时间】:2021-08-06 02:51:12
【问题描述】:

我正在尝试使用 Gmail SMTP 发送电子邮件,我的所有电子邮件设置都是正确的,但电子邮件未发送并且我没有收到任何异常。 我正在从 HTML 表单中提取我的值。另外,我注意到当我尝试从 shell 终端发送邮件时,它实际上是在发送,但不是在应用程序本身上。

电子邮件设置

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 587
EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD')
EMAIL_HOST_USER = config('EMAIL_HOST_USER')
EMAIL_USE_TLS = config('EMAIL_USE_TLS', default=True, cast=bool)

views.py

from django.shortcuts import render
from django.core.mail import send_mail

def send_mail(request):
    if request.method == "POST":
        name= request.POST["name"]
        gender= request.POST["gender"]
        contact_addr= request.POST["contact_addr"]

        msg = 'Hello', name


        send_mail(
            "Subject",
            msg,
            'sender@gmail.com',
            ["receiver@gmail.com"],
            fail_silently=False,
        )

        return render(request, "main.html", {'name':name})
    else:
        return render(request, "main.html", {})

html 模板

<form
        action="{% url 'app:success' %}"
        method="POST"
      >
        {% csrf_token %}
        <div class="row">
          <label for="name">Name</label>
          <input
            name="name"
            id="name"
          />
        </div>

        <div class="row">
          <label for="gender">Gender</label>
          <input
            name="gender"
            id="gender"
          />
        </div>

        <div class="row">
          <label for="contact">Contact</label>
          
          <input
            name="contact"
            id="contact"
          />
        </div>

        <div class="row">
          <input type="submit" value="send" />
        </div>
      </form>

【问题讨论】:

  • 你能举个例子吗?
  • 是的,请发送您的 settings.py 和您的视图的 sn-p。不要显示密码等信息,因为它应该保密
  • 已经添加了 sn-p
  • 为“send_mail”分配一个变量,例如:xyz = send_mail(....)。也不要将您的视图命名为与方法相同的名称。它可能会让人困惑
  • 好的...那么,我如何调用变量来发送邮件?

标签: django django-views django-email


【解决方案1】:
  • 您没有适当地向 Django 提供 email 以发送邮件。

  • 更改视图名称。

  • 你没有提供任何 Django 知道是否发送电子邮件的东西。

您应该创建一个表单(也许是为了测试它)。 (你也可以不用表格):-

forms.py

class EmailForm(forms.Form):
    name = forms.CharField(max_length=25)
    description = forms.CharField(widget=forms.Textarea)

views.py

from .forms import EmailForm
 
def sending_email_django(request):

    sent = False
    if request.method == "POST":
        form = EmailForm(request.POST)

        subject = f" This is email via Django."\
        message = f" Is email is receiving ? "\

        send_mail(subject, message, 'sender_host_email@gmail.com',
                   ['receiver_host_email@gmail.com'])

        sent = True # Email is sent

    else:
        form = EmailForm()

    context = {'form':form}
    return render(request, 'send_email_page.html', context)

别忘了在视图中导入 EmailForm。

注意:-

  • 我没有将表单保存在database

  • 如果你想给 Django 的注册用户发送电子邮件,那么你必须在[receiver_host_email@gmail.com] 的位置指定receiver 的电子邮件,例如[request.user.email]

【讨论】:

  • 我没有使用 Django 表单,而是 HTML 联系表单,而且我已将视图名称更改为其他名称,结果仍然相同。
  • testform 联系了吗?
  • 是的,我做到了。一切正常,但没有发送邮件,我也没有收到任何错误。
  • 我已经编辑了问题,您可以查看模板。 @PrOgRaMmmer
【解决方案2】:

好吧,我想通了。我注意到要发送邮件,表单操作必须返回到自身(我不知道为什么,但这就是它的发送方式)。所以&lt;form action="{% url 'app:success' %}" method="POST"&gt;变成&lt;form action="{% url 'app:send_mail' %}" method="POST"&gt;

【讨论】:

    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 2013-07-20
    • 2011-10-18
    • 1970-01-01
    • 2012-04-26
    • 2014-10-26
    • 2012-05-20
    • 2019-10-29
    相关资源
    最近更新 更多