免费预览已结束,剩余55页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业论文 (科研训练、毕业设计)题 目: 基于Umail的营销系统的设计与实现姓名:学院:软件学院系:软件工程专业:软件工程 年级: 学号: 指导教师(校内): 职称: 指导教师(校外): 职称: 年 月基于Umail的营销系统的设计与实现摘要基于Umail的营销系统是以Visual Studio为开发平台,应用Winform技术开发的用来实施邮件营销管理的应用程序。其开发主要包括数据库的建立和维护、软件系统界面的设计、数据报表的设计。Umail是一个客户端软件,所以在数据库方面选择了轻型、可嵌入并且不需要安装的Sqlite作为数据库引擎。在整个项目开发期间完成了系统的总体设计、功能模块划分、数据库的设计和搭建、系统模块的搭建和开发,本文所描述的软件系统可以实现基本的邮件发送功能并提供详细的报表信息。第1章对电子邮件进行了介绍,描述了系统所应用的技术以及对Umail群发系统的简单的介绍。第2章对系统的总体设计进行描述,主要包括系统的应用需求Sqlite数据库的建立。第3章进行了详细的系统设计,包括主界面和子界面的设计;实现了数据库数据的获取,数据的添加、删除和修改;报表的生成;邮件的发送;数据的导入导出。第4章对系统的运行结果进行简单描述。关键词:Umail;数据库;Sqlite;邮件;SMTP;Winform;报表IAbstract The Umail mail group sending system is developed on the platform of Visual Studio, its a Winform Application used for managing the mails group sending. The development mainly includes: establishment and maintenance of database, the design of system contact surface and the design of data statement . As a client side software, Umail selects SQLite as the SQL database engine because of the Sqlites self-contained, server less , zero-configuration, transactional. During the entire project development period, it completed the design of the system, the functional module division, designing and building of the database and the building and developing of system module. This article describes a software system which can implement the basic mail transmission and supply the detailed statement information. Chapter one carries on the introduction to the email and this system, and describes the technology of the system itself. Chapter two describes the design of this system, which includes the demand of analysis and the design of Sqlite. Chapter three realizes the detailed design of the system, including the design of main interface and sub interface; the access of database, the operation of database(insert, delete, update); the implement of statement production; the sending of mail; and the importation and exportation of data. Chapter four carries on the simple description to the running result of the system.Key words: Umail; Database; Sqlite; Email; SMTP; Winform; StatementII目录目 录第1章概述11.1电子邮件介绍11.2Sqlite介绍21.3反射技术21.4WeifenLuo.WinFormsUI31.5基于Umail的营销系统4第2章系统的总体设计62.1应用需求分析62.2系统功能模块划分62.3数据库设计8第3章系统的详细设计133.1系统窗体模块组成133.2数据模块设置133.2.1数据源设置133.2.2自定义数据实体143.2.2数据实体的逻辑操作193.3窗体界面实现223.3.1主界面(frmMain)的实现223.3.2群组管理界面(frmList)的实现243.3.3邮件管理界面(frmCampaignList)的实现263.3.4资源管理器界面(frmExplorer)的实现263.3.5属性栏(frmProperties)的实现273.3.6报表信息界面(frmCampaignReport)的实现283.3.7错误日志界面(frmErrLog)的实现303.3.8群组编辑界面(frmGroupEditWizard)的实现303.3.9邮件编辑界面(frmCampaignModify)的实现323.3.10订阅者管理界面(frmListModify)的实现333.3.11外部数据导入界面(frmImportGroupWizard)的实现343.3.12订阅者查找界面(frmMemberSearcher)的实现353.3.13发送模式设置界面(frmSystemSettings)的实现353.3.14About界面(frmAboutBox)的实现373.4邮件的发送37第4章系统运行结果40第5章结束语46致谢47III目录参考文献48附录49Umail数据表SQL脚本49qqMail .NET 代码示例51IVContentsChapter1Introduction11.1 E-Mail11.2 Sqlite21.3 Reflection in .NET21.4 WeifenLuo.WinFormsUI31.5 Umail Campaign Introduction4Chapter2 System Design62.1 Demand Analysis62.2 Functional Module Division62.3 Database Design8Chapter3Systems Detailed Design133.1 Window Module Composition133.2 Data Module Establishment133.2.1Disposition Datasource133.2.2Definition Data Entity143.2.3Data Entity Logical Operation193.3Windows Interface223.3.1 Main Window(frmMain)223.3.2 Manage Group Window(frmList)243.3.3 Manage Campaign Window(frmCampaignList)263.3.4 Explorer Window(frmExplorer)263.3.5 Property Window(frmProperties)273.3.6 Campaign Report Window(frmCampaignReport)283.3.7 Error Log Window(frmErrLog)303.3.8 Edit Group Window(frmGroupEditWizard)303.3.9 Edit Campaign Window(frmCampaignModify)323.3.10 Manage Modifier Window(frmListModify)333.3.11Data Import Window(frmImportGroupWizard)343.3.12Search Modifier Window(frmMemberSearcher)353.3.13Set Send Mode(frmSystemSettings)353.3.14About Window(frmAboutBox)373.4Send Mail(Campaign)37Chapter4 Systems Operation Result40Chapter5 Concluding Remarks46Acknowledgement47References48Appendix49SQL Script of Umail Datatables49Code Example of qqMail.Net51VI第1章概述第1章概述1.1电子邮件介绍1.1.1 电子邮件简介4电子邮件(简称E-mail)又称电子信箱、电子邮政,它是种用电子手段提供信息交换的通信方式。 电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。它承担从邮件进入系统到邮件到达目的地为止的全部处理过程。1.1.2 电子邮件地址的构成4电子邮件地址的格式是“USERSERVER.COM”,由三部分组成。第一部分“USER”代表用户信箱的帐号,对于同一个邮件接收服务器来说,这个帐号必须是唯一的;第二部分“”是分隔符;第三部分“SERVER.COM”是用户信箱的邮件接收服务器域名,用以标志其所在的位置。1.1.3 电子邮件工作原理4邮件并不是从发送者的计算机直接发送到收信者的计算机,而是通过收信者的邮件服务器收到该邮件,将其存放在收件人的电子信箱内。 电子邮件在发送与接收过程中都要遵循SMTP、POP3等协议,这些协议确保了电子邮件在各种不同系统之间的传输。其中,SMTP(Simple Mail Transfer Protocol)负责电子邮件的发送,而POP3则用于接收Internet上的电子邮件。1.1.4SMTP协议SMTP(简单邮件传输协议)是一种提供可靠且有效电子邮件传输的协议。 SMTP 是建模在 FTP 文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。基于Umail的营销系统用来实现对邮件的发送,需要对SMTP协议有一定的了解。1.2Sqlite介绍数据库技术在计算机软件邻域研究中一直是非常重要的主题,产生于60年代,30多年来数据库技术得到了迅速发展,并已形成较为完整的理论体系和一大批实用系统。并且,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,使得数据库技术之时成为最热门技术之一。1.2.1数据库数据库由DBMS(数据库管理系统)处理,DBMS则由开发人员和用户通过应用程序直接或间接地使用。它主要包括四个要素:用户数据、元数据、索引和应用元数据。用户数据:大多数的主流数据管理系统把用户数据表示为关系,通过一个表来保存数据,称为数据表。表的列为数据的属性或域,表的行为所保存的记录。元数据:关于数据的数据,提供基于用户的信息、支持数据库系统对数据的管理和维护。索引:用来快速查找数据。1.2.2Sqlite简介5基于Umail的营销系统是客户端应用程序,需要用到小型的、独立的、不需要安装的数据库引擎。SQLite 是一个实现了完备的(self-contained),可嵌入的(embeddable),零配置(zero-configuration)的SQL数据库引擎的小型的C函数库。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合。1.2.3 Sqlite的管理5在系统开发过程使用firefox的扩展组件SQLite Manager对数据库进行管理。(可到/zh-CN/firefox/addon/5817下载),管理界面如图1.1所示。1.3反射技术6反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。在Umail系统中,使用反射技术实现数据库的存取。图1.1 firefox下的Sqlite管理界面1.4WeifenLuo.WinFormsUIWeifenLuo.WinFormsUI是应用在Winform下的一个控件,可以很方便的实现vs 2005、vs2008的窗口定位、浮动、dock、tab等界面效果。DockPanel和Dock Content是其中比较重要的两个类。DockPanel是从Panel继承出来的,用于提供可浮动的dock的子窗口进行浮动和dock的场所;Dock Content是从form类中继承出来的,用于提供可浮动的窗口基类,Dock Content对象可以在DockPanel对象中任意贴边、浮动、Tab化等。建立一个DockPanel风格的程序的过程是: 1. 建立一个Winform程序, 引用WinFormsUI.dll; 2. 程序主窗口比如说是FrmMain; 把FrmMain.IsMdiContainer 设置为true; 3. 在FrmMain中放一个DockPanel, 比如说名称是Panel1, 把Panel1.Dock设为Fill, 或者是你规划的地方;4. 新建你的子文档窗口类, 就是新建一个windows FORM, 在窗口设计器里面添上需要的控件,这将是你的程序里的子窗口;5. 打开子窗口的代码, 把class的继承类由Form改为Dock Content。1.5基于Umail的营销系统21世纪是个信息技术飞速发展的世纪,计算机被越来越广泛的运用到各个领域中。计算机对信息管理的优越性也发挥着更大的作用。作为一种交流方式,电子邮件在很大程度取代了信件的作用。使用电子邮件进行交流大大提高了工作效率。很多公司也选择电子邮件作为跟客户或员工的互动交流方式。公司在对邮件的发送时往往是一对多,即需要将同一封邮件内容发送给几十人甚至上百上千人。而现今大部分的邮件服务器提供商虽然支持多人发送的模式,但这需要对收件人地址一个一个的输入。这种对数据的手工输入操作不仅工作量大,难免会出现错误和遗漏,而且出错后很难被发现。基于此问题,就有必要建立一个可以实现邮件营销的系统,对多人的邮件发送效率更高,大幅度的减少错误和遗漏情况。而且作为一种营销手段,Umail系统可达到针对特定的对象发送他们感兴趣的内容,这比起电视广告和报纸宣传的盲目性具有很大的优越性。更重要的是,通过Umail邮件系统发送邮件是完全免费的,可以为营销活动的进行省下一大笔的资金。1.5.1系统功能简介群组管理,包括群组的增加、编辑和删除;订阅者(群组成员)管理,包括订阅者的增加、编辑、查找和删除,以及从外部数据文件导入订阅者;邮件管理:包括邮件的创建、编辑、删除,并实现邮件的发送、邮件内容个性化设置以及发送记录的查看。报表管理:包括邮件发送后的报表信息写入、邮件发送记录、日志查看、报表打印、报表导出为外部文件。1.5.2系统工作简单流程1. 用户创建新的群组为群组添加组员(订阅者)2. 用户创建新的邮件并填写邮件内容3. 在工具栏设置发送模式4. 用户选择邮件,选择右键的发送功能,在弹出的对话框选择群组,发送邮件1.5.3开发环境和运行环境开发环境:Visual Studio 2008开发语言:C#开发平台:Windows XP数 据 库:Sqlite软件建模:EA(Enterprise Architect 7.0)运行环境:Windows XP- 53 -第2章系统的总体设计第2章 系统的总体设计2.1应用需求分析基于Umail的营销系统的需求主要来自邮件发送人员(以下用管理员表示)。管理员的需求主要有:a. 创建一个群组,对该群组进行管理(编辑、删除、查看组成员)b. 为指定的群组添加订阅者,对订阅者进行管理(编辑、删除、查找)c. 创建新的邮件,对该邮件进行管理(编辑、删除、发送)d. 设置邮件的发送模式、指定邮件要发送的群组e. 报表数据的自动写入,查看报表数据、报表信息导出、打印报表信息根据以上的用户需求可以得到一个简单用户需求用例图,如图2.1所示:图2.1 用户需求用例图2.2系统功能模块划分2.2.1 Group List:群组管理1. Add Group:添加新的群组2. Modify Group:修改群组信息3. Delete Group:删除群组4. View Member:查看成员2.2.2 Subscriber Manager:订阅者管理1. Add Subscriber:添加新的订阅者2. Modify Subscriber:修改订阅者信息3. Delete Subscriber:删除订阅者4. Import from different datasource:从外部数据库导入订阅者5. Search Subscriber:查找订阅者2.2.3 Campaign List:邮件(事件)管理1. Add Campaign:添加一封新邮件2. Modify Campaign:修改邮件内容(1) 邮件个性化:例 使用#firstname#来实现用户名的个性化(2) 支持Html、Text、Mine的电子邮件格式3. Remove Campaign:删除邮件4. Send Campaign:发送邮件(1) 直接发送:直接查询DNS MX记录并且直接地发送到最终目的地(2) 写入发送报表5. View Report:查看发送记录2.2.4 Report List:报表处理1. Campaign Report:邮件发送记录(表单、图形报表)(1) Campaign Select:选择查看单一邮件的发送记录(2) Print Report:打印发送记录(3) Export Report:导出发送记录i. Save As Excel File:导出为Excel文件ii. Save As PDF File:导出为PDF文件2. Error Log:错误日志Time Occur、Event description:时间和事件描述各系统功能关系如图2.2所示:图2.2 系统功能关系用例图2.3数据库设计2.3.1确定entities及relationships6(1) 设计宏观行为一个Umail系统的宏观行为包括:1. 添加群组(group)2. 添加订阅者(subscriber)3. 添加邮件(campaign)(2) 确定entities及relationships在Umail系统中一个群组可以拥有多个订阅者,一封邮件可以同时发送给多个群组也可以给一个群组发送多封邮件。Umail系统数据表的关系草图如图2.3所示:tblMember订阅者、tblList订阅者、tblCampaign邮件图2.3 宏观行为数据表关系图(3) 细化宏观行为针对上面的宏观行为以及系统的应用需求分析可得到细化后的宏观行为。1. 添加或删除群组(group)2. 添加或删除订阅者(subscriber)3. 添加或删除邮件(campaign)4. 设置邮件发送模式5. 添加报表信息(report)6. 写入错误日志(err log)(4) 确定业务规则1. 一个群组包含多个订阅者2. 一个群组可以包含一个扩展订阅者组(通过external从外部数据导入的订阅者)3. 一个订阅者属于一个群组,订阅者信息可以重复4. 一封邮件可以发送给多个群组5. 一个群组可以多次发送邮件6. 一个报表信息对应一个群组7. 一个群组拥有多条报表信息8. 一个错误日志描述一封邮件发送情况(针对具体的订阅者描述)9. 一封邮件发送情况由多条错误日志描述10. 群组和订阅者之间有级联关系,一个群组删除后该群组相应的订阅者也被删除11. 群组和扩展订阅者有级联关系,一个群组删除后该群组相应的扩展订阅者也被删除12. 其他表之间不存在级联关系细化后的系统数据表关系如图2.4所示:tblMember订阅者、tblList订阅者、tblCampaign邮件tblRemoteMember外部数据导入的订阅者、tblSetting邮件发送模式tblReport报表信息、tblErrlog错误日志图2.4 细化后数据表关系图2.3.2确定所需数据61. 确定支持数据各个数据表所需数据如表2.1所示表2.1 Umail各个表中的字段名tblMembertblListtblCampaigntblReporttblErrLogtblSettingtblRemoteMember订阅者ID组ID邮件ID报表ID日志IDIDIDFirstName组名邮件名组ID发送时间需要登录组IDLastName描述信息标题邮件ID错误信息用户名链接地址邮箱地址回复邮箱内容(Html)成功数密码邮件列表性别发送格式内容(普通)失败数直接发送表名公司名称组源邮件格式总数服务器地址供应者地址邮箱存在错误邮编发件人错误数国家发送时间城市所属组ID2. 定义数据库的表属性根据已确定的数据为每张表决定字段名,数据类型及大小,并设置是否为Null1. 群组(Group)表属性定义,如表2.2所示表2.2 表tblList属性定义字段名类型是否主键是否为空默认值IDINTEGER是否自增长NameVARCHAR否否DescriptionVARCHAR否是NULLReplyVARCHAR否是NULLMailFormatINTEGER否是NULLMemberSourceINTEGER否否0FromAddressVARCHAR否是NULLFromNameVARCHAR否是NULL2. 订阅者(Subscriber)表属性定义,如表2.3所示表2.3 表tblMember属性定义字段名类型是否主键是否为空默认值IDINTEGER是否自增长FirstNameVARCHAR否是NULLLastNameVARCHAR否是NULLMailAddressVARCHAR否是NULLSexINTEGER否是NULLCompanyVARCHAR否是NULLAddressVARCHAR否是NULLPostCodeVARCHAR否是NULLCityVARCHAR否是NULLCountryVARCHAR否是NULLGroupIDINTEGER否是NULL3. 邮件(Campaign)表属性定义,如表2.4所示表2.4 表tblCampaign属性定义字段名类型是否主键是否为空默认值IDINTEGER是否自增长NameVARCHAR否否SubjectVARCHAR否是NULLHtmlBodyTEXT否是NULLTextBodyTEXT否是NULLMailFormatINTEGER否是NULL4. 外部订阅者(RemoteMember)表属性定义,如表2.5所示表2.5 表tblRemoteMember属性定义字段名类型是否主键是否为空默认值IDINTEGER是否自增长ListIDINTEGER否是NULLConnectionVARCHAR否是NULLFieldsTEXT否是NULLTableNameVARCHAR否是NULLProviderNameVARCHAR否是NULL5. 报表(Report)表属性定义,如表2.6所示表2.6 表tblReport属性定义字段名类型是否主键是否为空默认值IDINTEGER是否自增长ListIDINTEGER否是NULLCampaignIDINTEGER否是NULLSuccessfulINTEGER否是NULLBadMailINTEGER否是NULLTotalMailsINTEGER否是NULLHasErrorsINTEGER否是NULLErrorsVARCHAR否是NULLSentTimeNONE否是NULL6. 日志(ErrorLog)表属性定义,如表2.7所示表2.7 表tblErrLog属性定义字段名类型是否主键是否为空默认值IDINTEGER是否自增长EventTimeNONE否是NULLEventDesTEXT否是NULL7. 发送模式(setting)表属性定义,如表2.8所示表2.8 表tblSetting属性定义字段名类型是否主键是否为空默认值IDINTEGER是否自增长SmtpServerINTEGER否是NULLSmtpLoginRequiredINTEGER否是NULLSmtpUserVARCHAR否是NULLSmtpPasswordVARCHAR否是NULLDirectSendINTEGER否是NULL第3章系统的详细设计第3章 系统的详细设计3.1系统窗体模块组成系统的主要界面有:主界面(frmMain)群组管理界面(frmList)邮件管理界面(frmCampaignList)资源管理器界面(frmExplorer)属性栏(frmProperties)报表信息界面(frmCampaignReport)错误日志界面(frmErrLog)系统的扩展界面有:邮件编辑界面(frmCampaignModify)群组编辑界面(frmGroupEditWizard)外部数据导入界面(frmImportGroupWizard)订阅者管理界面(frmListModify)订阅者查找界面(frmMemberSearcher)发送模式设置界面(frmSystemSettings)About界面(frmAboutBox)3.2数据模块设置3.2.1数据源设置Umail系统的运行是建立在数据库信息的读取与存储基础上的,很多组件和窗体都需要访问共同的数据源。如果为每个组件或窗体都设置数据源是个重复而且繁琐的事,这无疑将浪费很多的时间,而且一旦数据源发生改变将会带来很大的修改量。这时候就需要将数据源集中处理,因为是共同的数据源,所以最好只需要设置一次,当应用的时候只需获取一下就可以了。建立一个专门的配置类Class Config来配置数据源,在这个类中装配有DataBasePath和ConnectionString。从DataBasePath可以获取到Sqlite数据源的文件路径,而ConnectionString则是数据源连接字符串。具体代码如下:class Config.public static string DataBasePathgetreturn string.Format(01,Application.LocalUserAppDataPath,UMail.db); public static string ConnectionStringgetreturn string.Format(data source = 0,DataBasePath);.代码中可以知道数据源保存在Winform的Application.LocalUserAppDataPath下,系统用户目录下面,即C:Documents and Settings用户名Local SettingsApplication DataYardiUMail版本号UMail.db当在其他地方需要使用数据源时,调用ConnectionString就可以获取到数据源,例:Config.ConnectionString。3.2.2自定义数据实体38虽然Umail系统是一个小型系统,可以使用DataSet来表示整个数据集。但考虑到系统以后的扩展以及代码可读性以及一些其他的因素我们决定使用自定义的实体。在使用DataSet的替代解决方案之前我们先了解一些DataSet的缺点。1. DataSet存在的问题首先,DataSet无法从数据库结构中提取代码。这使得在使用DataSet时,可能需要在数据库架构和应用层/业务层之间建立一个严格的链接。这种硬编码对代码维护工作以及未来的开发所产生的影响很值得我们进行深入的研究。其次,DataSet无法提供适当抽象的一个原因是它要求开发人员必须了解基础架构,关于列名称、类型以及关系的所有细节。在ds.Tables0.RowsiName,像这样的式子显然不是那么容易阅读的,对于代码的编写和维护也造成了很大的困难。DataSet属于弱类型。无论何时从DataSet中搜索值,都以System.Object的形式返回,你需要对这个值进行转换。转换的过程面临着失败的危险,更不幸的是,失败是会在运行中显示出来而不是编译时。2. 自定义实体与DataSet不同的是,我们希望在获得数据的同时将数据作为对象来使用。举个例子,我们所需要的不是获得保存群组信息的Table,而是要获取群组这个对象(自定义实体)。自定义实体代表业务域的对象,是整个业务层的基础。并不是简单地获取数据并自动填充DataSet,而是手动将数据映射到自定义实体。自定义实体的创建是一项重复性的工作,可以使用代码生成工具或O/R映射器来减轻工作量。但很可惜,两三个月之前的我并没有意识到这个便捷的路径,好在Umail系统的表并不多,表结构也不复杂,手工输入映射关系还是可以接受的。图3.1和3.2展示了Umail系统中的自定义实体类。图3.1 自定义实体类图1图3.2 自定义实体类图2举tblCampaign(邮件)的自定义实体类CampaignInfo为例来进行详细说明:首先类CampaignInfo继承了EntityBase这个基类,public class CampaignInfo : EntityBase在EntityBase类中主要定义了两个方法。EntityBase和OnPropertyValueChanged,其中EntityBase()实现了PropertyInfo.:.SetValue 方法,OnPropertyValueChanged则定义了在值发生改变时的赋值操作。代码如下:1. EntitiyPropertyValueChangedEventArgs:/事件类,进行赋值操作public class EntitiyPropertyValueChangedEventArgs: EventArgs private PropertyInfo property; public PropertyInfo Property get return property; public EntitiyPropertyValueChangedEventArgs(PropertyInfo pro) property = pro; 2. EntityBaseEntityBase():实现PropertyInfo.:.SetValue(Object, Object, array()Object:System.Object,将设置其属性值的对象;Object:System.Object,此属性的新值;Object:System.Object,索引化属性的可选索引值。对于非索引化属性,此值为NULLpublic EntityBase(IDataRecord record): this().PropertyAttribute attr = property.GetCustomAttributes(typeof(PropertyAttribute), true)0 as PropertyAttribute;if (attr.FieldType.BaseType = typeof(Enum) property.SetValue(this, Convert.ToByte(recordattr.FieldName), null);else property.SetValue(this, Convert.ChangeType(recordattr.FieldName, attr.FieldType), null);/非索引化属性,可选索引值为Null .3. EntityBaseOnPropertyValueChanged():通过引用EntitiyPropertyValueChangedEventArgs事件类来实现赋值操作public event EventHandler PropertyValueChanged;protected virtual void OnPropertyValueChanged(EntitiyPropertyValueChangedEventArgs e) if (PropertyValueChanged != null)/事件不为空,即值发生改变 PropertyValueChanged(this, e);接着,在CampaignInfo类中定义tblCampaign中相应的字段。字段名类型IDINTEGERNameVARCHARSubjectVARCHARHtmlBodyTEXTTextBodyTEXTMailFormatINTEGERprivate int id;private string name;private string subject;private string htmlBody;private string textBody;private MailFormat mailFormat;其中MailFormat是一个枚举类型,定义在ENUMDATA类文件中public enum MailFormatMime,Html,Text,AlternativeMIME表示多用途Internet邮件扩允协议。MIME扩充了基本的面向文本的Internet邮件系统,以便可以在消息中包含二进制附件;Html:以Html形式发送邮件;Text:以Text形式发送邮件;Alternative:multipart类型的一个子类型,MIME邮件可以传送超文本内容,但出于兼容性的考虑,一般在发送超文本格式内容的同时会同时发送一个纯文本内容的副本,如果邮件中同时存在纯文本和超文本内容,则邮件需要在Content-Type域中定义multipart/alternative类型,邮件通过其boundary中的分段标识将纯文本、超文本和邮件的其它内容分成不同的段。这样,每个字段都已经定义好了,接下来对每一个字段的属性进行设置。我们应用属性访问器包含与获取或设置属性有关的可执行语句。访问器的声明采用如下形式:getsetget访问器与方法体相似,相当于读取字段的值,并且返回属性类型的值;set访问器相对于返回为Void的方法,使用与属性类型相同的隐形参数value,在set访问器中对属性进行设值并可执行相关的操作。下面的代码是Name字段的属性设置,get返回要获取的Name的值,set设置字段的值并触发OnPropertyValueChanged事件。Property(Name, typeof(string)Category(General)public string Nameget return name; setif (name != value)/name值与隐形参数value的值不同name = value;PropertyInfo property = this.GetType().GetProperty(Name);/返回 PropertyInfo,并且其类型参数由相应的类型参数(string)替换OnPropertyValueChanged(new EntitiyPropertyValueChangedEventArgs(property);运用同样的方法,完成其他字段的属性设置,这样实体的自定义就完成了。其中用到了继承和封装的面向对象技术,并且添加了自定义事件。我们获取到的实体将是一个强类型,这意味着可以获得IntelliSense支持(图3.3所示),并且不太需要进行容易出错的强制类型转换。图3.3 CampaignInfo类的IntelliSense3.2.3数据实体的逻辑操作逻辑操作主要就是针对数据源的增删改查的操作。Umail系统使用的Sqlite作为数据库引擎,需要引进System.Data.SQLite使得可以更方便的使用SQL语句对数据进行操作。using System.Data.SQLite;在实现一个数据库操作时要先获取数据源连接字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务行业电商运营主管绩效评定表
- 石油化工企业安全员安全管理与预防措施绩效表
- 业务风险防范与管理责任承诺函(9篇)
- 社区服务协议模板
- 餐饮连锁店厨师长绩效表现评定表
- 跨界设计创新合作承诺书范文8篇
- 业务合规及守秘义务履行承诺书8篇
- 生物3.2.1《种子的萌发》(人教版七年级上)
- 《Python数据挖掘与机器学习》课件 第十章-单细胞转录组学
- 2025年GMP考试试题及参考答案
- 慢性乙型肝炎防治指南(2022年版)解读
- 发电企业应急能力建设评估规范
- 手术室手术预约与流程管理制度
- 初中语文《诫子书》教学课件
- 市政绿化养护及市政设施养护服务方案(技术方案)
- 五年级剪纸课件
- 2024年辽宁省沈阳市铁西区四年级数学第一学期期末联考试题含解析
- 圆圈正义读书分享课件
- 2024工业企业六西格玛数据分析技术应用规范
- 高考物理一轮复习重难点逐个突破专题91热学中的图像问题(原卷版+解析)
- 醒脑开窍针法治疗中风病
评论
0/150
提交评论