Python Django实现简单邮件发送功能详解

沿途有光
沿途有光
发布时间:2026-10-12 | 3人浏览过
原创

本文详细介绍如何在Python Django框架中实现简单的邮件发送功能。内容涵盖Django官方文档要点、settings.py中的SMTP服务器配置(如Gmail、163等)、EmailMessage类的使用,以及防止邮件头注入的异常处理机制。通过具体代码示例,展示如何配置后端并成功发送文本及HTML邮件,帮助开发者快速掌握Django邮件系统的基础应用。

本文通过具体实例,讲解如何利用Python Django框架实现基础的邮件发送功能,供读者参考学习。

Django邮件系统基础

参考Django官方中文文档中关于邮件发送的部分。

核心要点总结如下:

1、官方文档内容较多,建议反复阅读以彻底理解。 2、send_mail()和send_mass_mail()函数是对底层EmailMessage类的轻量级封装,因此深入理解EmailMessage类至关重要。 3、需注意异常处理,以防止邮件头注入攻击。 4、必须透彻理解Email backends(邮件发送后端)的工作原理。 5、支持多线程环境下的邮件发送。

以下是个人常用的简单配置方案:

首先需要在settings.py文件中进行配置。

#settings.py
#邮件配置
EMAIL_HOST = 'smtp.gmail.com'          #SMTP地址
EMAIL_PORT = 25                 #SMTP端口
EMAIL_HOST_USER = 'pythonsuper@gmail.com'    #我自己的邮箱
EMAIL_HOST_PASSWORD = '******'         #我的邮箱密码
EMAIL_SUBJECT_PREFIX = u'[CoorCar网]'      #为邮件Subject-line前缀,默认是'[django]'
EMAIL_USE_TLS = True               #与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false
#管理员站点
SERVER_EMAIL = 'xinxinyu2011@163.com'      #The email address that error messages come from, such as those sent to ADMINS and MANAGERS.

建议参考各大型邮箱服务商提供的SMTP服务器地址及端口列表。

常见大型邮箱服务商的SMTP服务器及端口信息如下:

新浪VIP邮箱: 外发服务器: smtp.vip.sina.com 收件服务器: pop3.vip.sina.com 新浪免费邮箱: 外发服务器: smtp.sina.com.cn 收件服务器: pop3.sina.com.cn 163邮箱: POP服务器:pop.163.com SMTP服务器:smtp.163.com QQ邮箱(企业邮): 接收邮件服务器:imap.exmail.qq.com,使用SSL,端口993 发送邮件服务器:smtp.exmail.qq.com,使用SSL,端口465或587 Yahoo邮箱: 接收服务器:pop.mail.yahoo.com.cn 发送服务器:smtp.mail.yahoo.com 126邮箱: POP服务器:pop.126.com SMTP服务器:smtp.126.com 新浪免费邮箱(通用): POP3:pop.sina.com SMTP:smtp.sina.com SMTP端口:25 新浪VIP邮箱(通用): POP3:pop3.vip.sina.com SMTP:smtp.vip.sina.com SMTP端口:25 新浪企业邮箱: POP3:pop.sina.com SMTP:smtp.sina.com SMTP端口:25 Yahoo邮箱(通用): POP3:pop.mail.yahoo.cn SMTP:smtp.mail.yahoo.cn SMTP端口:25 搜狐邮箱: POP3:pop3.sohu.com SMTP:smtp.sohu.com SMTP端口:25 TOM邮箱: POP3:pop.tom.com SMTP:smtp.tom.com SMTP端口:25 Gmail邮箱: POP3:pop.gmail.com SMTP:smtp.gmail.com SMTP端口:587 或 25 QQ邮箱(通用): POP3:pop.exmail.qq.com SMTP:smtp.exmail.qq.com SMTP端口:25 263邮箱(域名263.net): POP3:263.net SMTP:smtp.263.net SMTP端口:25 263邮箱(域名x263.net): POP3:pop.x263.net SMTP:smtp.263.net SMTP端口:25 263邮箱(域名263.net.cn): POP3:263.net.cn SMTP:263.net.cn SMTP端口:25 263邮箱(炫我型): POP3:pop.263xmail.com SMTP:smtp.263xmail.com SMTP端口:25 21CN免费邮箱: POP3:pop.21cn.com SMTP:smtp.21cn.com IMAP:imap.21cn.com SMTP端口:25 21CN经济邮邮箱: POP3:pop.21cn.com SMTP:smtp.21cn.com SMTP端口:25 21CN商务邮邮箱: POP3:pop.21cn.net SMTP:smtp.21cn.net SMTP端口:25 21CN快感邮箱: POP3:vip.21cn.com SMTP:vip.21cn.com SMTP端口:25 21CN Y邮箱: POP3:pop.y.vip.21cn.com SMTP:smtp.y.vip.21cn.com SMTP端口:25 中华网任我邮邮箱: POP3:rwpop.china.com SMTP:rwsmtp.china.com SMTP端口:25 中华网时尚、商务邮箱: POP3:pop.china.com SMTP:smtp.china.com SMTP端口:25

基于上述配置,发送邮件的代码实现如下:

def setEmail(request):
  if request.method == "POST":
#    方式一:
#     send_mail('subject', 'this is the message of email', 'pythonsuper@gmail.com', ['1565208411@qq.com','1373763906@qq.com'], fail_silently=True)
#    方式二:
#     message1 = ('subject1','this is the message of email1','pythonsuper@gmail.com',['1565208411@qq.com','xinxinyu2011@163.com'])
#     message2 = ('subject2','this is the message of email2','pythonsuper@gmail.com',['1373763906@qq.com','xinxinyu2011@163.com'])
#     send_mass_mail((message1,message2), fail_silently=False)
#    方式三:防止邮件头注入
#     try:
#       send_mail(subject, message, from_email, recipient_list, fail_silently, auth_user, auth_password, connection)
#     except BadHeaderError:
#       return HttpResponse('Invaild header fount.')
#    方式四:EmailMessage()
    #首先实例化一个EmailMessage()对象
#     em = EmailMessage('subject','body','from@example.com',['1565208411@qq.com'],['xinxinyu2011@163.com'],header={'Reply-to':'another@example.com'})
    #调用相应的方法
#     方式五:发送多用途邮件
    subject,form_email,to = 'hello','from@example.com','1565208411@qq.com'
    text_content = 'This is an important message'
    html_content = u'<b>激活链接:</b><a href="http://www.baidu.com" rel="external nofollow" >http:www.baidu.com</a>'
    msg = EmailMultiAlternatives(subject,text_content,form_email,[to])
    msg.attach_alternative(html_content, 'text/html')
    msg.send()
#    发送邮件成功了给管理员发送一个反馈
#     mail_admins(u'用户注册反馈', u'当前XX用户注册了该网站', fail_silently=True)
    return HttpResponse(u'发送邮件成功')
  return render_to_response('common/test.html')

运行效果截图如下:

class Send_mail(object):
  '''发送邮件'''
  def __init__(self,sender,passward,receivers):
    self.sender=sender
    self.password=passward
    self.receivers=receivers
  def send(self,ShowText,Name,Header_show):
    '''
    :param ShowText: 发送内容
    :param Name: 发送者
    :param Header_show: 发送文件抬头
    :return:
    '''
    message = MIMEText('%s'%(ShowText), 'plain', 'utf-8')
    message['From'] = Header("%s"%(Name), 'utf-8')
    message['To'] = Header("jiayuguang@qq.com")
    message['Subject'] = Header("%s"%(Header_show),'utf-8')
    smtpObj=smtplib.SMTP('smtp.163.com')
    smtpObj.set_debuglevel(1)
    smtpObj.login(self.sender,self.password)
    smtpObj.sendmail(self.sender,self.receivers,message.as_string())
    smtpObj.quit()

如需了解更多Python相关知识,可查阅本站相关专题,包括《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。

希望本文的内容能对您的Python程序设计工作有所帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表