Utility常用功能类 MD5 ClientIP JS弹窗消息

UTILITY
Utility

  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using Microsoft.Practices.EnterpriseLibrary.Logging;
  5using System.Security.Cryptography;
  6using System.Web;
  7using System.Collections;
  8using System.Text.RegularExpressions;
  9using Dart.PowerTCP.SecureMail;
 10using System.Net.Sockets;
 11using System.IO;
 12using System.Data.SqlClient;
 13using System.Data;
 14using System.Collections.Specialized;
 15
 16namespace ChinaValue.CommonV2008
 17{
 18    /// <summary>
 19    /// 常用功能类
 20    /// </summary>

 21    public class Utility
 22    {
 23        /// <summary>
 24        /// 检测非法Post字符
 25        /// </summary>
 26        /// <param name="content"></param>
 27        /// <returns></returns>

 28        public static Boolean ValidatePostContent(String content)
 29        {
 30            Regex regexBadString = new Regex(@"<\s*?(/form)|(form)|(iframe)|(frame)|(meta)|(script).+?>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
 31            return !regexBadString.Match(content).Success;
 32        }

 33
 34        /// <summary>
 35        /// 写错误日志
 36        /// </summary>
 37        /// <param name="strInformation"></param>
 38        /// <param name="strTitle"></param>

 39        public static void LogInfo(String strTitle, String strInformation)
 40        {
 41            LogEntry logEntry = new LogEntry();
 42            logEntry.Title = strTitle;
 43            logEntry.Message = strInformation;
 44            logEntry.Categories.Add("General");
 45            logEntry.TimeStamp = DateTime.Now;
 46            Logger.Write(logEntry);
 47        }

 48
 49        /// <summary>
 50        /// 写指定路径的日志
 51        /// </summary>
 52        /// <param name="logUrl">日志路径,物理地址</param>
 53        /// <param name="title"></param>
 54        /// <param name="information"></param>

 55        public static void LogInfo(String logUrl, String title, String information)
 56        {
 57            using (FileStream fs = new FileStream(logUrl, FileMode.Append, FileAccess.Write))
 58            {
 59                StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
 60                sw.WriteLine(information);
 61                sw.Flush();
 62                sw.Close();
 63                fs.Close();
 64            }

 65        }

 66
 67        /// <summary>
 68        /// MD5加密
 69        /// </summary>
 70        /// <param name="toCryString"></param>
 71        /// <returns></returns>

 72        public static String MD5(String toCryString)
 73        {
 74            MD5CryptoServiceProvider hashmd5;
 75            hashmd5 = new MD5CryptoServiceProvider();
 76            return BitConverter.ToString(hashmd5.ComputeHash(Encoding.Default.GetBytes(toCryString))).Replace("-""").ToLower();
 77        }

 78
 79        /// <summary>
 80        /// 获取客户端的IP地址
 81        /// </summary>
 82        /// <returns></returns>

 83        public static String ClientIP()
 84        {
 85            //判断是否通过代理服务器上网
 86            if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"!= null)
 87            {
 88                return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();  //真实的IP
 89            }

 90            else
 91            {
 92                return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
 93            }

 94        }

 95
 96        /// <summary>
 97        /// 在客户端弹出一个消息框(Page)
 98        /// </summary>
 99        /// <param name="strMsg">待显示的信息</param>

100        public static void ShowClientMessegeBox(System.Web.UI.Page pageFor, String strMessage)
101        {
102            System.Text.StringBuilder strBuilder = new System.Text.StringBuilder("<script>alert(\"");
103            strBuilder.Append(strMessage.Replace("\r\n""\\r\\n"));
104            strBuilder.Append("\")</script>");
105            pageFor.ClientScript.RegisterStartupScript(pageFor.GetType(), "alertBox", strBuilder.ToString());
106        }

107
108        /// <summary>
109        /// 在客户端弹出一个消息框(UserControl)
110        /// </summary>
111        /// <param name="strMsg">待显示的信息</param>

112        public static void ShowClientMessegeBox(System.Web.UI.UserControl ucFor, String strMessage)
113        {
114            System.Text.StringBuilder strBuilder = new System.Text.StringBuilder("<script>alert(\"");
115            strBuilder.Append(strMessage.Replace("\r\n""\\r\\n"));
116            strBuilder.Append("\")</script>");
117            ucFor.Page.ClientScript.RegisterStartupScript(ucFor.GetType(), "alertBox", strBuilder.ToString());
118        }

119
120        /// <summary>
121        /// 在客户端跳转页面
122        /// </summary>
123        /// <param name="Url"></param>

124        public static void RedirectAtClient(String redirectUrl)
125        {
126            HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
127            HttpContext.Current.Response.Write("location.href='" + redirectUrl + "';");
128            HttpContext.Current.Response.Write("</script>");
129            HttpContext.Current.Response.End();
130        }

131
132        /// <summary>
133        /// 在客户端弹出消息框并跳转
134        /// </summary>
135        /// <param name="pageFor"></param>
136        /// <param name="message">待显示的信息</param>
137        /// <param name="redirectUrl">待跳转的地址</param>

138        public static void ShowClientMessegeBoxAndRedirect(String message, String redirectUrl)
139        {
140            HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
141            HttpContext.Current.Response.Write("alert('" + message + "');");
142            HttpContext.Current.Response.Write("location.href='" + redirectUrl + "';");
143            HttpContext.Current.Response.Write("</script>");
144            HttpContext.Current.Response.End();
145        }

146
147        /// <summary>
148        /// 在客户端弹出消息框并关闭窗口
149        /// </summary>
150        /// <param name="message">待显示的信息</param>

151        public static void ShowClientMessegeBoxAndClose(String message)
152        {
153            HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
154            HttpContext.Current.Response.Write("alert('" + message + "');");
155            HttpContext.Current.Response.Write("window.close();");
156            HttpContext.Current.Response.Write("</script>");
157            HttpContext.Current.Response.End();
158        }

159
160
161        /// <summary>
162        /// 在客户端弹出消息框并父窗口跳转
163        /// </summary>
164        /// <param name="message">待显示的信息</param>

165        public static void ShowClientMessegeBoxAndRedirectAtParent(String message, String redirectUrl)
166        {
167            HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
168            HttpContext.Current.Response.Write("alert('" + message + "');");
169            HttpContext.Current.Response.Write("window.parent.location.href='" + redirectUrl + "';");
170            HttpContext.Current.Response.Write("</script>");
171            HttpContext.Current.Response.End();
172        }

173
174        /// <summary>
175        /// 在客户端关闭新开窗口并刷新Opener
176        /// </summary>
177        /// <param name="pageFor"></param>
178        /// <param name="message">待显示的信息</param>
179        /// <param name="redirectUrl">待跳转的地址</param>

180        public static void CloseAndRefreshOpener()
181        {
182            HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
183            HttpContext.Current.Response.Write("window.opener.location.href=window.opener.location.href;");
184            HttpContext.Current.Response.Write("window.focus();");
185            HttpContext.Current.Response.Write("window.opener=null;");
186            HttpContext.Current.Response.Write("window.close();");
187            HttpContext.Current.Response.Write("</script>");
188            HttpContext.Current.Response.End();
189        }

190
191        /// <summary>
192        /// 在客户端刷新Opener
193        /// </summary>
194        /// <param name="pageFor"></param>
195        /// <param name="message">待显示的信息</param>
196        /// <param name="redirectUrl">待跳转的地址</param>

197        public static void RefreshOpener()
198        {
199            HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
200            HttpContext.Current.Response.Write("window.opener.location.href=window.opener.location.href;");
201            HttpContext.Current.Response.Write("window.focus();");
202            HttpContext.Current.Response.Write("</script>");
203        }

204
205        /// <summary>
206        /// 替换瘦文本框中的空格、大于号、小于号以及软回车,自动转换Email、HTTP地址
207        /// </summary>
208        /// <param name="content"></param>
209        /// <returns></returns>

210        public static String EncodeTextBox(String content)
211        {
212            StringBuilder sbContent = new StringBuilder(content);
213
214            sbContent = sbContent.Replace("<""&lt;");//处理小于号   
215            sbContent = sbContent.Replace(">""&gt;");//处理大于号   
216            sbContent = sbContent.Replace("\"""&quot;");//处理双引号
217
218            //替换URL
219            Regex regUrl = new Regex(@"(http:\/\/[\w.]+(\/?\w+)+[.a-zA-Z0-9\?=]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
220            sbContent = new StringBuilder(regUrl.Replace(sbContent.ToString(), "<a href=\"$0\" target=\"_blank\">$0</a>"));
221
222            //替换Email
223            Regex regEmail = new Regex(@"([a-zA-Z_0-9.-]+\@[a-zA-Z_0-9.-]+\.\w+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
224            sbContent = new StringBuilder(regEmail.Replace(sbContent.ToString(), "<a href=\"mailto:$0\">$0</a>"));
225
226            sbContent = sbContent.Replace("\n""<br />");//处理换行   
227            sbContent = sbContent.Replace("  ""&nbsp;&nbsp;");//处理空格   
228
229            return sbContent.ToString();
230        }

231
232        /// <summary>
233        /// 与EncodeTextBox方法作用相反
234        /// </summary>
235        /// <param name="content"></param>
236        /// <returns></returns>

237        public static String DecodeTextBox(String content)
238        {
239            StringBuilder sbContent = new StringBuilder(Utility.DropHtmlTags(content)); //去掉html标签
240
241            sbContent = sbContent.Replace("&quot;""\"");//处理双引号
242            sbContent = sbContent.Replace("&nbsp;&nbsp;""  ");//处理空格   
243            sbContent = sbContent.Replace("&lt;""<");//处理小于号   
244            sbContent = sbContent.Replace("&gt;"">");//处理大于号   
245            sbContent = sbContent.Replace("<br />""\n");//处理换行   
246
247            return sbContent.ToString();
248        }

249
250        /// <summary>
251        /// 对字符串进行Base64编码
252        /// </summary>
253        /// <param name="content"></param>
254        /// <returns></returns>

255        public static String EncodeBase64(String content)
256        {
257            String encode = "";
258            Byte[] bytes = Encoding.Default.GetBytes(content);
259
260            try
261            {
262                encode = Convert.ToBase64String(bytes);
263            }

264            catch
265            {
266                encode = content;
267            }

268
269            return encode;
270        }

271
272        /// <summary>
273        /// 对字符串进行Base64解码
274        /// </summary>
275        /// <param name="content"></param>
276        /// <returns></returns>

277        public static String DecodeBase64(String content)
278        {
279            String decode = "";
280            Byte[] bytes = Convert.FromBase64String(content);
281
282            try
283            {
284                decode = Encoding.Default.GetString(bytes);
285            }

286            catch
287            {
288                decode = content;
289            }

290
291            return decode;
292        }

293
294        /// <summary>
295        /// DES加密
296        /// </summary>
297        /// <param name="pToEncrypt">要加密的字符串</param>
298        /// <param name="sKey">密钥</param>
299        /// <returns></returns>

300        public static String EncodeDES(String pToEncrypt, String sKey)
301        {
302            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
303
304            //把字符串放到byte数组中
305            Byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
306
307            //建立加密对象的密钥和偏移量  
308            //原文使用ASCIIEncoding.ASCII方法的GetBytes方法  
309            //使得输入密码必须输入英文文本  
310            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
311            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
312            MemoryStream ms = new MemoryStream();
313            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
314
315            //Write  the  byte  array  into  the  crypto  stream  
316            //(It  will  end  up  in  the  memory  stream)  
317            cs.Write(inputByteArray, 0, inputByteArray.Length);
318            cs.FlushFinalBlock();
319
320            //Get  the  data  back  from  the  memory  stream,  and  into  a  string  
321            StringBuilder ret = new StringBuilder();
322            foreach (Byte b in ms.ToArray())
323            {
324                //Format  as  hex  
325                ret.AppendFormat("{0:X2}", b);
326            }

327
328            ret.ToString();
329
330            return ret.ToString();
331        }

332
333        /// <summary>
334        /// DES解密
335        /// </summary>
336        /// <param name="pToDecrypt">要解密的字符串</param>
337        /// <param name="sKey">密钥</param>
338        /// <returns></returns>

339        public static String DecodeDES(String pToDecrypt, String sKey)
340        {
341            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
342
343            Byte[] inputByteArray = new Byte[pToDecrypt.Length / 2];
344
345            for (Int32 x = 0; x < pToDecrypt.Length / 2; x++)
346            {
347                Int32 i = (Convert.ToInt32(pToDecrypt.Substring(x * 22), 16));
348                inputByteArray[x] = (Byte)i;
349            }

350
351            //建立加密对象的密钥和偏移量,此值重要,不能修改  
352            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
353            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
354            MemoryStream ms = new MemoryStream();
355            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
356
357            //Flush  the  data  through  the  crypto  stream  into  the  memory  stream  
358            cs.Write(inputByteArray, 0, inputByteArray.Length);
359            cs.FlushFinalBlock();
360
361            //Get  the  decrypted  data  back  from  the  memory  stream  
362            return Encoding.Default.GetString(ms.ToArray());
363        }

364
365        /// <summary>
366        /// DES与Base64组合加密
367        /// </summary>
368        /// <param name="data"></param>
369        /// <param name="key"></param>
370        /// <returns></returns>

371        public static String EncodeDESAndBase64(String data, String key)
372        {
373            Byte[] byKey = Encoding.Default.GetBytes(key);
374            Byte[] byIV = Encoding.Default.GetBytes(key);
375
376            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
377            Int32 i = cryptoProvider.KeySize;
378            MemoryStream ms = new MemoryStream();
379            CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
380
381            StreamWriter sw = new StreamWriter(cst);
382            cst.Write(System.Text.Encoding.Default.GetBytes(data), 0, System.Text.Encoding.Default.GetByteCount(data));
383            sw.Flush();
384            cst.FlushFinalBlock();
385            sw.Flush();
386
387            return Convert.ToBase64String(ms.GetBuffer(), 0, (Int32)ms.Length);
388        }

389
390        /// <summary>
391        /// DES与Base64组合解密
392        /// </summary>
393        /// <param name="data"></param>
394        /// <param name="key"></param>
395        /// <returns></returns>

396        public static String DecodeDESAndBase64(String data, String key)
397        {
398            //把密钥转成二进制数组
399            Byte[] byKey = Encoding.Default.GetBytes(key);
400            Byte[] byIV = Encoding.Default.GetBytes(key);
401
402            Byte[] byEnc;
403
404            try
405            {
406                //base64解码
407                byEnc = Convert.FromBase64String(data);
408            }

409            catch
410            {
411                return null;
412            }

413
414            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
415            MemoryStream ms = new MemoryStream(byEnc);
416            CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
417            StreamReader sr = new StreamReader(cst);
418            Byte[] tmp = new Byte[ms.Length];
419            cst.Read(tmp, 0, tmp.Length);
420            String result = System.Text.Encoding.Default.GetString(tmp);
421
422            return result;
423        }

424
425        /// <summary>
426        /// 数组转换为ArrayList
427        /// </summary>
428        /// <param name="array">待转换的数组</param>
429        /// <returns></returns>

430        public static ArrayList ArrayToArrayList(String[] array)
431        {
432            ArrayList arrayList = new ArrayList();
433
434            for (Int32 i = 0; i < array.Length; i++)
435            {
436                arrayList.Add(array[i]);
437            }

438
439            return arrayList;
440        }

441
442        /// <summary>
443        /// 数组转换为ArrayList
444        /// </summary>
445        /// <param name="array">待转换的数组</param>
446        /// <returns></returns>

447        public static ArrayList ArrayToArrayList(Char[] array)
448        {
449            ArrayList arrayList = new ArrayList();
450
451            for (Int32 i = 0; i < array.Length; i++)
452            {
453                arrayList.Add(array[i]);
454            }

455
456            return arrayList;
457        }

458
459        /// <summary>
460        /// 截断字符串,截断结果的长度将不会超过制定的最大长度
461        /// </summary>
462        /// <param name="strContent"></param>
463        /// <param name="intMaxLength"></param>
464        /// <returns></returns>

465        public static String CompressString(String strContent, Int32 intMaxLength)
466        {
467            return CompressString(strContent, intMaxLength, true);
468        }

469
470        /// <summary>
471        /// 截断字符串,截断结果的长度将不会超过制定的最大长度,并且可以指定是否添加省略号
472        /// </summary>
473        /// <param name="strContent"></param>
474        /// <param name="intMaxLength"></param>
475        /// <param name="appendSuffix"></param>
476        /// <returns></returns>

477        public static String CompressString(String strContent, Int32 intMaxLength, Boolean appendSuffix)
478        {
479            if (String.IsNullOrEmpty(strContent))
480            {
481                return String.Empty;
482            }

483            else
484            {
485                int intUnicodeLength = 0;
486                int intCharCount = 0;
487                for (Int32 i = 0; i < strContent.Length && intUnicodeLength < intMaxLength; i++)
488                {
489                    if (strContent[i] > 255)
490                        intUnicodeLength += 2;
491                    else
492                        intUnicodeLength++;
493
494                    intCharCount++;
495                }

496
497                if (intUnicodeLength >= intMaxLength)
498                {
499                    if (appendSuffix)
500                    {
501                        return strContent.Substring(0, intCharCount) + "";
502                    }

503                    else
504                    {
505                        return strContent.Substring(0, intCharCount);
506                    }

507                }

508                else
509                {
510                    return strContent;
511                }

512            }

513        }

514
515        /// <summary>
516        /// 去掉字符串中的所有空格
517        /// </summary>
518        /// <param name="HtmlText"></param>
519        /// <returns></returns>

520        public static String DropBlanks(string HtmlText)
521        {
522            if (!String.IsNullOrEmpty(HtmlText))
523            {
524                System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"[\s| ]", System.Text.RegularExpressions.RegexOptions.Singleline | System.Text.RegularExpressions.RegexOptions.Compiled);
525                return reg.Replace(HtmlText, string.Empty).Replace("&nbsp;"" ");
526            }

527            else
528            {
529                return String.Empty;
530            }

531        }

532
533        /// <summary>
534        /// 去除Html"标签"
535        /// </summary>
536        /// <param name="HtmlText"></param>
537        /// <returns></returns>

538        public static String DropHtmlTags(string HtmlText)
539        {
540            if (string.IsNullOrEmpty(HtmlText))
541            {
542                return String.Empty;
543            }

544            else
545            {
546                System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"<.*?>", System.Text.RegularExpressions.RegexOptions.Singleline | System.Text.RegularExpressions.RegexOptions.Compiled);
547                return reg.Replace(HtmlText, string.Empty);
548            }

549        }

550
551        /// <summary>
552        /// 发送邮件(账户友好名称为:“价值中国网”)
553        /// </summary>
554        /// <param name="userID">邮件发送目的用户ID</param>
555        /// <param name="subject">邮件主题</param>
556        /// <param name="body">邮件内容</param>
557        /// <returns></returns>

558        public static Boolean SendMail(Int32 userID, String subject, String body)
559        {
560            SqlParameter[] para = new SqlParameter[1];
561            para[0= new SqlParameter("@ID", SqlDbType.Int, 4);
562            para[0].Value = userID;
563
564            String sqlStr = "SELECT Email FROM huiyuan WHERE [ID] = @ID";
565
566            Object objEmail = SqlHelper.ExecuteScalar(WebConfig.ConnStrWWW, CommandType.Text, sqlStr, para);
567
568            if (objEmail != null)
569            {
570                return SendMail("价值中国网", objEmail.ToString(), subject, body);
571            }

572
573            return false;
574        }

575
576        /// <summary>
577        /// 发送邮件(账户友好名称为:“价值中国网”)
578        /// </summary>
579        /// <param name="toEmail">邮件发送目的Email</param>
580        /// <param name="subject">邮件主题</param>
581        /// <param name="body">邮件内容</param>
582        /// <returns></returns>

583        public static Boolean SendMail(String toEmail, String subject, String body)
584        {
585            return SendMail("价值中国网", toEmail, subject, body);
586        }

587
588        /// <summary>
589        /// 发送邮件
590        /// </summary>
591        /// <param name="fromFriendlyName">收件人看到的友好名称</param>
592        /// <param name="toEmail">邮件发送目的Email</param>
593        /// <param name="subject">邮件主题</param>
594        /// <param name="body">邮件内容</param>
595        /// <returns></returns>

596        public static Boolean SendMail(String fromFriendlyName, String toEmail, String subject, String body)
597        {
598            return SendMail(fromFriendlyName, WebConfig.SMTPMailAccount, toEmail, subject, body);
599        }

600
601        /// <summary>
602        /// 发送邮件
603        /// </summary>
604        /// <param name="fromFriendlyName">收件人看到的友好名称</param>
605        /// <param name="fromFriendlyMail">收件人看到的友好Email</param>
606        /// <param name="toEmail">邮件发送目的Email</param>
607        /// <param name="subject">邮件主题</param>
608        /// <param name="body">邮件内容</param>
609        /// <returns></returns>

610        public static Boolean SendMail(String fromFriendlyName, String fromFriendlyMail, String toEmail, String subject, String body)
611        {
612            Boolean sendResult = false;
613
614            String fromTrueUser = WebConfig.SMTPMailAccount.Substring(0, WebConfig.SMTPMailAccount.IndexOf('@'));
615            String fromTrueDomain = WebConfig.SMTPMailAccount.Substring(WebConfig.SMTPMailAccount.IndexOf('@'+ 1, WebConfig.SMTPMailAccount.Length - fromTrueUser.Length - 1);
616
617            String fromUser = fromFriendlyMail.Substring(0, fromFriendlyMail.IndexOf('@'));
618            String fromDomain = fromFriendlyMail.Substring(fromFriendlyMail.IndexOf('@'+ 1, fromFriendlyMail.Length - fromUser.Length - 1);
619
620            Smtp smtpServer = new Smtp();
621            smtpServer.UseAuthentication = true;
622            smtpServer.Server = WebConfig.SMTPServerAddress;
623            smtpServer.Username = WebConfig.SMTPUserName;
624            smtpServer.Password = WebConfig.SMTPPassword;
625            smtpServer.MailFrom = new MailAddress(fromFriendlyName, fromTrueUser, fromTrueDomain);
626
627            StringBuilder sbMailBody = new StringBuilder();
628            sbMailBody.Append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" /><body>");
629            sbMailBody.Append(body);
630            sbMailBody.Append("</body></html>");
631
632            MessageStream msgStream = new MessageStream();
633            msgStream.Type = "text/html";
634            msgStream.From.Domain = fromDomain;
635            msgStream.From.User = fromUser;
636            msgStream.From.Friendly = fromFriendlyName;
637            msgStream.To.Add(new MailAddress(toEmail));
638
639            msgStream.Charset = "gb2312";
640            //以下各种时间格式都会造成用户收到的邮件时间不准,暂时没有好的解决办法
641            //msgStream.Date = DateTime.Now.ToString("r") + " +0800";
642            //msgStream.Date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
643            //msgStream.Date = DateTime.Now.ToString("g");
644            //msgStream.Date = DateTime.Now.ToString();
645            msgStream.Mailer = "www.chinavalue.net";
646
647            msgStream.Subject = subject;
648            msgStream.Text = sbMailBody.ToString();
649
650            try
651            {
652                smtpServer.Send(msgStream);
653                smtpServer.Close();
654
655                sendResult = true;
656            }

657            catch (ProtocolException exProtocol)
658            {
659                //TODO: Log exception
660                Utility.LogInfo("ChinaValue.Info.Common.SendMail Error", exProtocol.ToString());
661            }

662            catch (SocketException exSocket)
663            {
664                //TODO: Log exception
665                Utility.LogInfo("ChinaValue.Info.Common.SendMail Error", exSocket.ToString());
666            }

667            catch (IOException exIO)
668            {
669                //TODO: Log IOException
670                Utility.LogInfo("ChinaValue.Info.Common.SendMail Error", exIO.ToString());
671            }

672            catch (ArgumentException exArg)
673            {
674                //TODO: Log Argument Exception
675                Utility.LogInfo("ChinaValue.Info.Common.SendMail Error", exArg.ToString());
676            }

677
678            return sendResult;
679        }

680
681        /// <summary>
682        /// 发送站内信息
683        /// </summary>
684        /// <param name="intFromUserId">发送用户的ID</param>
685        /// <param name="intToUserId">接收用户的ID</param>
686        /// <param name="msgSubject">消息标题</param>
687        /// <param name="msgBody">消息内容</param>
688        /// <returns></returns>

689        public static Boolean SendMessage(Int32 fromUserID, Int32 toUserID, String msgSubject, String msgBody)
690        {
691            return SendMessage(fromUserID, toUserID, msgSubject, msgBody, String.Empty);
692        }

693
694        /// <summary>
695        /// 发送系统消息
696        /// </summary>
697        /// <param name="toUserID">接收用户的ID</param>
698        /// <param name="msgSubject">消息标题</param>
699        /// <param name="msgBody">消息内容</param>
700        /// <returns></returns>

701        public static Boolean SendMessage(Int32 toUserID, String msgSubject, String msgBody)
702        {
703            return SendMessage(0, toUserID, msgSubject, msgBody, "价值中国");
704        }

705
706        /// <summary>
707        /// 发送站内信息
708        /// </summary>
709        /// <param name="fromUserID">发送用户的ID</param>
710        /// <param name="toUserID">接收用户的ID</param>
711        /// <param name="msgSubject">消息标题</param>
712        /// <param name="msgBody">消息内容</param>
713        /// <param name="systemUserName">系统消息的发送者姓名</param>
714        /// <returns></returns>

715        public static Boolean SendMessage(Int32 fromUserID, Int32 toUserID, String msgSubject, String msgBody, String systemUserName)
716        {
717            SqlParameter[] para = new SqlParameter[5];
718            para[0= new SqlParameter("@title", SqlDbType.NText);
719            para[0].Value = msgSubject;
720            para[1= new SqlParameter("@content", SqlDbType.NText);
721            para[1].Value = msgBody;
722            para[2= new SqlParameter("@toUserID", SqlDbType.Int, 4);
723            para[2].Value = toUserID;
724            para[3= new SqlParameter("@fromUserID", SqlDbType.Int, 4);
725            para[3].Value = fromUserID;
726            para[4= new SqlParameter("@systemUserName", SqlDbType.NVarChar, 20);
727            para[4].Value = systemUserName;
728
729            if (SqlHelper.ExecuteNonQuery(WebConfig.DBConnectionString, CommandType.StoredProcedure, "pr_Message_Send", para) > 0)
730            {
731                return true;
732            }

733
734            return false;
735        }

736
737        /// <summary>
738        /// 发送站内消息 + Email
739        /// </summary>
740        /// <param name="toUserID">收件人ID</param>
741        /// <param name="subject">消息主题</param>
742        /// <param name="body">消息内容</param>
743        /// <returns></returns>

744        public static Boolean SendMailAndMessage(Int32 toUserID, String subject, String body)
745        {
746            return SendMail(toUserID, subject, body) & SendMessage(toUserID, subject, body);
747        }

748
749        /// <summary>
750        /// 清除Word冗余格式
751        /// </summary>
752        /// <param name="str"></param>
753        /// <returns></returns>

754        public static string CleanWordStyle(String str)
755        {
756            StringCollection sc = new StringCollection();
757
758            // get rid of unnecessary tag spans (comments and title)
759            sc.Add(@"<!--(\w|\W)+?-->");
760            sc.Add(@"<title>(\w|\W)+?</title>");
761
762            // Get rid of classes and styles
763            sc.Add(@"\s?class=\w+");
764            sc.Add(@"\s+style='[^']+'");
765
766            // Get rid of unnecessary tags
767            sc.Add(
768            @"<(meta|link|/?o:|/?style|/?st\d|/?head|/?html|body|/?body|/?span|!\[)[^>]*?>");
769
770            // Get rid of empty paragraph tags
771            sc.Add(@"(<[^>]+>)+&nbsp;(</\w+>)+");
772
773            // remove bizarre v: element attached to <img> tag
774            sc.Add(@"\s+v:\w+=""[^""]+""");
775
776            // remove extra lines
777            sc.Add(@"(\n\r){2,}");
778
779            // remove font tags
780            sc.Add(@"</?font.*?>");
781
782            // remove font tags
783            sc.Add(@"</?b\W+.*?>");
784
785            // remove font tags
786            sc.Add(@"<\?xml.*?>");
787
788            foreach (String s in sc)
789            {
790                str = Regex.Replace(str, s, "", RegexOptions.IgnoreCase | RegexOptions.Multiline);
791            }

792
793            String pattern = @"<p.*?>";
794            Regex reg = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
795            str = reg.Replace(str, "<p>");
796
797            pattern = @"<div.*?>";
798            reg = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
799            str = reg.Replace(str, "<div>");
800
801            return str;
802        }

803
804        /// <summary>
805        /// 检测操作是否已进行,用于限制规定时间内只能进行一次的操作
806        /// </summary>
807        /// <param name="key">用户监测的Cookie、Session键</param>
808        /// <param name="expireTime">下次操作的间隔时间(分钟)</param>
809        /// <param name="userSession">是否启用Session(默认只用Cookie)</param>
810        /// <returns></returns>

811        public static Boolean OperationDone(String key, Int32 expireTime, Boolean userSession)
812        {
813            if (!String.IsNullOrEmpty(CVCookie.Read(key)))  //Cookie最省服务器资源,Cookie存在的情况下,直接返回-1,不再继续
814            {
815                return true;
816            }

817
818            if (userSession)
819            {
820                if (HttpContext.Current.Session[key] != null)
821                {
822                    if (!String.IsNullOrEmpty(HttpContext.Current.Session[key].ToString()))
823                    {
824                        return true;
825                    }

826                }

827            }

828
829            //Cookie、Session的默认值
830            String defaultValue = "1";
831
832            CVCookie.Set(key, defaultValue, expireTime * 60);  //expireTime秒内只能操作一次
833
834            if (userSession)
835            {
836                HttpContext.Current.Session.Timeout = expireTime;
837                HttpContext.Current.Session[key] = defaultValue;  //用Session可以避免Cookie被删除
838            }

839
840            return false;
841        }

842
843        /// <summary>
844        /// 检测操作是否已进行,用于限制规定时间内只能进行一次的操作(Cookie、Session并用)
845        /// </summary>
846        /// <param name="key">用户监测的Cookie、Session键</param>
847        /// <param name="expireTime">下次操作的间隔时间(秒)</param>
848        /// <returns></returns>

849        public static Boolean OperationDone(String key, Int32 expireTime)
850        {
851            return OperationDone(key, expireTime, true);
852        }

853    }

854}
posted @ 2008-04-24 16:28  Happiness...  阅读(737)  评论(0编辑  收藏  举报
Happiness.....