您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页基于C#的邮件群发的原理和实现

基于C#的邮件群发的原理和实现

来源:爱go旅游网
通信论坛 计算机与瓣络刨新生活 53 基于C{6}的邮件群发的原理和实现 王淑梅赵艳春 (石家庄邮电职业技术学院河北石家庄050031) 【摘要】邮件群发这一手段则被广泛应用于电子商务和网络营销中,拥有局域网的单位也可以通过邮件群发方便迅速地发 送通知和传达文件。本文介绍了用Visual Studio 2005作为开发工具,在配置文件中保存数据库的配置信息,记录邮件地址列表 和邮件信息.用Visual C≠≠2.0语言实现邮件群发。详细讨论了软件设计的要点。 【关键词】邮件群发SMTP ADO.Net 2.0 中图分类号:TP393.08 文献标识:A 文章编号:1008—1739(2o08)19-53-4 Principle and Realization of Email Broadcast Based on C舞 WANG Shu-mei ZHAO Yan-chun (s iazhuang Post&Telecommunication Co ̄ege,s iazhuang Hebei 050031,China) Abstract:The means of emajl broadcast is deIy appfied tO electronic business and web marketing.The companies which possess the Local Area Network can send the notices and transmit the documenu conveniently and rapidly by email broadcast.The paper will introduce the way tO achieve the email broadcast by using Visual C≠≠2.0 language and taking Visual Studio 2005 as the development too1.with the databank configuration information stored in conifguration files and the email address list and elnRil information recorded ni databank.The main points of software design will be discussed in details. Key words:E-mail Broadcast;SMTP;ADO.Net 2.0 子邮件从发送方地址传送到接收方地址。工作方式:首先针对 1引言 用户发出的邮件请求.由发送SMTP建立一条连接到接收 SMTP的双工通信链路,这里的接收SMTP是相对于发送 SMTP而言的.实际上它既可以是最终的接收者也可以是中 E—mail群发是目前比较流行的方式。利用邮件群发功能 间传送者。发送SMTP负责向接收SMTP发送SMTP命令, 在很短的时间里将商业信息发到客户或商业伙伴手中,效率 而接收SMTP则负责接收并反馈应答。图形描述如图1所示。 很高。作为.NET的核心开发语言。c#拥有强大的、较全面的 功能。本文在SMTP协议的支持下,提出了一种基于C≠≠和 SQL Server2000数据库实现电子邮件群发的方法。对c≠≠中 System.Net.Mail命名空间(包含用于将电子邮件发送到简单 邮件传输协议(SMTP)服务器进行传送的类)、System.Data命 名空间(提供对表示ADO.ENT结构的类的访问)和System. 图1 SMTP通信模拟示意图 Configuation命名空间中类的使用进行了详细的阐述.并给出 了实现群发的核心示例代码。 3数据库设计 2简单邮件传输协议(SMTP)的简介 要实现邮件群发,首先与SMTP服务器建立连接,然后依 据邮件地址列表中的邮件地址,通过SMTP服务器发送邮件, SMTP协议是TCP/IP协议族中的一员。主要对如何将电 从而实现邮件群发。用SQL Server 2000作为数据库服务器, 便于管理邮件地址列表、邮件信息,用ADO.NET 2.0可不用 定稿日期:2008-09—12 2008年第19期《计算机与厨络》 信论坛 计算机与瓣络创新生活 重新编译程序的情况下轻松实现连接不同数据库。 用SQL Server2000作为数据库服务器,建立数据库 Integrated Security SSPI:Imti ̄Catalog Mail” providerName ”System.Data.SqlClient” /> Mail。此数据库中用到2张表,分别为Mail_List( ̄件列表)和 MailInfo(邮件信息)。Mail_List表中存放的邮件地址, </connectionStrings> MailInfo表中存放的是邮件的详细信息。2张表的字段说明 _4.2建立数据库连接 通过使用ConigurfationManager类的静态集合 见表1和表2。 表1 MailList(邮件列表) _ConnectionStrings.就能够在代码中访问ConnectionString和 ProviderName。通过使用DbProviderFactories类中的方法 名称 M—ID 类型 大小 关键宇 是否为空 备注 nUmer1C 9 是 否 否 邮件ID GetFactory,就会返回一个对应ProviderName的工厂对象,建 MToAddresS Varchar2 5 O 是 接受方由 地址 立对应的数据库连接。代码如下: #region类字段: ///<summary> 表2 Mail_Info(邮件信息) III数据库连接配置 III</summary> pfiv ̄e CormectionStringSettings re setting; ///<summary> 名称 M—ID 类型 大小 关键字 是否为空 备注 nUmerlC 9 是 否 是 是 是 邮件tD 邮件主题 邮件内容 邮件附件 M—Subject Varchar2 5O 否 M—Body Varchar2 50O 否 M—At tachment Varchar2 50 否 ///数据源 III</summary> 4软件设计 ADONET库包含可用于在数据存储区和客户应用程序之间 传输数据的类。这些类称为连接类或者提供者类。在.Net框架 private DbProviderFactory m.factory; #endregion类字段 ///<summary> III获得数据库连接 III</stump> 中包含以下几种提供者OLEDB,ODBC,SQL SERVER, ORACLE,还可以使用DB2和MySQL之类的第三方的提供 者。通过.Net提供的DbProviderFactory和DbProviderFactories ///<param name:”cormectName”>连接字符 ̄</param> ///<retums></returrls> pubfic 类.无需改动程序,可根据不同的连接类实现连接不同的数据库。 DbConneciton GetDbCormection(smng connectName) 程序需要以下命名空间: using System.Net; using System.Net.Mail; 、 { DbConnection conn; try using System.Data.SqlClient; { using System.Data.Common; using System.Configuration; m_//数据源配置信息 setting ConfiuratigonManager.CormectionStrin ̄ 程序集:System(在system.d11中) 程序集:System.Daa(在stystem.data.叫中) 程序集"SystemConfiguraiton(在systemconfigurationAll中) 【connectName]; ∥根据提供者,创建负责仓压莹 是供者对象的工厂对象 m factory:DbProviderFactories.GetFactory(e_sretting. ProviderName); 4.1数据库配置信息 为保证程序的稳定性,可将连接数据库的配置信息配置 于app.cortifg文件中。这样就可以无需重新编译应用程序而修 //创建数据库连接对象 colln m factory.CreateConnection0; COIII1.ConnecdonString=m_setting.CormecfionString; 改连接字符串。 <cormectionStnngs> <add nanle ”ConnectionString Mails”connectionString ” Data Source=127.0.0.1; } catch { 《计算机与网络》2008年第19期 通信论坛 计算机与瓣络创新生活 throw new Exception(”数据库连接异常!”); catch } { return conn; throw new Exception(”查询邮件信息异常”); } ) 4.3数据库查询 return ds; 建立好数据库连接后,就可以查询数据。在表Mail_Info ) 中根据邮件ID找到要发送的邮件信息,根据邮件ID在 4.4邮件发送 Maf1._ID表找到对应的邮件地址,然后就可以针对每个邮箱 邮件发送可以通过循环邮件信息结果集来实现。在. 实现群发的目的。 NET Framework 2.0中.使用MailMessage类表示邮件的内 代码如下: 容,SmtpClient类将电子邮件传输到您指定用于邮件传送的 ///<summary> SMTP主机,使用Attachment类创建邮件附件。 ///查询数据 MailMessage类的实例用于构造可使用SmtpClient类传 ///</summary> 输到SMTP ///<param name=”connectName”>连接字符串</param> 服务器以便传递的电子邮件。若要指定电子邮件的发件 ///<retums></retums> 人、收件人和内容。请使用MailMessage类的关联属性。 public DataSet GetMaillnfo(string connectName) 表3 MailMessage类的相关属性 { 邮件部分 属性 //连接字符串 发件人 From string query ”SELECT ID.M_ID,ID.M_TOADDRESS, 收件人 To 抄送(CC) CC INFO.M_SUBJECT,INFO.M_BODY,INFO. 密件抄送(BCC) Bcc M_ATTACHMENT FR.OM MAIL_ID ID,MAIL_INFO 附件 At tachment s INFO WHER E ID.MID=INFO.M主题 Subject __ID”; DataSet ds new DataSet0; 发件人 From try 使用AltemateViews属性指定一个电子邮件不同格式的 { 副本。如果用户发送HTML格式的邮件,则可能希望同时提 //打开数据库连接 供邮件的纯文本格式,以防一些收件人使用的电子邮件阅读 using(DbConnection conn = GetDbConnection 程序无法显示HTML内容。 (cormectName)) ・ 如果SMTP服务器要求在代表客户端发送电子邮件之 { 前验证客户端的身份,使用SmtpClient类的Credentials属性 colin.Open0; 设置认证的用户名和密码。如: //创建DbCommand对象 SmtpClient client new SmtpClient(server); using(DbCommand cmd=conn.CreateCommand0) client.ClientCertiifcates = new NetworkCredentiH { (userName,password); cmd.CommandType=CommandType.Text; 具体代码实现如下: cmd.CommandText=query: ///<summary> //创建DbDataAdapter对象 ///邮件发送 DbDataAdapter dbDataAdapter m factory. III</summary> CreateDataAdapter0; ///<param nalTle=”server”>接受邮件的SMTP服务器的 dbDataAdapter.SelectCommand=cmd; IP地址或名称</param> dbDataAdapter.Fill(ds); ///<param name=”connectName”>数据库连接字符串</ } param> } pubfic void Postmail(stifng server,string connectName) } { 2008年第19期《计算机与网络》 僬论坛 //获得发送的哑件信息 DataSet dsMaillnfo GetMaillnfo(cormectName); //接受邮件的Smtp服务器 SmtpClient client new SmtpClient(server); //发送邮件 client.Send(message); , , //设定发送邮件的邮箱地址 catch Exception eX1 MailAddress fromAddress=new MailAddress(”★★★@★★★. net”); try { MessageBox.Show(this,ex.Message,”发送邮件失败”, MessageBoxButtom.OK,MessageBoxlcon.Warning); { //循环读取邮件地址并发送实现群发 ) , foreach(DataR.ow drMalllnfo in dsMai]Info.Tables【0]. ROWS,) 5结束语 Visual C# 一个很好的编程工具,可实现多种功能。本文对 c#编程中的应用做了介绍,并对基于sMTP协i义的电子邮件进行 t //附件信息 Atcachment n1vAttachment:new Attachment(drMailI [t.nLattachrnent"].T。s ngO); //创建邮件信息 MaiuⅥessage message:new Mai1MessageO;//发送方邮件地址 message.From fomAddress; 了开放性和标准性较好的程序设计。本文所述程序在Wind0wS xp (sp2)Y,由Micros。丘Visualc≠≠2()编译通过。 //接受方邮件地址 messge.aT。-Add(drMai1Inf0【・tmj。address”】.T。stringO); //邮件主题 参考文献 【1](美)w・RJcHARD sTEvENs著・TcP/IP详解,卷1:协议 [M]・范建华等译・北京:机械工业出版社,2000,4・ mesSage.subject:drMajlInf0【”M—subject"].T。stringO; //邮件内容 [2j(美)GLENNNJoHNsoN著・ADo・NET 2・0高级编程CMJ・ 段超译・北京:清华大学出版社,2006,5・ message.B。dy:drMadIf面【,.M_B。ay”J.T。s廿ingO; //邮件附件 message.Attachments.Add(myAttachment); 【3](美)cHRIsTIAN NAGEL-g-a ̄.c#高级编程(第4版)[IⅥ】・ 李敏波译・北京:清华大学出版社,2006,10・ I E实用技巧三则 IE目前仍然是大多数网友的必备 工具,相信没有人不会用吧,不过普通的 母o)在弹出“打开”对话框中输入网 址,就不用担心网址被IE记录下来了。 一个小方框,显示“每日提示”的内容, 如果没有显示这一小方框,单击“帮助” 使用谁都会,下面我为大家介绍三则正 实用技巧,让你的使用方法与众不同。 加快IE的搜索速度 实际上,IE支持直接从地址栏中进 菜单,选择“每日提示”,在小方框内每 单击一次“下一提示”按钮,系统会显示 不要你看到我的地址记录 上网时在地址栏内输入网址,系统 会记录下来,虽然有时会方便你使用, 行快速高效地搜索。也支持通过“转到/ 搜索”或“编辑/查找”菜单进行搜索,你 只须键入一些简单的文字或在地址栏 ~新的提示。如果想一次看到“每日 提示”的所有内容,可以用下面的方 法将全部内容保存到文件中。在小 但在公用的机器上使用时,显然会暴露 你的隐私,让别人知道你曾经去过哪些网 站。虽然我们可以在IE属性对话框中选择 清除历史记录,但这种方法一般无法适用 于网吧机器上,因为你没有更改系统设 置的权限。其实使用“Ctrl+O”命令(字 \ 前面加上“go”、“find”或“?”,IE就可直 接从缺省设置的9个搜索引擎中查找 关键词并自动找到与您要搜索的内容 最匹配的结果。 保存“每日提示”所有内容 启动IE后,系统会在屏幕下面开 方框内单击,按下“Ctrl+A”组合键 选择全部内容,再按下“Ctrl+C”组 合键拷贝到剪贴板中,打开写字板, 按下“Ctrl+V”组合键将内容拷贝下 来.然后保存文件即可。 《计算机与网络》2008年第19期 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务