第一篇
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 | ) |
第二篇
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会使用默认后端的实例。
以下是一个简单的事例:
- from django.core.mail import send_mail
- from django.template import Context, loader
- context = {
- 'nickname': user.nickname,
- 'verify_url': verify_url,
- }
- email_template_name = 'template.html'
- t = loader.get_template(email_template_name)
- mail_list = [user.email, ]
- send_mail(
- subject=title,
- message=t.render(Context(context)),
- from_email=EMAIL_HOST_USER, # 发件邮箱
- recipient_list=mail_list,
- fail_silently=False,
- auth_user=EMAIL_HOST_USER, # SMTP服务器的认证用户名
- auth_password=EMAIL_HOST_PASSWORD, # SMTP服务器的认证用户密码
- connection=None
- )
怎么办?我们要发送HTML邮件,Django当然是为你提供了好的解决方案的,请看下面一段代码:
- from django.core.mail import EmailMultiAlternatives
- from django.template import Context, loader
- subject, from_email, to = title, EMAIL_HOST_USER, mail_list
- html_content = t.render(Context(context))
- msg = EmailMultiAlternatives(subject, html_content, from_email, to)
- msg.attach_alternative(html_content, "text/html")
- msg.send()
- from django.core.mail import EmailMultiAlternatives
- from django.template import Context, loader
- subject, from_email, to = title, EMAIL_HOST_USER, mail_list
- html_content = t.render(Context(context))
- msg = EmailMultiAlternatives(subject, html_content, from_email, to)
- msg.attach_alternative(html_content, "text/html")
- msg.attach_file(u'D:/My Documents/Python/doc/test.doc') # 添加附件发送
- msg.send()
好了,到此为止,发送邮件已经结束了。不过,此时,需求变了,我在自己的网站上配置了多个发送邮件的用户名和密码,现在需要用我指定的用户名和密码给用户发送邮件,该怎么办呢?请看下面的一段代码:
- from django.core.mail import EmailMultiAlternatives,get_connection
- from django.template import Context, loader
- conn = get_connection() # 返回当前使用的邮件后端的实例
- conn.username = 'my_email@qq.com' # 更改用户名
- conn.password = 'my_email' # 更改密码
- conn.host = 'smtp.exmail.qq.com' # 设置邮件服务器
- conn.open() # 打开连接
- EMAIL_HOST_USER = 'my_email@qq.com'
- subject, from_email, to = title, EMAIL_HOST_USER, mail_list
- html_content = t.render(Context(context))
- msg = EmailMultiAlternatives(subject, html_content, from_email, to)
- msg.attach_alternative(html_content, "text/html")
- conn.send_messages([msg,]) # 我们用send_messages发送邮件
- 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