新增TinyMessage,并实现邮件接收处理
2015-09-10 09:40
323 查看
序言
我们在业务处理过程中,经常要处理各种信息,比如:站内信息、邮件信息、还可能有短信、彩信,甚至可能与各种IM软件进行对立的信息系统。
Tiny框架也需要面对这个问题,不一样的是我觉得这几种类型的信息处理模式都是一样的,因此试图采用统一的模式进行处理。
在开始之前,我们先梳理一下需求:
可以支持各种信息系统如:短信,彩信,邮件,IM,站内信息的接收与发送
在接收或发送消息的时候可以进行各种逻辑处理,比如:收到某种类型的邮件怎么处理,收到某种内容的短信怎么处理。
邮件收到的时候,可以不删除,可以删除,也可以改成已读等各种状态
发送邮件的时候,可以附加各种附件,比如:来自文件的,来自内存的等等
概念抽象
因此,我们就抽象了下面的几个概念:
085916_Vhc7_1245989.jpg (13.4 KB, 下载次数: 0)
下载附件
2015-5-27 21:20 上传
MessageAccount:接收信息或发送信息时,需要帐户,因此抽象一个信息帐户概念。
MessageReceiver:信息接收者
MessageSender:信息发送者
Message:要发送的信息,对应于邮件,短信,彩信之类
MessageReceiveService:用于提供信息发送服务
MessageSendService:用于提供信息接收服务
MessageException:用于在出现问题的时候,抛出异常
MessageSendProcessor:用于在发送信息的时候根据信息触发一些操作
MessageReceiveProcessor:用于在接收信息的时候根据信息触发一些操作
MessageManager:用于进行信息接收与发送
行为分析
当然,上面的概念的建立不是为了看看的,是要在我们的信息框架中参与的,当然它们中的一些就有一些行为,下面我们就分析一下这些概念的行为有哪些:
090755_w4fP_1245989.jpg (54.15 KB, 下载次数: 0)
下载附件
2015-5-27 21:20 上传
下面一个一个来分析一下:
MessageAccount:由于不同的信息模式,信息收发的帐号情况,并不一致,因此这里就只放个接口,没有办法进一步约束。同样的,MessageSender,Message,MessageReceiver也一样,因此,它们就是个空接口,把问题交给其后代来处理。
MessageReceiveServer:用于接收信息,只有一个方法,返回信息。
MessageSendService:用于发送信息,只有一个方法。
MessageSendProcessor:用于在发送信息的时候根据信息情况触发一些操作,一个方法用于判断是否命中,一个进行真正的处理。
MessageReceiveProcessor:用于在接收信息的时候根据信息情况触发一些操作,一个方法用于判断是否命中,一个进行真正的处理。
MessageManager:它其实是对MessageReceiveService和MessageSendService的进一步封装,在这里提供了事件触发的一些扩展。
在底层,只有MessageManager是有实现类的,即MessageManagerDefault,这也正常,由于其它的都不确定,所以就没法实现了。
到时为此,信息处理的底层抽象与设计就算完成了。
实现案例-Email收发
093736_NRBE_1245989.jpg (59.22 KB, 下载次数: 0)
下载附件
2015-5-27 21:20 上传
到了收发邮件,因为已经是具体问题,因此上次留给子孙解决的问题,都可以解决了。
由于javax.email只是其中的一种可选方案,因此,在这里没有直接暴露任何与javax.email相关的接口,这样就更方便针对不同邮件API进行实现。
值得一提的是这里引入了一个新的接口:
EmailMessageFlagMarker:用来在收邮件时对邮件的状态进行不同的标示,这是因为不能简单的把收到到的邮件标示成删除或已读,可能要根据许多种情况进行判断。
邮件收发实例邮件接收
public static void main(String[] args) throws MessageException {
MessageManager<EmailMessageAccount, EmailMessageSender, EmailMessageReceiver, EmailReceiveMessage> messageManager = new MessageManagerDefault();
EmailMessageAccount account = new EmailMessageAccount();
account.setHost("127.0.0.1");
account.setUsername("luoguo@tinygroup.org");
account.setPassword("123456");
messageManager.setMessageAccount(account);
EmailMessageReceiveService messageReceiveService = new EmailMessageReceiveService();
MessageReceiveService receiveService=messageReceiveService;
MessageSendService messageSendService = new EmailMessageSendService();
messageManager.setMessageReceiveService(receiveService);
messageManager.setMessageSendService(messageSendService);
messageReceiveService.setEmailMessageFlagMarker(new RemoveAllEmailMessageFlagMarker());
Collection<EmailReceiveMessage> messages = messageManager.getMessages();
for (EmailReceiveMessage message : messages) {
System.out.println("subject:" + message.getMessage().getSubject());
System.out.println("content:" + message.getMessage().getContent());
System.out.println("附件:" + message.getMessage().getAccessories().size());
System.out.println("=============================================");
}
}
复制代码
邮件发送示例
public static void main(String[] args) throws IOException, MessageException {
MessageManager<EmailMessageAccount, EmailMessageSender, EmailMessageReceiver, EmailMessage> messageManager = new MessageManagerDefault();
EmailMessageAccount account = new EmailMessageAccount();
account.setHost("127.0.0.1");
account.setUsername("luoguo@tinygroup.org");
account.setPassword("123456");
EmailMessageSendService sendService = new EmailMessageSendService();
EmailMessageSender messageSender = new EmailMessageSender();
messageSender.setDisplayName("罗果");
messageSender.setEmail("luoguo@tinygroup.org");
EmailMessageReceiver messageReceiver = new EmailMessageReceiver();
messageReceiver.setDisplayName("罗果");
messageReceiver.setEmail("luog@tinygroup.org");
EmailMessage emailMessage = new EmailMessage();
emailMessage.setSubject("test1111111");
emailMessage.setContent("中华人民共和国");
EmailAccessory accessory = new EmailAccessory(new File("D:/RUNNING.txt"));
emailMessage.getAccessories().add(accessory);
messageManager.setMessageAccount(account);
MessageReceiveService messageReceiveService = new EmailMessageReceiveService();
MessageSendService messageSendService = new EmailMessageSendService();
messageManager.setMessageReceiveService(messageReceiveService);
messageManager.setMessageSendService(messageSendService);
Collection<EmailMessageReceiver> receivers = new ArrayList<EmailMessageReceiver>();
receivers.add(messageReceiver);
messageManager.sendMessage(messageSender, receivers, emailMessage);
}
复制代码
上面看起来比较复杂,实际是都是在构建Bean,如果是把Bean配在IOC容器中,就会非常简单了。
总结
通过对各种信息的接收与发送进行分析,对信息处理进行了上层抽象,并简单的进行实现就可以实现各种信息的收发处理。
由于对各种信息处理都采用了统一的接口,在需要进行各种信息都要进行接收或发送的时候,开发人员就会非常方便。
所有的源码都可以在:http://git.oschina.net/tinyframework/tiny/tree/master/framework/org.tinygroup.message找到,感兴趣的童鞋可以前去查阅。
我们在业务处理过程中,经常要处理各种信息,比如:站内信息、邮件信息、还可能有短信、彩信,甚至可能与各种IM软件进行对立的信息系统。
Tiny框架也需要面对这个问题,不一样的是我觉得这几种类型的信息处理模式都是一样的,因此试图采用统一的模式进行处理。
在开始之前,我们先梳理一下需求:
可以支持各种信息系统如:短信,彩信,邮件,IM,站内信息的接收与发送
在接收或发送消息的时候可以进行各种逻辑处理,比如:收到某种类型的邮件怎么处理,收到某种内容的短信怎么处理。
邮件收到的时候,可以不删除,可以删除,也可以改成已读等各种状态
发送邮件的时候,可以附加各种附件,比如:来自文件的,来自内存的等等
概念抽象
因此,我们就抽象了下面的几个概念:
085916_Vhc7_1245989.jpg (13.4 KB, 下载次数: 0)
下载附件
2015-5-27 21:20 上传
MessageAccount:接收信息或发送信息时,需要帐户,因此抽象一个信息帐户概念。
MessageReceiver:信息接收者
MessageSender:信息发送者
Message:要发送的信息,对应于邮件,短信,彩信之类
MessageReceiveService:用于提供信息发送服务
MessageSendService:用于提供信息接收服务
MessageException:用于在出现问题的时候,抛出异常
MessageSendProcessor:用于在发送信息的时候根据信息触发一些操作
MessageReceiveProcessor:用于在接收信息的时候根据信息触发一些操作
MessageManager:用于进行信息接收与发送
行为分析
当然,上面的概念的建立不是为了看看的,是要在我们的信息框架中参与的,当然它们中的一些就有一些行为,下面我们就分析一下这些概念的行为有哪些:
090755_w4fP_1245989.jpg (54.15 KB, 下载次数: 0)
下载附件
2015-5-27 21:20 上传
下面一个一个来分析一下:
MessageAccount:由于不同的信息模式,信息收发的帐号情况,并不一致,因此这里就只放个接口,没有办法进一步约束。同样的,MessageSender,Message,MessageReceiver也一样,因此,它们就是个空接口,把问题交给其后代来处理。
MessageReceiveServer:用于接收信息,只有一个方法,返回信息。
MessageSendService:用于发送信息,只有一个方法。
MessageSendProcessor:用于在发送信息的时候根据信息情况触发一些操作,一个方法用于判断是否命中,一个进行真正的处理。
MessageReceiveProcessor:用于在接收信息的时候根据信息情况触发一些操作,一个方法用于判断是否命中,一个进行真正的处理。
MessageManager:它其实是对MessageReceiveService和MessageSendService的进一步封装,在这里提供了事件触发的一些扩展。
在底层,只有MessageManager是有实现类的,即MessageManagerDefault,这也正常,由于其它的都不确定,所以就没法实现了。
到时为此,信息处理的底层抽象与设计就算完成了。
实现案例-Email收发
093736_NRBE_1245989.jpg (59.22 KB, 下载次数: 0)
下载附件
2015-5-27 21:20 上传
到了收发邮件,因为已经是具体问题,因此上次留给子孙解决的问题,都可以解决了。
由于javax.email只是其中的一种可选方案,因此,在这里没有直接暴露任何与javax.email相关的接口,这样就更方便针对不同邮件API进行实现。
值得一提的是这里引入了一个新的接口:
EmailMessageFlagMarker:用来在收邮件时对邮件的状态进行不同的标示,这是因为不能简单的把收到到的邮件标示成删除或已读,可能要根据许多种情况进行判断。
邮件收发实例邮件接收
public static void main(String[] args) throws MessageException {
MessageManager<EmailMessageAccount, EmailMessageSender, EmailMessageReceiver, EmailReceiveMessage> messageManager = new MessageManagerDefault();
EmailMessageAccount account = new EmailMessageAccount();
account.setHost("127.0.0.1");
account.setUsername("luoguo@tinygroup.org");
account.setPassword("123456");
messageManager.setMessageAccount(account);
EmailMessageReceiveService messageReceiveService = new EmailMessageReceiveService();
MessageReceiveService receiveService=messageReceiveService;
MessageSendService messageSendService = new EmailMessageSendService();
messageManager.setMessageReceiveService(receiveService);
messageManager.setMessageSendService(messageSendService);
messageReceiveService.setEmailMessageFlagMarker(new RemoveAllEmailMessageFlagMarker());
Collection<EmailReceiveMessage> messages = messageManager.getMessages();
for (EmailReceiveMessage message : messages) {
System.out.println("subject:" + message.getMessage().getSubject());
System.out.println("content:" + message.getMessage().getContent());
System.out.println("附件:" + message.getMessage().getAccessories().size());
System.out.println("=============================================");
}
}
复制代码
邮件发送示例
public static void main(String[] args) throws IOException, MessageException {
MessageManager<EmailMessageAccount, EmailMessageSender, EmailMessageReceiver, EmailMessage> messageManager = new MessageManagerDefault();
EmailMessageAccount account = new EmailMessageAccount();
account.setHost("127.0.0.1");
account.setUsername("luoguo@tinygroup.org");
account.setPassword("123456");
EmailMessageSendService sendService = new EmailMessageSendService();
EmailMessageSender messageSender = new EmailMessageSender();
messageSender.setDisplayName("罗果");
messageSender.setEmail("luoguo@tinygroup.org");
EmailMessageReceiver messageReceiver = new EmailMessageReceiver();
messageReceiver.setDisplayName("罗果");
messageReceiver.setEmail("luog@tinygroup.org");
EmailMessage emailMessage = new EmailMessage();
emailMessage.setSubject("test1111111");
emailMessage.setContent("中华人民共和国");
EmailAccessory accessory = new EmailAccessory(new File("D:/RUNNING.txt"));
emailMessage.getAccessories().add(accessory);
messageManager.setMessageAccount(account);
MessageReceiveService messageReceiveService = new EmailMessageReceiveService();
MessageSendService messageSendService = new EmailMessageSendService();
messageManager.setMessageReceiveService(messageReceiveService);
messageManager.setMessageSendService(messageSendService);
Collection<EmailMessageReceiver> receivers = new ArrayList<EmailMessageReceiver>();
receivers.add(messageReceiver);
messageManager.sendMessage(messageSender, receivers, emailMessage);
}
复制代码
上面看起来比较复杂,实际是都是在构建Bean,如果是把Bean配在IOC容器中,就会非常简单了。
总结
通过对各种信息的接收与发送进行分析,对信息处理进行了上层抽象,并简单的进行实现就可以实现各种信息的收发处理。
由于对各种信息处理都采用了统一的接口,在需要进行各种信息都要进行接收或发送的时候,开发人员就会非常方便。
所有的源码都可以在:http://git.oschina.net/tinyframework/tiny/tree/master/framework/org.tinygroup.message找到,感兴趣的童鞋可以前去查阅。
相关文章推荐
- XmlParser和HtmlParser
- 线程组
- 流程自动化布局
- Word文档生成
- 如何快速开发网站?
- 如何让Web.xml变得简洁?
- 关于中文处理方面的研究
- Hello,World 百态
- UI开发的终极解决方案
- 构建网络爬虫?so easy
- MDA数据校验规则定义
- web开发如何配置多环境
- git支持中文
- asp.net get App_Data 目录几种方法 path
- Visual Studio C# 修改后的程序发布
- 网络通信中关于请求数据、断点续传和写入本地文件
- Tiny实例:TINY框架官网制作过程详解
- 与2015苹果秋季新品发布会同步,传智播客iOS课程全面升级
- 学习网站
- 基于业务单元的开发与部署模式