使用Nvelocity实现发送邮件功能(ASP.NET MVC2环境下)
2011-03-05 23:50
806 查看
Nvelocity是一个原创于java平台,后被移植至.net平台的一个模板编辑引擎,引用Nvelocity.dll这个库文件,我们可以在原有的html模板上加载我们需要的信息,简单来讲就是可以将你需要的信息填充到html模板上。
这里我们需要实现发送邮件的功能,由于邮件内容可以填充html文件,我们首先准备一个html模板,这里我们假设存入Content文件下。
这里我们暂时不关注美刀符号以及相关的Nvelocity语法,将目光转回服务端。
在写代码之前,我们首先要引用 Nvelocity.dll这个库文件,然后进入controller文件。
现在我们来看下图片中的美刀符号,以及Nvelocity的语法,从图片中我们看到类似$order.Id、$order.Name这样的写法,其实$符号是Nvelociy调用代码的一个开始符号,这里的order是我们服务端的一个类,符号. 后面所代表的是order类里的属性,像Id,Name,Datetime
这些都是order类中所蕴含的属性,#号是命令符的开始标示,例如 #foreach($li in $order.LineItems) 这是一个枚举order类中LineItems集合的对象,值得注意的是每一个#foreach命令符都要跟一个#end作为循环的终止标记,其他的诸如#if逻辑需要配合#set使来用,例如:
#if($order.TotalPrice>150)
#set($fee="0")
#else($fee="15")
#end
$fee
这里假设当属性totalprice>150时将自定义变量置为0,不然则置为150,并显示。
我们就先写一个order类,并简单的写几个属性(Id,Name,Datetime)
写完后我们对其进行赋值,以便测试功能。
当做完了这些准备工作,下面我们可以宏观的思考邮件的制作了,发过邮件的人都明白,发送邮件需要有几个要件,1.发送人的地址,2.接收人的地址,3.邮件的标题,4.邮件的内容。 填完这四个条件我们便可发送。
于是我们这里我们定义一个方法,将类的对象(邮件内容),发送的地址,接受的地址,邮件的标题,一起送进函数。
public void CreateEmail(Order order,string mailfrom, string password, string mailto, string subject)
{
}
1.编辑邮件内容
其实难的只有制作内容的这个步骤,像标题、发送地址,接收地址都可以人为的进行设置。
当然其实使用Nvelocity引擎,自动的,会将模板与传入的对象进行合并,逻辑上制作完成了我们需要的邮件内容(html)
2.编辑邮件标题、发送地址、接收地址
编辑完了邮件的内容,其实接下来的事已经一马平川了,使用vs自带的 system.Net.Mail 库文件实例化发送邮件的服务器主机,然后实例化一个邮件对象再将内容、标题、地址等字段装入即可。
最后调用方法执行就大功告成了。
发送的结果:
这里我们需要实现发送邮件的功能,由于邮件内容可以填充html文件,我们首先准备一个html模板,这里我们假设存入Content文件下。
这里我们暂时不关注美刀符号以及相关的Nvelocity语法,将目光转回服务端。
在写代码之前,我们首先要引用 Nvelocity.dll这个库文件,然后进入controller文件。
现在我们来看下图片中的美刀符号,以及Nvelocity的语法,从图片中我们看到类似$order.Id、$order.Name这样的写法,其实$符号是Nvelociy调用代码的一个开始符号,这里的order是我们服务端的一个类,符号. 后面所代表的是order类里的属性,像Id,Name,Datetime
这些都是order类中所蕴含的属性,#号是命令符的开始标示,例如 #foreach($li in $order.LineItems) 这是一个枚举order类中LineItems集合的对象,值得注意的是每一个#foreach命令符都要跟一个#end作为循环的终止标记,其他的诸如#if逻辑需要配合#set使来用,例如:
#if($order.TotalPrice>150)
#set($fee="0")
#else($fee="15")
#end
$fee
这里假设当属性totalprice>150时将自定义变量置为0,不然则置为150,并显示。
我们就先写一个order类,并简单的写几个属性(Id,Name,Datetime)
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace SendMail.ViewModel { public class Order { private int id; public int Id { get { return id; } set { id = value; } } private string name; public string Name { get { return name; } set { name = value; } } private DateTime datetime; public DateTime Datetime { get { return datetime; } set { datetime = value; } } } }
写完后我们对其进行赋值,以便测试功能。
Order order = new Order(); order.Id = 101; order.Name = "CFXIXI44"; order.Datetime = DateTime.Now;
当做完了这些准备工作,下面我们可以宏观的思考邮件的制作了,发过邮件的人都明白,发送邮件需要有几个要件,1.发送人的地址,2.接收人的地址,3.邮件的标题,4.邮件的内容。 填完这四个条件我们便可发送。
于是我们这里我们定义一个方法,将类的对象(邮件内容),发送的地址,接受的地址,邮件的标题,一起送进函数。
public void CreateEmail(Order order,string mailfrom, string password, string mailto, string subject)
{
}
1.编辑邮件内容
其实难的只有制作内容的这个步骤,像标题、发送地址,接收地址都可以人为的进行设置。
当然其实使用Nvelocity引擎,自动的,会将模板与传入的对象进行合并,逻辑上制作完成了我们需要的邮件内容(html)
VelocityEngine velocity = new VelocityEngine();//实例化Velocity引擎 ExtendedProperties props = new ExtendedProperties();//由于velocity引擎有指定的读取模板的路径,我们必须更改这个路径将这个变更告诉引擎,于是我们附加属性,通过props这个对象通知velocity引擎。 props.AddProperty("file.resource.loader.path", Server.MapPath("~/Content"));//我们将文件目录指定为Content文件下下 velocity.Init(props);//执行附加属性操作,通知引擎 Template template = velocity.GetTemplate("email.html");//通过引擎对象velocity的方法得到模板 VelocityContext context = new VelocityContext();//实例化模板的内容(模板中需要传入内容) context.Put("order", order);//将order对象传入内容 StringWriter writer = new StringWriter();//实例化一个寄存器 template.Merge(context, writer);//将模板+内容合并装入寄存器writer
2.编辑邮件标题、发送地址、接收地址
编辑完了邮件的内容,其实接下来的事已经一马平川了,使用vs自带的 system.Net.Mail 库文件实例化发送邮件的服务器主机,然后实例化一个邮件对象再将内容、标题、地址等字段装入即可。
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();//实例化发送邮件的服务器主机(使用简单邮件发送协议) client.Host = "smtp.xxx.com"; //设定邮件的服务器主机 client.UseDefaultCredentials = false;//由于我们使用自己的邮箱作为发送地址 client.Credentials = new System.Net.NetworkCredential(mailfrom, "123456");//服务器主机需要认证你的身份(类似登入) client.DeliveryMethod = SmtpDeliveryMethod.Network;//电子邮件通过网络发送到smtp服务器 System.Net.Mail.MailMessage message = new MailMessage(mailfrom, mailto);//实例化一封邮件,并赋给邮件发送地址和接收地址 message.Subject = subject;//指定邮件的标题 message.Body = writer.GetStringBuilder().ToString();//将velocity引擎生成的内容通过寄存器的方法赋给邮件的内容 message.BodyEncoding = System.Text.Encoding.UTF8;//指定邮件内容的文字编码 //message.Bcc.Add("xxxxx@qq.com");//以密送的方式将邮件在不通知接收人的情形下,发送给别的接收人。 //message.CC.Add("xxxxx@qq.com,xxxxx@126.com");//抄送的方式,将原邮件发给其他人 message.IsBodyHtml = true;//指定邮件内容为html格式 // Attachment data = new Attachment(@"c:/youbitmap.bmp", System.Net.Mime.MediaTypeNames.Application.Octet);//指定附件的地址和文件的类型 // message.Attachments.Add(data);//在邮件中添加附件 client.Send(message);//服务器发送邮件
最后调用方法执行就大功告成了。
CreateEmail(order,"xxxx@126.com","xxxx@obizsoft.com","测试"); return Content("成功");
发送的结果:
相关文章推荐
- thinkphp5中使用phpmailer实现发送邮件功能
- JavaWeb中使用JavaMail实现发送邮件功能实例详解
- PHP使用pear实现mail发送功能 windows环境下配置pear
- 使用javamail实现邮件发送功能完整代码
- PHP环境下用sendmail实现发送邮件功能
- PHP_thinkphp框架使用PHPMailer实现发送邮件的功能,以及各种问题解析
- 使用java实现邮件发送功能(已封装)
- python3使用smtplib实现发送邮件功能
- PHP使用pear实现mail发送功能 windows环境下配置pear
- thinkphp5中使用phpmailer实现发送邮件功能(转载)
- PHP发送邮件功能实现(使用163邮箱)
- Android中使用Service实现后台发送邮件功能实例
- PHPMailer使用QQ邮箱实现邮件发送功能
- Java-使用JavaMail发送一封邮件给用户邮箱功能实现
- 在.NET中发送邮件,使用回执功能中遇到问题的解决方法[在NOTES服务器上,C#,.NET2.0环境]
- 使用JavaMail实现发送邮件功能
- thinkphp5中使用phpmailer实现发送邮件功能
- 使用python 3实现发送邮件功能
- MVC使用ASP.NET Identity 2.0实现用户身份安全相关功能,比如通过短信或邮件发送安全码,账户锁定等
- thinkphp框架使用PHPMailer实现发送邮件的功能,以及各种问题解析