邮件收发

简介

采用IOC技术,实现了支持多个邮件客户端,包括OpenPOP/OpenSMTP,JMail,JMail.NET,IBM Lotus Notes等,并可以自由扩展新的邮件收发组件。

 

该邮件收发系统来自WCFMail邮件通信系统解决方案。

 

 

控件提取人:邓太华 提取时间:2010-3-10

组件的版本:Ver 1.1

项目使用实例

WCFMail邮件通信系统使用它来完成POP邮局和NOTES邮件之间的通信。详细内容请看

http://www.hisun139.com/home.php?mod=space&uid=102&do=blog&id=259

 

下面是NBF解决方案中MailClient的运行界面:

 

 

使用方法

使用准备:

1,  准备一个IOC配置文件,指明当前使用哪种邮件收发组件,文件内容如下:

(假定该配置文件名称为 IOCConfig.xml

<?xml version="1.0" encoding="utf-8" ?>

<IOCConfig>

<!--

IOC 依赖注入容器配置

ver 1.0 dth,2010.06.11

 -->

<GroupConfig>

   <Group ID="1" ParentID="0" Name="MB" >MB分组描述</Group>

   <Group ID="2" ParentID="0" Name="FT" >FT分组描述</Group>

   <Group ID="3" ParentID="0" Name="PLZD" >PLZD分组描述</Group>

  

</GroupConfig>

<SystemInterface>

   <Add Name="用户接口" Interface="IBMP.BusinessBusInterface.IUser" Assembly="IBMPBBI"/>

   <Add Name="业务接口" Interface="IBMP.BusinessBusInterface.IBusiness" Assembly="IBMPBBI"/>

   <Add Name="邮件通信接口" Interface="Hisuntech.SystemFramework.Net.Mail.Emails" Assembly="BaseMailUtil"/>

  

</SystemInterface>

<GroupSet>

     <IOC Name="WCFMail">

     <Add Key="OpenMail" InterfaceName="邮件通信接口" FullClassName="Hisuntech.SystemFramework.Net.Mail.OpenMails" Assembly="OpenMailUtil" />

     <!--<Add Key="NotesMail" InterfaceName="邮件通信接口" FullClassName="Hisuntech.SystemFramework.Net.Mail.LotusNotes" Assembly="LotusNotesUtil" />-->

     <!--<Add Key="XMail" InterfaceName="邮件通信接口" FullClassName="XMailUtil.XMails" Assembly="XMailUtil" />-->

   </IOC>

   <IOC Name="AOP">

     <Add Key="AOPTestLib.IBizObject" InterfaceName="AOP测试接口" FullClassName="TEMP_DYNAMIC_ASSEMBLY__ProxyIBizObjectBizObject" Assembly="TEMP_DYNAMIC_ASSEMBLY__ProxyIBizObjectBizObject" />

   </IOC>

</GroupSet>

</IOCConfig>

 

2,在应用程序配置文件中,增加下面的配置项:

<add key="IOCConfigFile" value=".\IOCConfig.xml"/>

   <!--发邮件邮箱配置-->

   <add key="SMTP_MailServer" value="smtp.hisuntech.com"/>

   <add key="SMTP_ServerUsername" value="deng_th@hisuntech.com"/>

   <add key="SMTP_ServerPassword" value="XXXXXX"/>

   <add key="SMTP_MailPort" value="25"/>

   <add key="SMTP_MailTo" value="deng_th@hisuntech.com"/>

   <!--Notes 配置 begin-->

   <!--<add key="POP3_MailServer" value="cs/9fbank"/>

   <add key="POP3_ServerUsername" value="mail\test2.nsf"/>

   <add key="POP3_ServerPassword" value="YYYYY"/>-->

   <!--Notes 配置 begin-->

 

   <!--收邮件邮箱配置-->

   <add key="POP3_MailServer" value="pop.hisuntech.com"/>

   <add key="POP3_ServerUsername" value="deng_th@hisuntech.com"/>

   <add key="POP3_ServerPassword" value="XXXXX"/>

   <add key="POP3_MailPort" value="110"/>

   <!--是否加密邮件账号-->

   <add key ="Security" value ="False"/>

 

 

代码使用示例:

发邮件:

MailServerInfo server = MailConfig.GetConfig(MailServerType.SMTP);

               //从IOC中获取具体的邮件组件实例

Emails curMail = IBMP.IOC.Unity.Instance.GetInstance<Emails>();

               curMail.SMTP_Server = server;

 

               MailMessageInfo msgInfo = new MailMessageInfo();

               msgInfo.MailFrom = server.ServerUsername;

               msgInfo.MailTo = this.txtMailTo.Text;

               msgInfo.MsgSubject = this.txtMailSubject.Text;

               msgInfo.MsgContent = this.txtMailContent.Text;

               //msgInfo.AddAttachment(fileName);

 

               bool result = curMail.Send(msgInfo);

               if (result)

                   MessageBox.Show("发送成功!");

               else

                   MessageBox.Show("发送邮件失败:" + curMail.ErrorMessage);

 

收邮件:

bindGridData = false;

           this.lblReceivMsg.Text = "正在连接邮件服务器...";

           Application.DoEvents();

 

           MailServerInfo server = MailConfig.GetConfig(MailServerType.POP3);

           Emails curMail = IBMP.IOC.Unity.Instance.GetInstance<Emails>();

//从IOC中获取具体的邮件组件实例

           curMail.POP3_Server = server;

           curMail.ReceivingHandler += new EventHandler<WcfMail.SystemMessageEventArgs>(curMail_ReceivingHandler);

           curMail.ReceivedHandler += new EventHandler<WcfMail.SystemMessageEventArgs>(curMail_ReceivedHandler);

           if (curMail.Receive(new WcfMail.SystemMessage()))

           {

//获取邮件队列

               List<MailMessageInfo> msgList = curMail.MessageQueue.ConvertAll<MailMessageInfo>(

                   new Converter<WcfMail.Interface.ISysMsg, MailMessageInfo>

                       (p => (MailMessageInfo)p)

                       );

               this.grvMailList.AutoGenerateColumns = false;

               this.grvMailList.DataSource = msgList;

               bindGridData = true;

            

          }

           else

           {

               MessageBox.Show(curMail.ErrorMessage);

           }

 

 

 

注意事项

l  如果只是简单的发送邮件,可以考虑直接使用OpenSMTP中的相关对象;

l  如果要让你的邮件收发程序支持多种邮件组件,请使用本文中说明的方法;

l  开发新的邮件收发组件,需要继承Hisuntech.SystemFramework.Net.Mail.Emails 抽象类。

l  如果只是模拟邮件处理过程,而不需要真正的对外收发邮件,可以使用XMail组件,它利用文件系统来实现。

l  如果想保护邮件账号,可以使用WCFMail解决方案的SystemConfig.exe 配置程序。

 

源码说明

请参看NBF解决方案 Mail文件夹:

 

在使用源码前,请在TFS上获取NBF目录完整的源码(不要仅通过解决方案获取)。

参考资源

WCF邮件通信系统

http://www.hisun139.com/home.php?mod=space&uid=102&do=blog&classid=21&view=me

 

TFS:WCFMail解决方案

Last edited Mar 24, 2011 at 2:59 AM by drjan, version 1

Comments

No comments yet.