标签存档: mail

django邮件发送(支持模板)

项目里一个模块,重新封装了python的smtplib和django的template

主要功能:

  1. 支持多用户接受

  2. 支持模板

  3. 良好的处理了中文问题

代码如下:


				#!/usr/bin/env python

				# -*- coding: UTF-8 -*-

				#

				#

				__author__="Fred"

				__date__ ="$2010-5-31 17:15:35$"

				import smtplib, base64

				from django.template import loader, Context

				CHARSET = 'utf-8'

				FROM_ADD = 'xxxxxx@163.com'

				SMTP_SERVER = 'smtp.163.com'

				SMTP_USER = 'xxxxx'

				SMTP_PASS = 'xxxxx'

				class SendMail:

				u'''

				邮件发送模块,此模块运行使用django模块来发送邮件

				参数介绍(*必填):

				subject *邮件主题

				template *邮件模板位置

				context *邮件模板上下文

				to_addr *目的地址,允许发给多人,格式为['test@examp.com','test2@example',......]

				smtp_server 发件服务器地址

				smtp_server_port 发件服务器端口号

				from_addr 发信地址

				from_addr_name 发信人名称

				user 发件箱登录用户名

				pass 发件箱登录密码

				e.g:

				from ureg.helper import SendMail

				mail = SendMail('test','email/register.html',{'tmp_code':'123'},['ad@fengsage.cn'])

				mail.send_mail()

				u'''

				def __init__(self,subject,template,context,to_addr,smtp_server=SMTP_SERVER, smtp_server_port = 25 ,from_addr=FROM_ADD,from_addr_name=u'Mytut视频网',user=SMTP_USER, passwd=SMTP_PASS):

				self.subject = subject

				self.template = template

				self.context = context

				self.to_addr  = to_addr

				self.from_addr = from_addr

				self.from_addr_name = from_addr_name

				self.username = user

				self.password = passwd

				self.smtp_server_port = smtp_server_port

				self.mailserver = smtp_server

				def send_mail(self):

				from email.mime.text import MIMEText

				from email.mime.multipart import MIMEMultipart

				from email import Utils

				msgRoot = MIMEMultipart('related')

				msgRoot['Subject'] = self.subject

				msgRoot['From'] =  self.named(self.from_addr, self.from_addr_name)

				if len(self.to_addr) == 1:

				msgRoot['To'] = self.to_addr[0]

				else:

				msgRoot['To'] = Utils.COMMASPACE.join(self.to_addr)

				pass

				msgRoot['Date'] = Utils.formatdate()

				# Encapsulate the plain and HTML versions of the message body in an

				# 'alternative' part, so message agents can decide which they want to display.

				msgAlternative = MIMEMultipart('alternative')

				msgRoot.attach(msgAlternative)

				#根据模板生成html

				html = self.render(self.template, self.context).encode('utf-8')

				msgText = MIMEText(html,'html',_charset='utf-8')

				msgAlternative.attach(msgText)

				smtp = smtplib.SMTP(self.mailserver,self.smtp_server_port)

				smtp.login(self.username, self.password)

				result = smtp.sendmail(self.from_addr, self.to_addr, msgRoot.as_string())

				smtp.quit()

				def render(self,template,context):

				u'''

				读取模板内容,并赋值

				u'''

				if template:

				t = loader.get_template(template)

				return t.render(Context(context))

				return context

				def named(self,mail,name):

				u'''

				格式化右键发信/收信格式

				e.g fredzhu <me@fengsage.cn>

				u'''

				if name:

				return '%s <%s>' % (name,mail)

				return mail

				

使用方法:


				mail = SendMail(USER_REGISTER,'email/register.html',{'tmp_code':tmp_code,'tmp_user':username},[email])

				mail.send_mail()