严重申明:本方案中的两个工程由Dimac.JMail逆向生成,版权归Dimac公司所。任何单位或个人不得将工程里的任何代码用于商业用途。本工程只做讨论及学习使用。对于其它行为的,对当事人自己负全部的责任。对于下载本测试代码的任何人,都视为同意此申明里的所有内容。

不知道MS对此会有怎样的说明。对于一个生成DLL的文件,可以用工具轻松的逆向转化为工程文件,而且可以通过编译而后编译成与源DLL字节大小完全一样的文件来,而且可以正常使用。

对于一些大一点的DLL文件,可能逆向出来的文件很多,所以编译一时不能通过,但经过细心的修改后,也还是可以的。测试过三个项目,一个是MS自己的Web Controls,第二个是MS的WebService文件,而另一个是Dimac的JMail。前面两个有些复杂,短时间内无法修改让其通过编译,而对于Dimac.JMail,经过小的改动,可以通过编译,且正常工作。

索性加上自己以前写的Mail管理类,然后一起做一个小测试项目。
部份代码:
IMail接口:

using System;

namespace Webb.WAVE.Controls
{
    /**//// <summary>
    /// Summary description for Webb.
    /// </summary>
    public interface IEMail:IDisposable
    {
        string ServerName{get;set;}
        string ServerLoginName{get;set;}
        string ServerLoginPassword{set;}
        string Subject{set;get;}
        string Body{set;get;}
        string HTMLBody{set;get;}
        string From{set;get;}        
        //
        void AddToAddress(string i_address);
        void AddCcAddress(string i_address);
        void SendEMail();
    }
}

JMailDotNet类:

using System;
using Dimac.JMail;
using System.Data;

namespace Webb.WAVE.Controls
{
    /**//// <summary>
    /// 
    /// </summary>
    public class JMailDotNet:IEMail
    {
        Fields#region Fields
        private string m_server;
        private string m_loginName;
        private string m_password;
        private string m_from;
        private Message m_message;
        #endregion

        Properties#region Properties
//        public Message MailMessage
//        {
//            get{return this.m_message;}
//            set{this.m_message    = value;}
//        }
        #endregion

        public JMailDotNet()
        {
            m_message    = new Message();
        }

        public JMailDotNet(bool i_systemServer)
        {
            m_message    = new Message();
//            this.m_password        = WaveSystem.SystemVarible["EmailServerPassword"].ToString();
//            this.m_loginName    = WaveSystem.SystemVarible["EmailServerLoginName"].ToString();
//            this.m_server        = WaveSystem.SystemVarible["EmailServer"].ToString();
        }

        IEMail Members#region IEMail Members
        public string ServerName
        {
            get{return this.m_server;}
            set{this.m_server    = value;}
        }
        public string ServerLoginName
        {
            get{return this.m_loginName;}
            set{this.m_loginName = value;}
        }
        public string ServerLoginPassword
        {
            set{this.m_password    = value;}
        }
        public string Subject
        {
            get{return this.m_message.Subject;}
            set{this.m_message.Subject = value;}
        }
        public string Body
        {
            get{return this.m_message.BodyText;}
            set{this.m_message.BodyText = value;}
        }
        public string HTMLBody
        {
            get{return this.m_message.BodyHtml;}
            set{this.m_message.BodyHtml = value;}
        }
        public string From
        {
            get{return this.m_from;}
            set{this.m_from = value;}
        }
        public void AddToAddress(string i_address)
        {
            this.m_message.To.Add(new Address(i_address));
        }
        public void AddCcAddress(string i_address)
        {
            this.m_message.Cc.Add(new Address(i_address));
        }
        public void SendEMail()
        {
            Smtp m_SMTPServer        = new Smtp();
            m_SMTPServer.Domain        = this.m_server;
            m_SMTPServer.Password    = this.m_password;
            m_SMTPServer.UserName    = this.m_loginName;
            m_SMTPServer.HostName    = this.m_server;
            this.m_message.From        = new Address(this.m_from);
            m_SMTPServer.Authentication    =SmtpAuthentication.Login;
            try
            {
                m_SMTPServer.Send(this.m_message);
            }
                /**//*                
                catch(SmtpAuthNotSupportedException  ex)
                {
                    //WaveTrace.TraceMsg(ex.Message);
                    //throw new Exception("EMail sent error, all message send faild.");
                }
                catch(LoginFailedException  ex)
                {
                    //WaveTrace.TraceMsg(ex.Message);
                    //throw new Exception("EMail sent error, all message send faild.");
                }
                catch(SmtpException  ex)
                {
                    //WaveTrace.TraceMsg(ex.Message);
                    //throw new Exception("EMail sent error, all message send faild.");
                }
                catch(ConnectionException  ex)
                {
                    //WaveTrace.TraceMsg(ex.Message);
                    //throw new Exception("EMail sent error, all message send faild.");
                }
                catch(ArgumentNullException  ex)
                {
                    //WaveTrace.TraceMsg(ex.Message);
                    //throw new Exception("EMail sent error, all message send faild.");
                }
                */
            catch(JMailException)
            {
//                WaveHelper.TraceMsg(ex.Message);
                throw new Exception("EMail sent error, all message send faild.");
            }
            finally
            {
                m_SMTPServer        = null;
            }
        }

        #endregion

        IDisposable Members#region IDisposable Members

        public void Dispose()
        {
            this.m_message        = null;
        }

        #endregion
    }
}

邮件管理类:其中注释掉了在其它项目里使用的函数,但这些函数也可以做为学习的例子。

using System;
using System.Data;
using Dimac.JMail;

namespace Webb.WAVE.Controls
{
    /**//// <summary>
    /// Summary description for Webb.
    /// </summary>
    public enum MailType
    {
        JMailCom        = 0,
        JMailDotNet        = 1,
        EMailMessage    = 2,
        Default            = 3
    }

    public class WaveEMailManager:IDisposable
    {        

        Fields#region Fields
        private IEMail m_email;
        private MailType m_mailType;
//        private WaveEMail m_dbmail;
        #endregion

        Properties#region Properties
        public IEMail EMail
        {
            get{return this.m_email;}
        }
        public MailType EMailType
        {
            get{return this.m_mailType;}
        }
        #endregion

        /**//// <summary>
        /// 
        /// </summary>
        public WaveEMailManager()
        {
        }

        /**//// <summary>
        /// 
        /// </summary>
        /// <param name="i_MailType"></param>
        public WaveEMailManager(MailType i_MailType)
        {
            this.m_mailType    = i_MailType;
            if(i_MailType==MailType.JMailCom)
            {
                this.m_email    = new JMailCOM(true) as IEMail;
            }
            else if(i_MailType==MailType.JMailDotNet)
            {
                this.m_email    = new JMailDotNet(true) as IEMail;
            }
            else if(i_MailType==MailType.EMailMessage)
            {
                this.m_email    = new EMailMessage(true) as IEMail;
            }
            else if(i_MailType==MailType.Default)
            {
                string m_control    = "msg";//WaveSystem.SystemVarible["EmailControl"].ToString();
                switch(m_control)
                {
                    case "com":
                        this.m_email    = new JMailCOM(true) as IEMail;
                        this.m_mailType    = MailType.JMailCom;
                        break;
                    case "net":
                        this.m_email    = new JMailDotNet(true) as IEMail;
                        this.m_mailType    = MailType.JMailDotNet;
                        break;
                    case "msg":
                        this.m_email    = new EMailMessage(true) as IEMail;
                        this.m_mailType    = MailType.EMailMessage;
                        break;
                    default:
                        this.m_email    = new EMailMessage(true) as IEMail;
                        this.m_mailType    = MailType.EMailMessage;
                        break;
                }
            }
        }

        /**//// <summary>
        /// 
        /// </summary>
        /// <param name="i_mailID"></param>
        public void SendDbEmailByID(long i_mailID)
        {
//            if(this.m_dbmail==null){this.m_dbmail    = new WaveEMail();}
//            m_dbmail.LoadData(i_mailID);
//            this.m_email.HTMLBody    = this.m_dbmail.HTMLBody;
//            this.m_email.AddToAddress(this.m_dbmail.To);
//            this.m_email.Subject    = this.m_dbmail.Subject;
//            try{this.m_email.SendEMail();}
//            catch(Exception ex){WaveHelper.TraceMsg(ex.Message);throw ex;}
//            m_dbmail.SentTimes++;
//            m_dbmail.UpdateData();
        }

        Static functions#region Static functions
        /**//// <summary>
        /// 
        /// </summary>
        /// <param name="i_mailID"></param>
        static public void DeleteEMail(long i_mailID)
        {
//            this.m_dbManager            = new OleDBManager(true) as IOleDBManager;
//            this.m_dbManager.Command    = new System.Data.OleDb.OleDbCommand();
//            ISqlDBManager m_dbManager    = new SqlDBManager(true) as ISqlDBManager;
//            m_dbManager.Command            = new System.Data.SqlClient.SqlCommand();
//            m_dbManager.Command.CommandText    = SQLCommandText.T_Emails.T_Emails_DeleteByID;
//            m_dbManager.Command.Parameters.Add("@log_id",i_mailID);
//            try{m_dbManager.ExecuteNonQuery();}
//            catch(Exception ex){WaveHelper.TraceMsg(ex.Message);throw ex;}
//            m_dbManager.Dispose();
        }

        /**//// <summary>
        /// 
        /// </summary>
        /// <param name="i_table"></param>
        static public void GetAllEmails(DataTable i_table)
        {
//            this.m_dbManager            = new OleDBManager(true) as IOleDBManager;
//            this.m_dbManager.Command    = new System.Data.OleDb.OleDbCommand();
//            ISqlDBManager m_dbManager    = new SqlDBManager(true) as ISqlDBManager;
//            m_dbManager.Command            = new System.Data.SqlClient.SqlCommand();
//            m_dbManager.Command.CommandText    = SQLCommandText.T_Emails.T_Emails_SelectAllMails;
//            try{m_dbManager.FillDataTable(i_table);}
//            catch(Exception ex){WaveHelper.TraceMsg(ex.Message);throw ex;}
//            m_dbManager.Dispose();
        }

        /**//// <summary>
        /// 
        /// </summary>
        /// <param name="i_send"></param>
        static public void DeleteAllSendMail(int i_send)
        {
//            this.m_dbManager            = new OleDBManager(true) as IOleDBManager;
//            this.m_dbManager.Command    = new System.Data.OleDb.OleDbCommand();
//            ISqlDBManager m_dbManager    = new SqlDBManager(true) as ISqlDBManager;
//            m_dbManager.Command            = new System.Data.SqlClient.SqlCommand();
//            m_dbManager.Command.CommandText    = SQLCommandText.T_Emails.T_Emails_DeleteBySent;
//            m_dbManager.Command.Parameters.Add("@int_sent",i_send);
//            try{m_dbManager.ExecuteNonQuery();}
//            catch(Exception ex){WaveHelper.TraceMsg(ex.Message);throw ex;}
//            m_dbManager.Dispose();
        }
        #endregion

        IDisposable Members#region IDisposable Members
        public void Dispose()
        {
            if(this.m_email!=null)this.m_email.Dispose();
        }
        #endregion

    }
}

请不要修改邮箱的密码,如果须要,请自行申请邮箱帐号。另外,JMailCOM须要安装JMail的COM组件,工程里引用了这个文件,但对于没有安装该组件的不能正常使用这个类型的邮件服务。

项目源代码下载:[请认阅读申明]
严重申明:本方案中的两个工程由Dimac.JMail逆向生成,版权归Dimac公司所。任何单位或个人不得将工程里的任何代码用于商业用途。本工程只做讨论及学习使用。对于其它行为的,对当事人自己负全部的责任。对于下载本测试代码的任何人,都视为同意此申明里的所有内容。
http://files.cnblogs.com/WuCountry/Webb.JMail.zip

不好意思,刚才搞错了文件,对于已经下载的朋友表示报谦。。。。

转载于:https://www.cnblogs.com/WuCountry/archive/2006/02/17/332355.html

逆向生成的Dimac.JMail工程及测试项目相关推荐

  1. java逆向生成代码有哪些_利用mybatis逆向工程生成代码

    在做项目过程中,当面对很多表时,手动编写Mapper.xml.Mapper.java和pojo无疑是要人命,还容易出错,导致对数据库操作时各种异常.这就陷入了写bug,改bug的旋涡. 针对这一痛点, ...

  2. MyBatis实现级联查询及逆向生成

    MyBatis实现级联查询及逆向生成 一,级联查询 1.级联查询 N-1 ​ 以多的一方为主表 接口 //级联查询 N-1List<Emp> selectEmp(Map map); 映射文 ...

  3. 第4天-搭建项目(快速搭建电商平台后台管理系统及逆向生成微服务基本功能)

    1.快速搭建电商平台后台管理系统 目前在Gitee开源软件中,人人开源 和 若依 关注度比较高,优品电商平台后台系统采用人人开源的框架 来快速构建,完成基本的CRUD,开发更加关注复杂业务.高并发.高 ...

  4. eclipse从数据库逆向生成Hibernate实体类

    2019独角兽企业重金招聘Python工程师标准>>> 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说 ...

  5. IDEA中 30 秒生成 Spring Cloud Alibaba 工程

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 如果你想使用 Spring Cloud Alibaba, ...

  6. Eclipse实现hibernate反向工程:从数据库逆向生成实体类和hbm文件

    转载请注明原文出处:http://blog.csdn.net/baidu_37107022/article/details/75205795 一.hibernate插件安装(已经安装的可以略过) 通过 ...

  7. IDEA 中 30 秒生成 Spring Cloud Alibaba 工程

    作者 | 图恩  阿里云技术专家 如果你想使用 Spring Cloud Alibaba,那么你遇到的第一个问题一定是如何快速的创建一个脚手架工程. 近日,阿里巴巴发布了 Spring 的国内脚手架定 ...

  8. mybatis-generator 逆向生成工具(实体、dao、sql)

    介绍: mybatis-generator 是一个逆向生成工具,用于将数据库表逆向生成实体对象(entity),持久层Dao接口以及用于操作数据库的sql语句xml文件.对于简单的单表操作,增删改查几 ...

  9. [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)

    前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建 ...

最新文章

  1. SetGet and MACRO
  2. 拿到国际AI比赛冠军的,居然是个搞教育的
  3. php parsekit,php 5.5 parsekit 扩展问题
  4. unity 创建图片ui_在 Unity中 将游戏数据储存至本地文档
  5. Solution : Cannot add new node – Rule SQL Server Database Services feature state failed.
  6. python2和python3的主要区别
  7. 4岁小女孩给Linux内核贡献提交
  8. 计算机专业410分能上哪些大学,2021年高考410分能报什么学校
  9. oracle是delete可以加并行吗,提高Oracle DELETE性能的策略
  10. linux 函数自动补全,Shell脚本中实现自动补全功能
  11. JavaScript 带给学习者的意外和深入认识
  12. 老翟书摘:《丰田生产方式》
  13. 路由器连接校园网(多个账号,单个账号)
  14. EXCEL中如何撤销工作表保护
  15. MRI_Made_Easy 磁共振成像原理-物理基础5
  16. Nifi操作Redis
  17. [bugbank]看Fuzz与漏洞擦出火花
  18. 山西民生云 执行认证校验出错_山西民生云app最新版下载,山西民生云大同app认证官网最新版本下载 v2.2 - 浏览器家园...
  19. 算术运算符——加号的多种和自增自减
  20. 【Java】基础09

热门文章

  1. mysql外键读锁_MySQL的锁
  2. java组合语法_JAVA复用类之组合语法的使用(附源码)
  3. oracle mysql 安全性_oracle mysql语句
  4. 嵌入式开发有年龄限制吗_报名深圳成考有年龄限制吗?
  5. STN可以增强CNN网络
  6. java 滚动显示信息_滚动显示文本的Java程序
  7. cad坐标归零lisp_「软件技巧」厉害了!输入简单命令轻松解决CAD几类常见问题...
  8. 两个网口芯片接一个变压器_一看就会:详细讲解网络变压器作用
  9. mysql 一行取最大值_mysql 分组取最大值的同时获取包含最大值的行的其他字段
  10. tomcat给android发图片,一步一步学会http获取tomcat服务端的图片,在android客户端显示...