第一步:开启邮箱的SMTP服务,获取其授权密码
方法:打开请求邮箱–>点击设置–>进入账户设置–>下滑找到SMTP服务并打开–>复制生成的授权码
–>将授权码复制
第二步:设置setting.py,将邮箱的信息设置好来
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smpt服务地址
EMAIL_HOST = 'smtp.qq.com'
# 端口号
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = '你的QQ号@qq.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '填刚刚的那个授权密码'
# 收件人看到的发件人
EMAIL_FROM = 'django<你的QQ号@qq.com>'
第三步:发送文本文件(一般再view写代码,具体情况具体使用)
关键步骤:
1、导入send_mail方法:from django.core.mail import send_mail
2、使用send_mail方法发送邮件:
send_mail(subject=邮件主题, message=邮件内容, from_email=settings.EMAIL_FROM, recipient_list=[发送给],fail_silently=False)
具体代码:
发送邮件html页面:sendMail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<table>
<tr>
<td>发送至:</td>
<td><input type="email" name="sendTo" placeholder="请输入邮箱"></td>
</tr>
<tr>
<td>发送主题:</td>
<td><input type="text" name="sendSubject" placeholder="请输入邮件主题"></td>
</tr>
</table>
发送内容:<br />
<textarea name="context" placeholder="开始输入..." rows="10" cols="30"></textarea> <br />
<input type="submit" value="发送">
<input type="reset" value="取消">
</form>
</body>
</html>
form表单:forms.py
from django import forms
class mailForm(forms.Form):
sendTo = forms.EmailField(label='发送至:', max_length=20)
sendSubject = forms.CharField(label='发送主题:', max_length=50)
context = forms.CharField()
视图函数:views.py
from django.shortcuts import render
from django.views.generic import View
from .forms import mailForm
from django.conf import settings
from django.core.mail import send_mail
class sendMailView(View):
def get(self, request):
form = mailForm()
return render(request, 'sendMail.html')
def post(self, request):
form = mailForm(request.POST)
if form.is_valid():
sendTo = form.cleaned_data['sendTo']
sendSubject = form.cleaned_data['sendSubject']
context = form.cleaned_data['context']
send_mail(subject=sendSubject, message=context, from_email=settings.EMAIL_FROM, recipient_list=[sendTo],fail_silently=False)
return render(request, 'sendMail.html')
配置app路由:urls.py
from django.urls import path
from . import views
app_name = 'sendmail'
urlpatterns = [
path('', views.sendMailView.as_view(), name='sendMail'),
]
配置项目路由:
from django.urls import path, include
urlpatterns = [
path('sendmail/', include('sendmail.urls')),
]
其他:若发送的是html页面,其步骤如下:
基本操作和上面一样
不同点:准备好邮件的html模板,以及使用EmailMessage(subject, html_content, settings.EMAIL_HOST_USER, recipient_list)来管理邮件信息
邮件渲染页面:email.htm
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>邮件</title>
</head>
<body>
<h1 style="color: pink">主题:{{ mailSubject }}</h1>
<h2 style="color: rosybrown">发送人:{{ sender }}</h2>
<h3 style="color: darkcyan">发送内容:{{ mailcontext }}</h3>
</body>
</html>
视图函数:
from django.shortcuts import render
from django.views.generic import View
from .forms import mailForm
from django.conf import settings
from django.core.mail import EmailMessage
from django.template import loader // 用来加载html模板页面
class sendHtmlMailView(View):
def get(self, request):
form = mailForm()
return render(request, 'sendMail.html')
def post(self, request):
form = mailForm(request.POST)
if form.is_valid():
sendTo = form.cleaned_data['sendTo']
sendSubject = form.cleaned_data['sendSubject']
context = form.cleaned_data['context']
// 要发送的html邮件
html_content = loader.render_to_string(
'email.html', // 渲染模板
{
'mailSubject' : sendSubject, // 参数
'sender' : settings.EMAIL_HOST_USER,
'mailcontext' : context
}
)
send_html_mail(subject=sendSubject, html_content=html_content, recipient_list=[sendTo])
return render(request, 'sendMail.html')
// 定义了一个方法,用来发送html邮件
def send_html_mail(subject, html_content, recipient_list):
// 参数:邮件主题、html代码、发送人、接收人列表
msg = EmailMessage(subject, html_content, settings.EMAIL_HOST_USER, recipient_list)
msg.content_subtype = "html" // 设置邮件信息类型为html
msg.send() // 发送邮件