Django—发送邮件(QQ邮箱为例)
Django 支持电子邮件发送,是因为它对邮件发送的 STM 协议进行了封装。大家接都触过网络协议,我们知道 SMTP 协议就是用来支持邮件发送接收的协议,所以要实现邮件的发送功能,需要进行以下导包:
1 | from django.core import mail |
然后调用 mail 的 send_mail 方法,该方法的定义如下:
1 2 3 | def send_mail(subject, message, from_email, recipient_list, fail_silently = False , auth_user = None , auth_password = None , connection = None , html_message = None ): |
介绍主要参数的含义:
- subject:邮件主题;
- message:邮件正文内容;
- from_email:发送邮件者;
- recipient_list:邮件接受者列表;
- html_message:带有标签格式的HTML文本。
1) 开启QQ邮箱POP3/SMTP服务
先你要登录你的邮箱,然后在邮箱界面找到设置选项点击一下,会得到如下所示界面:
然后点击依次点击账户 ——>找到 POP3/IMAP/SMTP.....服务,开启 POP3/SMTP 服务,如下所示:
2) 获取POP3/SMTP第三方授权码
开启时,它需要你使用当时绑定的手机号,发送一条短信进行验证,按照它的提示发送成功后,点击已发送,就会生成一个授权码显示在你的浏览器界面上。记得保存好你的授权码,这个授权码在后面操作中还会用到,请务必妥善保管。
3) 配置Django中的settings.py文件
当获得授权码后,我们就要在 Django 的 settings.py 中进行相应的配置,切记,你没有必要记下这些配置,它的写法是固定的,当你需要的时候直接 copy 即可,但是我们要明白这些配置项的意思,它们介绍如下所示:
1 2 3 4 5 6 7 | # 固定写法设置Email引擎 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.qq.com' # 腾讯QQ邮箱 SMTP 服务器地址 EMAIL_PORT = 25 # SMTP服务的端口号 EMAIL_HOST_USER = '2817801185@qq.com' #你的qq邮箱,邮件发送者的邮箱 EMAIL_HOST_PASSWORD = 'None' #你申请的授权码(略) EMAIL_USE_TLS = False #与SMTP服务器通信时,是否启用安全模式 |
编写发送邮件视的图函数
最后一步就是要编写一个发送邮件的视图函数,它的格式几乎也是固定的,只需要更改相应的配置项即可,如下所示:
1 2 3 4 5 6 7 8 9 | def send_email(request): subject = 'C语言中文网链接' # 主题 from_email = settings.EMAIL_FROM # 发件人,在settings.py中已经配置 to_email = 'xxxxx@qq.com' # 邮件接收者列表 # 发送的消息 message = 'c语言中文网欢迎你点击登录 http://c.biancheng.net/' # 发送普通的消息使用的时候message # meg_html = '<a href="http://www.baidu.com">点击跳转</a>' # 发送的是一个html消息 需要指定 send_mail(subject, message, from_email, [to_email]) return HttpResponse( 'OK,邮件已经发送成功!' ) |
我们还可以调用 mail 的 send_mass_mail 方法实现一次性发送多条消息,demo 如下:
1 2 3 4 5 | from django.core.mail import send_mass_mail message1 = ( 'Subject here' , 'Here is the message' , 'from@example.com' , [ 'first@example.com' , 'other@example.com' ]) message2 = ( 'Another Subject' , 'Here is another message' , 'from@example.com' , [ 'second@test.com' ]) #接收元组作为参数 send_mass_mail((message1, message2), fail_silently = False ) #fail_silentl运行异常的时候是否报错,默认为True不报错 |
那么 send_mail 与 send_mass_mail 这两者的区别在哪里呢?send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏