Django 中的电子邮件未发送
Email in Django not sending
我正在尝试使用 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>
您没有向 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)
Don't forget to import the EmailForm in view.
注:-
我没有在 database
中保存表格。
如果你想向 Django 的注册用户发送电子邮件,那么你必须在 [receiver_host_email@gmail.com]
的位置指定 receiver
的电子邮件,如 [request.user.email]
。
好吧,我明白了。我注意到要发送邮件,表单操作必须 return 自身(我不知道为什么,但这就是它发送的方式)。所以 <form action="{% url 'app:success' %}" method="POST">
变成 <form action="{% url 'app:send_mail' %}" method="POST">
我正在尝试使用 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>
您没有向 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)
Don't forget to import the EmailForm in view.
注:-
我没有在
database
中保存表格。如果你想向 Django 的注册用户发送电子邮件,那么你必须在
[receiver_host_email@gmail.com]
的位置指定receiver
的电子邮件,如[request.user.email]
。
好吧,我明白了。我注意到要发送邮件,表单操作必须 return 自身(我不知道为什么,但这就是它发送的方式)。所以 <form action="{% url 'app:success' %}" method="POST">
变成 <form action="{% url 'app:send_mail' %}" method="POST">