新增TinyMessage,并实现邮件接收处理

序言

我们在业务处理过程中,经常要处理各种信息,比如:站内信息、邮件信息、还可能有短信、彩信,甚至可能与各种IM软件进行对立的信息系统。

Tiny框架也需要面对这个问题,不一样的是我觉得这几种类型的信息处理模式都是一样的,因此试图采用统一的模式进行处理。

在开始之前,我们先梳理一下需求:

  1. 可以支持各种信息系统如:短信,彩信,邮件,IM,站内信息的接收与发送
  2. 在接收或发送消息的时候可以进行各种逻辑处理,比如:收到某种类型的邮件怎么处理,收到某种内容的短信怎么处理。
  3. 邮件收到的时候,可以不删除,可以删除,也可以改成已读等各种状态
  4. 发送邮件的时候,可以附加各种附件,比如:来自文件的,来自内存的等等

概念抽象

因此,我们就抽象了下面的几个概念:

  • MessageAccount:接收信息或发送信息时,需要帐户,因此抽象一个信息帐户概念。
  • MessageReceiver:信息接收者
  • MessageSender:信息发送者
  • Message:要发送的信息,对应于邮件,短信,彩信之类
  • MessageReceiveService:用于提供信息发送服务
  • MessageSendService:用于提供信息接收服务
  • MessageException:用于在出现问题的时候,抛出异常
  • MessageSendProcessor:用于在发送信息的时候根据信息触发一些操作
  • MessageReceiveProcessor:用于在接收信息的时候根据信息触发一些操作
  • MessageManager:用于进行信息接收与发送

行为分析

当然,上面的概念的建立不是为了看看的,是要在我们的信息框架中参与的,当然它们中的一些就有一些行为,下面我们就分析一下这些概念的行为有哪些:

下面一个一个来分析一下:

  • MessageAccount:由于不同的信息模式,信息收发的帐号情况,并不一致,因此这里就只放个接口,没有办法进一步约束。同样的,MessageSender,Message,MessageReceiver也一样,因此,它们就是个空接口,把问题交给其后代来处理。
  • MessageReceiveServer:用于接收信息,只有一个方法,返回信息。
  • MessageSendService:用于发送信息,只有一个方法。
  • MessageSendProcessor:用于在发送信息的时候根据信息情况触发一些操作,一个方法用于判断是否命中,一个进行真正的处理。
  • MessageReceiveProcessor:用于在接收信息的时候根据信息情况触发一些操作,一个方法用于判断是否命中,一个进行真正的处理。
  • MessageManager:它其实是对MessageReceiveService和MessageSendService的进一步封装,在这里提供了事件触发的一些扩展。

在底层,只有MessageManager是有实现类的,即MessageManagerDefault,这也正常,由于其它的都不确定,所以就没法实现了。

到时为此,信息处理的底层抽象与设计就算完成了。

实现案例-Email收发

到了收发邮件,因为已经是具体问题,因此上次留给子孙解决的问题,都可以解决了。

由于javax.email只是其中的一种可选方案,因此,在这里没有直接暴露任何与javax.email相关的接口,这样就更方便针对不同邮件API进行实现。

值得一提的是这里引入了一个新的接口:

EmailMessageFlagMarker:用来在收邮件时对邮件的状态进行不同的标示,这是因为不能简单的把收到到的邮件标示成删除或已读,可能要根据许多种情况进行判断。

邮件收发实例

邮件接收

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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("=============================================");

    }

}

邮件发送示例

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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找到,感兴趣的童鞋可以前去查阅。

时间: 2024-10-28 00:18:22

新增TinyMessage,并实现邮件接收处理的相关文章

pop3-POP3邮件接收怎么读取想要的信件信体部分

问题描述 POP3邮件接收怎么读取想要的信件信体部分 下面是读取信件信体的一段代码,有些不太明白void CMailMessage::DecodeBody(){CString sCooked = """";LPTSTR szBad = ""rn..rn"";LPTSTR szGood = ""rn.rn"";int nPos;int nBadLength = strlen( szBad

运用C#实现POP3邮件接收程序

程序 微软的VS.Net开发工具推出已有一段时日了,其中的那门新语言C#也日渐为大家所熟悉并接受.C#作为一门新兴的语言相信具有传统语言不可比拟的优越性,特别是在网络应用方面,开发者更是感觉到了C#的强大功能.所以本文就通过运用C#来实现一个基于POP3协议的邮件接收程序来向大家展示C#网络编程的功能强大,同时也向大家介绍一下基于POP3协议的电子邮件接收原理. 首先我向大家介绍邮件接收的基本原理: 一开始便是客户端与服务器的连接.不过,在客户端连接到服务器之前,注意把端口设为POP3协议默认的

web方式实现经过身份验证的对postfix邮件接收发送的管理

本篇笔者将介绍使用web方式实现对postfix邮件接收发送的管理,且需要经过身份验证 一:修改主机名: [root@lyt ~]# vim /etc/sysconfig/network [root@lyt ~]# vim /etc/hosts [root@lyt ~]# service sendmail stop [root@lyt ~]# chkconfig sendmail off       #关闭sendmail [root@lyt ~]# init 6     #重启计算机 二:搭建

用Javamail写的邮件接收程序

前段时间一直忙于学校里面的事情,没有时间静下心来写接收邮件的程序,现在学校里的事情终于忙完了,可以静下心里做自己喜欢做的事情了,这种感觉真的很好! 对我自己而言,刚开始在用JavaMail来编写收邮件的程序时最重要和最难的要数解析附件和邮件正文的部分,因为Mime类型实在是太多了!下面的这段代码是我自己学习JavaMail的一段体会,供大家来参考(请高手指教,有什么更好的办法,请回复此文章),具体代码如下: package coffeecatwebmail; import java.io.*;

JavaMail:简单的邮件接收程序

实现了 JavaMail 中邮件内容的创建.邮件的发送,现在就看看怎样接收邮件了. 邮件的接收与邮件的发送的基本操作步骤很类似,邮件的发送需要用到 Transport 类,邮件的接收则需要使用 Store 类,而不管是发送还是接收, Session 类和 Properties 类都是必需的.使用 Properties 对象设置连接 SMTP 服务器. POP3 服务器的主机名.协议等,通过 Properties 对象获取应用于整个邮件程序所必须的 Session 对象,它保存了建立网络连接的会话

一段邮件接收程序代码

问题描述 大家好,我的这段代码是用c#实现的基于POP3协议的邮件接收程序的网络编程.现在其中的一个功能是完成"把邮件服务器设置成pop.sina.com,在输入用户名和密码后,单击连接按钮来与服务器进行连接"但是当我单击了之后,却没有反映,这是怎么回事啊,大家帮我看看这段代码,看看问题出在哪里? privatevoidConnect_Click(objectsender,EventArgse){//将光标置为等待状态Cursorcr=Cursor.Current;Cursor.Current=

深入Lumisoft.NET组件POP3邮件接收与删除操作的使用详解_实用技巧

Lumisoft.NET组件是一个非常强大的邮件发送.邮件接收等功能的开源组件,一般用它来处理邮件的相关操作,是非常合适的.之前也写过一些该组件的随笔文章,不过主要是利用来发送邮件居多,最近由于项目需要,需要利用该组件来接收邮件,邮件通过POP3协议进行接收到本地,故对该组件进行了全面的了解和使用.本文主要是在此背景上,介绍该组件的POP3协议处理类的使用.Lumisoft.NET组件2013年作者有做了一定的更新,修复了一些问题,本文是基于该组件的最新版本进行开发使用. 1.POP3登录及头部

java Mail邮件接收工具类_java

下面是一个邮件接收的工具类,有点长!!! public class ReciveMail { private MimeMessage msg = null; private String saveAttchPath = ""; private StringBuffer bodytext = new StringBuffer(); private String dateformate = "yy-MM-dd HH:mm"; public ReciveMail(Mime

基于Lumisoft.NET组件的POP3邮件接收和删除操作

Lumisoft.NET组件是一个非常强大的邮件发送.邮件接收等功能的开源组件,一般用它来处理邮件的相关操作,是非常合适的.之前也写过一些该组件的随笔文章,不过主要是利用来发送邮件居多,最近由于项目需要,需要利用该组件来接收邮件,邮件通过POP3协议进行接收到本地,故对该组件进行了全面的了解和使用.本文主要是在此背景上,介绍该组件的POP3协议处理类的使用.Lumisoft.NET组件2013年作者有做了一定的更新,修复了一些问题,本文是基于该组件的最新版本进行开发使用. 1.POP3登录及头部