django1.62发送邮件(汇总)

第一篇

settings.py文件中添加配置:

1 #django email config
2 EMAIL_HOST='smtp.gmail.com'
3 EMAIL_HOST_USER='yige@gmail.com'
4 EMAIL_HOST_PASSWORD='yige.org'
5 EMAIL_USE_TLS = True  #如果是Gmail,这里一定要是True

发送普通邮件:

1 from django.core.mail import send_mail
2 send_mail('subject',                  #主题
3           'body',                     #邮件内容
4           'yige@gmail.com',       #发件人,可以是英文名
5           ['webadmin@yige.org'],  #收件人,可以是多个
6           fail_silently=True          #发送异常时不提示
7           )

发送html超文本邮件:

01 # -*- coding: utf-8 -*-
03 from django.core.mail import EmailMessage
04 from django.template import loader
05 from settings import EMAIL_HOST_USER
06   
07 def send_html_mail(subject, html_content, recipient_list):
08     msg = EmailMessage(subject, html_content, EMAIL_HOST_USER, recipient_list)
09     msg.content_subtype = "html" # Main content is now text/html
10     msg.send()
11   
12 html_content = loader.render_to_string(
13                template_path,            #需要渲染的html模板
14                {'paramters':paramters}   #需要传给模板的参数
15                )
16   
17 send_html_mail(u'测试邮件主题',
18                html_content,
19                ['yige@gmail.com','webadmin@yige.org']
20                )




第二篇


1、send_mail()send_mass_mail()都是对EmailMessage类使用方式的一个轻度封装,所以要关注底层的EmailMessage
2、异常处理防止邮件头注入。
3、一定要弄懂Email backends 邮件发送后端

4、多线程的邮件发送。


个人简单配置如下:
首先是settings.py文件

复制代码
#settings.py

#邮件配置
EMAIL_HOST = 'smtp.gmail.com'                   #SMTP地址
EMAIL_PORT = 25                                 #SMTP端口
EMAIL_HOST_USER = 'pythonsuper@gmail.com'       #我自己的邮箱
EMAIL_HOST_PASSWORD = '******'                  #我的邮箱密码
EMAIL_USE_TLS = True                             #与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false


那么发送邮件如下:

复制代码
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">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')
        
复制代码

第三篇

 我们常用的当然是通过send_mail发送邮件:

       send_mail(subject,message,from_email,recipient_list,fail_silently=False,auth_user=None,auth_password=None,connection=None)

     

subject,message,from_email 和recipient_list 这四个参数是必须的。

  • subject: 字符串,表示邮件标题。
  • message: 字符串,表示邮件内容。
  • from_email: 字符串,表示发件邮箱。
  • recipient_list: 字符串列表,列表中每个成员都是一个邮箱地址,而且每个收件人都会在 “收件人/To:” 栏看到出现在recipient_list 中的其他收件人。
  • fail_silently: (可选)布尔值。为False 时,send_mail 会抛出smtplib.SMTPException 异常。smtplib 文档列出了所有可能的异常。这些异常都是SMTPException  的子类。
  • auth_user: (可选)SMTP服务器的认证用户名。没提供该参数的情况下,Django会使用EMAIL_HOST_USER 配置项的设置。
  • auth_password: (可选)SMTP服务器的认证密码,没提供该参数的情况下,Django会使用EMAIL_HOST_PASSWORD  配置项的设置。
  • connection: (可选)发送邮件的后端。没提供该参数的情况下,Django会使用默认后端的实例。

   以下是一个简单的事例:

[python]  view plain copy print ?
  1.            from django.core.mail  import  send_mail  
  2.            from django.template import Context, loader  
  3.              
  4.            context = {  
  5.                 'nickname': user.nickname,  
  6.                 'verify_url': verify_url,  
  7.            }  
  8.            email_template_name = 'template.html'  
  9.            t = loader.get_template(email_template_name)  
  10.            mail_list = [user.email, ]  
  11.            send_mail(  
  12.                 subject=title,  
  13.                 message=t.render(Context(context)),  
  14.                 from_email=EMAIL_HOST_USER,         # 发件邮箱  
  15.                 recipient_list=mail_list,  
  16.                 fail_silently=False,  
  17.                 auth_user=EMAIL_HOST_USER,          # SMTP服务器的认证用户名  
  18.                 auth_password=EMAIL_HOST_PASSWORD,  # SMTP服务器的认证用户密码  
  19.                 connection=None  
  20.             )  
     用过的人可能会发现,你在template.html中的标签,并没有通过浏览器的解析而显示出来了。

     怎么办?我们要发送HTML邮件,Django当然是为你提供了好的解决方案的,请看下面一段代码:

[python]  view plain copy print ?
  1. from django.core.mail import EmailMultiAlternatives  
  2. from django.template import Context, loader   
  3.   
  4. subject, from_email, to = title, EMAIL_HOST_USER, mail_list  
  5. html_content = t.render(Context(context))  
  6. msg = EmailMultiAlternatives(subject, html_content, from_email, to)  
  7. msg.attach_alternative(html_content, "text/html")  
  8. msg.send()  
看,很简单吧,那么现在我要稍稍的做一点点改动,我需要发送附件给收件人,只需要做一个简单的修改即可:

[python]  view plain copy print ?
  1. from django.core.mail import EmailMultiAlternatives  
  2. from django.template import Context, loader   
  3.   
  4. subject, from_email, to = title, EMAIL_HOST_USER, mail_list  
  5. html_content = t.render(Context(context))  
  6. msg = EmailMultiAlternatives(subject, html_content, from_email, to)  
  7. msg.attach_alternative(html_content, "text/html")  
  8.   
  9. msg.attach_file(u'D:/My Documents/Python/doc/test.doc')        # 添加附件发送  
  10.   
  11. msg.send()  

好了,到此为止,发送邮件已经结束了。不过,此时,需求变了,我在自己的网站上配置了多个发送邮件的用户名和密码,现在需要用我指定的用户名和密码给用户发送邮件,该怎么办呢?请看下面的一段代码:

[python]  view plain copy print ?
  1. from django.core.mail import EmailMultiAlternatives,get_connection  
  2. from django.template import Context, loader   
  3.   
  4. conn = get_connection()                # 返回当前使用的邮件后端的实例   
  5. conn.username = 'my_email@qq.com'      # 更改用户名   
  6. conn.password = 'my_email'             # 更改密码   
  7. conn.host = 'smtp.exmail.qq.com'       # 设置邮件服务器   
  8. conn.open()                            # 打开连接  
  9.   
  10. EMAIL_HOST_USER = 'my_email@qq.com'  
  11. subject, from_email, to = title, EMAIL_HOST_USER, mail_list  
  12. html_content = t.render(Context(context))  
  13. msg = EmailMultiAlternatives(subject, html_content, from_email, to)  
  14. msg.attach_alternative(html_content, "text/html")  
  15.   
  16. conn.send_messages([msg,])             # 我们用send_messages发送邮件  
  17. conn.close()                           # 发送完毕记得关闭连接  

  看来,也不是很难吧!
django.core.mail 的 get_connection()方法返回你当前使用的邮件后端的实例。
get_connection(backend=None,fail_silently=False,*args, **kwargs)
默认情况下,对 get_connection() 的调用会返回一个邮件后端实例,具体是哪个后端由EMAIL_BACKEND 配置项决定。如果指定了``backend`` 参数,就会对该后端进行实例化。

   友情提示:在发送的HTML邮件中包含图片时,应该制定可以通过http访问的地址。如:http://www.baidu.com/medias/xxx.png




附录:

各大型邮箱smtp服务器及端口收集:

新浪邮箱smtp服务器
外发服务器:smtp.vip.sina.com
收件服务器:pop3.vip.sina.com


新浪免费邮件
外发服务器:smtp.sina.com.cn
收件服务器:pop3.sina.com.cn


163邮箱smtp服务器
pop: pop.163.com
smtp: smtp.163.com


QQ邮箱smtp服务器及端口
接收邮件服务器:imap.exmail.qq.com,使用SSL,端口号993
发送邮件服务器:smtp.exmail.qq.com,使用SSL,端口号465或587


yahoo邮箱smtp服务器
接:pop.mail.yahoo.com.cn
发:smtp.mail.yahoo.com


126邮箱smtp服务器
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


雅虎邮箱
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


域名:x263.net
POP3:pop.x263.net
SMTP:smtp.x263.net
SMTP端口号:25


域名:263.net.cn
POP3:263.net.cn
SMTP:263.net.cn
SMTP端口号:25


域名:炫我型
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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值