首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>ASP.NET中进行消息处理(MSMQ)二

ASP.NET中进行消息处理(MSMQ)二

2008-07-01 07:07作者:beniao出处:天极网责任编辑:nancy

  四、MSMQ在邮件发送程序中的应用

  在邮件程序的应用中,实现发送邮件的方法有很多种,很多朋友都比较喜欢邮件发送组件(如:JMail),在.NET Framework里也给我们提供了发送邮件的类StmpClient,位于System.Net下。我想很多朋友都曾用到过此类,如果说是在一个小型的邮件应用里,完全没有使用MSMQ的必要,因为数据量不大,直接处理就OK,这里我以邮件程序来说只是出于对MSMQ应用的介绍。说实在的,我也不知道怎么才能把这个东东给介绍清楚,先看看一张图吧!

  现在的需求是这样的,有一个邮件发送客户端(SendMail.aspx,界面效果如上图所示)和一个邮件发送管理的服务端(MailServer.aspx),当在SendMail.aspx里发送邮件的时候,我们不直接将其发到目标地址去,而是将其发送到消息队列,然后由MailServer.aspx来负责从消息队列里读取出邮件信息在将其发送到目标地址。其实SendMail.aspx的职责就是完成把邮件信息发送到消息队列,示意性代码如下:

 1protected void btnSendMail_Click(object sender, EventArgs e)
 2{
 3    //取出数据存入MailInfo对象
 4    MailInfo info = new MailInfo();
 5    info.Title = tbTitle.Text;
 6    info.Content = tbContent.Text;
 7    info.StmpServer = tbSmtpServer.Text;
 8    info.Sender = tbSender.Text;
 9    info.SenderPwd = tbSenderPwd.Text;
10    info.ReceiveAddress = tbReceive.Text;
11
12    if (info != null)
13    {
14        CreateQueue();
15        SendMessage(info);
16    }
17}

  CreateQueue和SendMessage这两个方法完成消息队列的创建和发送信息到队列,MailInfo类封装的是邮件的详细信息(既邮件的属性),详细定义如下:


1public class MailInfo
 2{
 3    public MailInfo()
 4    {
 5       
 6    }
 7
 8    private string _Title;
 9    public string Title
10    {
11        get { return _Title; }
12        set { _Title = value; }
13    }
14
15    private string _Content;
16
17    public string Content
18    {
19        get { return _Content; }
20        set { _Content = value; }
21    }
22    private string _Sender;
23
24    public string Sender
25    {
26        get { return _Sender; }
27        set { _Sender = value; }
28    }
29    private string _SenderPwd;
30
31    public string SenderPwd
32    {
33        get { return _SenderPwd; }
34        set { _SenderPwd = value; }
35    }
36    private string _StmpServer;
37
38    public string StmpServer
39    {
40        get { return _StmpServer; }
41        set { _StmpServer = value; }
42    }
43    private string _ReceiveAddress;
44
45    public string ReceiveAddress
46    {
47        get { return _ReceiveAddress; }
48        set { _ReceiveAddress = value; }
49    }
50}

  转到邮件管理端(MailServer.aspx),他负责从消息队列里读取出邮件信息并把此邮件发送到目标地址去。其实现很简单,说直接点他也就是完成了两项操作(从队列读消息、将消息发送到目的邮箱),从队列读取消息的代码如下:

1/**//// <summary>
 2/// 连接消息队列并从队列中接收消息
 3/// </summary>
 4private MailInfo ReceiveMessage()
 5{
 6    MailInfo info = null;
 7    //连接到本地队列
 8    MessageQueue myQueue = new MessageQueue(".\\private$\\myMailQueue");
 9    myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(MailInfo) });
10    try
11    {
12        if (myQueue.Transactional)
13        {
14            MessageQueueTransaction myTransaction = new MessageQueueTransaction();
15            //启动事务
16            myTransaction.Begin();
17            //从队列中接收消息
18            Message myMessage = myQueue.Receive(myTransaction);
19            info = myMessage.Body as MailInfo; //获取消息的内容
20            myTransaction.Commit();
21            return info;
22        }
23
24    }
25    catch (MessageQueueException e)
26    {
27        this.tdError.InnerText = e.Message;
28    }
29    return info;
30}

  该方法(ReceiveMessage)返回的是从队列里读取到的邮件信息,本示例中只是做了读一条信息的实现,如果要把队列里的全部信息读出并发送到目的邮箱,可以参考我前面所介绍的相关知识点来实现。得到了邮件的详细信息,我们就可以使用相应的技术将这信息发送到目标邮箱去,本示例中我采用的是.NET Framework里提供的SmtpClient类来完成的邮件发送,关于SmtpClient类的使用网上有相当丰富的资料介绍,这里我就不做详细的说明,核心代码如下:

1protected void Button2_Click(object sender, EventArgs e)
 2{
 3    if (info != null)
 4    {
 5        SmtpClient client = new SmtpClient();
 6        client.Host = info.StmpServer;
 7        client.UseDefaultCredentials = false;
 8        client.Credentials = new NetworkCredential(info.Sender, info.SenderPwd);
 9        client.DeliveryMethod = SmtpDeliveryMethod.Network;
10
11        MailMessage message = new MailMessage(info.Sender, info.ReceiveAddress);
12        message.Subject = info.Title;
13        message.Body = info.Content;
14        message.BodyEncoding = Encoding.UTF8;
15        message.IsBodyHtml = true;
16
17        try
18        {
19            //发送邮件到目标地址
20            client.Send(message);
21            this.tdSucces.InnerText = "邮件已成功发送到目标地址:" + info.ReceiveAddress;
22        }
23        catch (Exception ex)
24        {
25            this.tdError.InnerText = "发送失败,失败原因:" + ex.Message;
26        }
27    }
28}

  运行后的效果图如下:

  本文中的所有示例程序全部通过调试,能力有限,文中所介绍的不是很清楚,详细可直接下载源代码了解。本代码包里也包含有第一篇文章里的全部示例程序代码。

    点击连接下载示例程序代码:示例程序代码下载

共4页。 上一页1234
进入 最权威的Windows 7论坛 查看网友讨论

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络