正文
一般时候,我们需要在界面上有一键发送邮件的功能,那么首先先创建一个按钮,如下:
1
2
3
4
5
6
7
8<div class="post">
<div class="user-block">
</div>
<!-- 以下这种写法可以直接召唤邮件系统,但是没有内容 -->
<strong> 点击按钮就会以taoxi.cs@alibaba-inc.com发送邮件到对应的邮件组 </strong>
<br>
<button type="button" class="btn btn-danger" onclick="AjaxSubmit();">发送邮件</button>
</div>
由于点击按钮发送邮件,页面并不发生跳转,所以我们用ajax来绑定点击这个任务,同时需要新增一个script:
1
2
3
4
5
6
7
8
9
10
11
12<script>
function AjaxSubmit() {
var status = '邮件已经发送成功!';
$.ajax({
url:'/naxx/send_mail/',
type:'POST',
data:{status:status},
success:function (arg){
}
})
}
</script>
保存后,效果如下:
这里面由于新增了一个路由send_mail
,于是就去urls.py
里增加对应的函数:
1
path('send_mail/', views.send_mail, name='send_mail'), # ajax发送邮件功能
然后去Django的settings.py
里添加对应的邮箱信息:
1
2
3
4
5
6
7
8EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.XXX.com' # 这里是邮箱服务器
EMAIL_USE_SSL = True
EMAIL_USE_TLS = not EMAIL_USE_SSL # 这里跟EMAIL_USE_SSL是互斥的,只有一个是True
EMAIL_PORT = 465 # 如果是SSL发送就是465,不然大概率是25接口
EMAIL_HOST_USER = "发送者的邮箱"
EMAIL_HOST_PASSWORD = "发送者的密码"
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
返回到views.py
里,新增如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31from django.conf import settings # 将settings的内容引进
from django.core.mail import EmailMultiAlternatives # 这样可以发送HTML格式的内容了
# 在大促压测详情页发送邮件
def send_mail(request):
subject = '2020年9月25日XXX次压测报告'
text_content = '这是一封veryveryvery重要的邮件.'
html_content = '''
<p>这是一封<strong>重要的</strong>邮件.<br>好好学习天天向上</p>
<table border="1">
<tr>
<th>Header 1</th>
<th>Header 2</th>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
'''
from_email = settings.DEFAULT_FROM_EMAIL
msg = EmailMultiAlternatives(subject, text_content, from_email, ['接收人的邮箱地址'])
msg.attach_alternative(html_content, "text/html")
msg.send()
print(request.POST)
return JsonResponse({'status': '邮件已经发送成功!'}) # 这个信息返回给AJAX
保存之后,在页面上尝试一下点击“发送邮件”按钮试试,效果如下:
如果你想在HTML里直接调用系统默认电邮程序发送邮件,就把HTML这么写:
1
<a href="mailto:XXX@126.com">Email</a>
到时候点击Email
链接就会弹出程序了。
参考资料
https://www.cnblogs.com/yifchan/p/python-1-34.html
https://blog.csdn.net/qq_35695253/article/details/80145634 《Django获取该数据的上一条和下一条》