动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ ASP.NET技巧 ]的信息



本月文章推荐
.ASP.NET 2.0高级数据处理之冲突检.
.从ASP过渡到ASP.net遗留的二十大.
.如何在asp.net2.0下面使用基于数.
.谈谈HtmlControl与WebControl的区.
.將datagrid控件內容輸出到excel文.
.图片地址防盗链,通过IHttpHandle.
.ASP.NET 2.0 X64的奇怪问题.
..NET精简框架的“无法找到资源程.
.使用FileUpload控件上传图片并自.
.扩展 IronPython for ASP.NET:编.
.ASP.NET入门随想之博德之门 类与.
.无限级分类的非递归实现(存储过程.
.如何让.Net控件在设计时Initiali.
.我的aspx为什么无法显示中文.
.怎样才能判断出用户上传的文件中.
.在ASP.NET程序中创建唯一序号.
.Web服务数据库访问中间件的实现.
.DATAGRID分页,增加首页、最后一.
.asp.net 2.0中不同web控件之间的.
.ASP实现禁止从外部提交数据 .

.NET 1.1 下不使用 System.Web.Mail.SmtpMail 发送邮件的其它选择

发表日期:2006-12-23 |


    最近工作原因需要维护 ASP.NET 1.1 的程序,本来用着 C# 2.0 System.Net.Mail namespace 发送邮件用得好好得,但 ASP.NET 1.1 里面的 System.Web.Mail 死活问题就是多,于是选择其它策略,封装了邮件发送的接口,再以其它方式来实现邮件发送,于是就有了下面这些文字。

定义抽象接口以封装所有实现:

using System;
using System.Web.Mail;

namespace YywMail
{
    public abstract class MySmtpMail
    {
        Fields#region Fields

        private string _defaultCharset = "GB2312";
        private int _defaultSmtpPort = 25;

        #endregion
       
        Properties#region Properties

        protected string DefaultCharset
        {
            get { return this._defaultCharset; }
        }

        protected int DefaultSmtpPort
        {
            get { return this._defaultSmtpPort;}
        }

        #endregion

        Methods#region Methods

        /**//// <summary>
        /// 获取默认实例
        /// </summary>
        /// <returns></returns>
        public static MySmtpMail GetDefaultInstance()
        {
            // 此处可通过外部配置文件定义具体实现类型,再
            // 通过 Activator.CreateInstance() 获取类型实例           
        }

        /**//// <summary>
        /// 做一些初始化的工作
        /// </summary>
        public abstract void Open();

        /**//// <summary>
        /// 销毁对象
        /// </summary>
        public abstract void Close();

        /**//// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="message"></param>
        /// <param name="smtpServer"></param>
        /// <param name="serverUsername"></param>
        /// <param name="serverPassword"></param>
        /// <returns></returns>
        public bool Send(MailMessage message, string smtpServer, string serverUsername, string serverPassword)
        {
            return Send(message, smtpServer, serverUsername, serverPassword, this._defaultSmtpPort);
        }

        public abstract bool Send(MailMessage message, string smtpServer, string serverUsername, string serverPassword, int smtpPort);

        public static string[] GetTo(MailMessage message)
        {
            if (message == null)
                throw new ArgumentNullException("message");

            if (Globals.IsNullorEmpty(message.To))
                return null;

            return message.To.Split(';');
        }

        public static string[] GetCc(MailMessage message)
        {
            if (message == null)
                throw new ArgumentNullException("message");

            if (Globals.IsNullorEmpty(message.Cc))
                return null;

            return message.Cc.Split(';');
        }

        public static string[] GetBcc(MailMessage message)
        {
            if (message == null)
                throw new ArgumentNullException("message");

            if (Globals.IsNullorEmpty(message.Bcc))
                return null;

            return message.Bcc.Split(';');
        }

        #endregion
    }
}

注: 按照常理,使用前先 Open() 一下,使用后也别忘了 Close()

实现方案一(Jmail 组件):

在 .NET 中使用 Jmail  需要如下设置:
1、安装jmail;
2、找到jmail.dll;
3、注册该组件Jmail.dll,作法是将jmail.dll文件拷贝到system32目录下,再运行命令“regsvr32 jmail.dll”(不包括引号),卸载可运行“regsvr32 /u jmail.dll”;
4、执行Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Bin\ildasm.exe(可使用Visual Studio .Net 2003 命令提示),
格式如下:tlbimp c:\Program Files\Dimac\w3JMail4\jmail.dll /out:MyJmail.dll /namespace:MyJmail
生成MyJmail.dll后,将它引用至项目中。

下载组件

接下来就是实现类的编写了:

using System;
using System.Web.Mail;

namespace YywMail
{
    public class JMailSmtpMail : MySmtpMail
    {
        Fields#region Fields

        MyJmail.Message jmail = null;

        #endregion

        Methods#region Methods

        public override void Open()
        {
            jmail = new MyJmail.Message();
        }

        public override bool Send(MailMessage message, string smtpServer, string serverUsername, string serverPassword, int smtpPort)
        {
            if (jmail == null)
                throw new Exception("smtp is Closed!");
           
            if (message == null)
                throw new ArgumentNullException("message");

            DateTime t = DateTime.Now;

            //Silent属性:如果设置为true,JMail不会抛出例外错误. JMail. Send( () 会根据操作结果返回true或false
            jmail.Silent = false;

            //jmail创建的日志,前提loging属性设置为true
            jmail.Logging = true;

            //字符集,缺省为"US-ASCII"
            jmail.Charset = base.DefaultCharset;

            //信件的contentype. 缺省是"text/plain") : 字符串如果你以HTML格式发送邮件, 改为"text/html"即可。
            if (message.BodyFormat == MailFormat.Html)
                jmail.ContentType = "text/html";

           
            jmail.Priority = GetJmailPriority(message.Priority);

            //添加收件人
            string[] toArray = MySmtpMail.GetTo(message);
            if (toArray != null && toArray.Length > 0)
            {
                bool isAddedRecipient = false;

                for (int i = 0; i < toArray.Length; i++)
                {
                    if (Globals.IsNullorEmpty(toArray[i]))
                        continue;

                    if (!isAddedRecipient)
                    {
                        jmail.AddRecipient(toArray[i], String.Empty, String.Empty);
                        isAddedRecipient = true;
                    }
                    else
                    {
                        jmail.AddRecipientCC(toArray[i], String.Empty, String.Empty);
                    }
                }
            }

            string[] ccArray = MySmtpMail.GetCc(message);
            if (ccArray != null)
            {
                foreach (string cc in ccArray)
                {
                    if (!Globals.IsNullorEmpty(cc))
                        jmail.AddRecipientCC(cc, String.Empty, String.Empty);
                }
            }

            string[] bccArray = MySmtpMail.GetBcc(message);
            if (ccArray != null)
            {
                foreach (string bcc in bccArray)
                {
                    if (!Globals.IsNullorEmpty(bcc))
                        jmail.AddRecipientBCC(bcc, String.Empty);
                }
            }

            jmail.From = message.From;           

            //发件人邮件用户名
            jmail.MailServerUserName = serverUsername;
            //发件人邮件密码
            jmail.MailServerPassWord = serverPassword;           
            //设置邮件标题
            jmail.Subject = message.Subject;
            //邮件添加附件,(多附件的话,可以再加一条jmail.AddAttachment( "c:\\test.jpg",true,null);)就可以搞定了。[注]:加了附件,讲把上面的jmail.ContentType="text/html";删掉。否则会在邮件里出现乱码。
            //jmail.AddAttachment("c:\\test.jpg", true, null);
            //邮件内容
            jmail.Body = message.Body;

            if (message.BodyFormat == MailFormat.Html)
                jmail.Body += "<br><br>";
            else
                jmail.Body += "\r\n\r\n";

            jmail.Body += DateTime.Now.ToString();

            smtpServer = String.Format("{0}:{1}", smtpServer, smtpPort);

            //jmail发送的方法
            bool result = jmail.Send(smtpServer, false);

            return result;
        }

        public override void Close()
        {
            jmail.Close();
        }


        private static byte GetJmailPriority( System.Web.Mail.MailPriority priority)
        {
            // 邮件等级,1为加急,3为普通,5为低级

            if (priority == System.Web.Mail.MailPriority.High)
                return 1;

            if (priority == System.Web.Mail.MailPriority.Low)
                return 5;

            return 3;
        }

        #endregion
    }
}

实现方案二(OpenSmtp.Net 组件):

对于还没有接触过 OpenSmtp.Net 的朋友可以先 Google 下,这里不再做概念介绍,同时它还有一个孪生兄弟 OpenPop.Net,至于 OpenSmtp.Net 我们可以在 http://sourceforge.net/projects/opensmtp-net/ 下载到,目前最新版本是 1.11。

接下来开始进入主题:

using System;
using System.Web.Mail;
using OpenSmtp.Mail;

namespace YywMail
{
    public class OpenSmtpMail : MySmtpMail
    {
        Files#region Files

        OpenSmtp.Mail.MailMessage msg = null;
        Smtp smtp = null;

        #endregion

        Methods#region Methods

        public override void Open()
        {
            msg = new OpenSmtp.Mail.MailMessage();
            smtp = new Smtp();
        }

        public override bool Send(System.Web.Mail.MailMessage message, string smtpServer, string serverUsername, string serverPassword, int smtpPort)
        {
            if (msg == null || smtp == null)
                throw new Exception("smtp is Closed!");

            if (message == null)
                throw new ArgumentNullException("message");

            SmtpConfig.VerifyAddresses = false;
            EmailAddress from = new EmailAddress(message.From, message.From);
           
            msg.Charset = base.DefaultCharset;

            msg.From = from;
            msg.Priority = GetOpenSmtpPriority(message.Priority);

            //添加收件人
            string[] toArray = MySmtpMail.GetTo(message);
            if (toArray != null)
            {
                foreach (string to in toArray)
                {
                    if (!Globals.IsNullorEmpty(to))
                        msg.AddRecipient(to, AddressType.To);
                }
            }

            string[] ccArray = MySmtpMail.GetCc(message);
            if (ccArray != null)
            {
                foreach (string cc in ccArray)
                {
                    if (!Globals.IsNullorEmpty(cc))
                        msg.AddRecipient(cc, AddressType.Cc);
                }
            }

            string[] bccArray = MySmtpMail.GetBcc(message);
            if (ccArray != null)
            {
                foreach (string bcc in bccArray)
                {
                    if (!Globals.IsNullorEmpty(bcc))
                        msg.AddRecipient(bcc, AddressType.Bcc);
                }
            }

            msg.Subject = message.Subject;

            if (message.BodyFormat == System.Web.Mail.MailFormat.Html)
            {
                msg.HtmlBody = message.Body + "<br><br>" + DateTime.Now.ToString();
            }
            else
            {
                msg.Body = message.Body + "\r\n\r\n" + DateTime.Now.ToString();;
            }

            string str1 = msg.HtmlBody;
            string str2 = msg.Body;
           
            smtp.Host = smtpServer;
            smtp.Username = serverUsername;
            smtp.Password = serverPassword;
            smtp.Port = smtpPort;

            smtp.SendMail(msg);

            return true;
        }   
   
        public override void Close()
        {
            msg = null;
            smtp = null;
        }

        private static string GetOpenSmtpPriority( System.Web.Mail.MailPriority priority)
        {
            // 邮件等级,1为加急,3为普通,5为低级

            if (priority == System.Web.Mail.MailPriority.High)
                return OpenSmtp.Mail.MailPriority.High;

            if (priority == System.Web.Mail.MailPriority.Low)
                return OpenSmtp.Mail.MailPriority.Low;

            return OpenSmtp.Mail.MailPriority.Normal;
        }

        #endregion
    }
}


实现方案三:

(上面两种实现方案已经足够满足目前的需求,有必要的话再继续扩展)

上一篇:.NET框架下Oracle到SQL Server迁移 人气:3090
下一篇:Asp.Net2.0中实现多任务异步页的一点提示 人气:3310
浏览全部asp.net的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵