国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 深入Lumisoft.NET組件開發碰到亂碼等問題的解決方法

深入Lumisoft.NET組件開發碰到亂碼等問題的解決方法

2019-11-06 10:36asp.net教程網 ASP.NET教程

本篇文章介紹了,在Lumisoft.NET組件開發中碰到亂碼等一些問題的解決方法。需要的朋友參考下

在Lumisoft.NET組件獲取POP3郵件的時候,發現大多數郵件都能正常獲取,不過對于一些特殊的郵件,好像總是會出現轉換錯誤,或者出現亂碼及部分亂碼現象,有些在標題里面或者郵件接收人地址,而有些則在內容里面,為了更好整理相關的問題,寫了本文,希望對大家使用該組件有一定的幫助作用。

1、 日期轉換出錯問題。
錯誤信息:[2013-05-04 10:49:03]    轉換郵件的Date出錯:賬號wuhuacong@163.com 郵件標題:ICP???????????????????????wuhuacong)

LumiSoft.Net.ParseException: Header field 'Date' parsing failed.

   在 LumiSoft.Net.Mail.Mail_Message.get_Date()

   在 WHC.PlugInService.Pop3Helper.Receive() 位置 ......\Pop3Helper.cs:行號 160

錯誤原因:由于郵件格式的日期內容格式不同,導致無法正常解析。如一般的格式為下面

復制代碼代碼如下:

Message-ID: <d74841c5887b4df692ebdb7ec7802054@4782e72954a24cc89535840ea2e5da5b>
Date: Fri, 26 Apr 2013 08:56:52 GMT
Mime-Version: 1.0
From: "wuhuacong2013@163.com" <wuhuacong2013@163.com>
To: "wuhuacong@96900.com.cn" <wuhuacong@96900.com.cn>


有些郵件日期格式是2013-05-06 19:01:44,則Lumisoft組件無法解析,需要跟蹤到他的郵件日期處理的代碼,然后進行修改才可以實現正常的郵件日期解析了。

 

官方的代碼如下所示

復制代碼代碼如下:


public DateTime Date
        {
            get{
                if(this.IsDisposed){
                    throw new ObjectDisposedException(this.GetType().Name);
                }

 

                MIME_h h = this.Header.GetFirst("Date");
                if(h != null){
                    try{
                        return MIME_Utils.ParseRfc2822DateTime(((MIME_h_Unstructured)h).Value);
                    }
                    catch{
                        throw new ParseException("Header field 'Date' parsing failed.");
                    }
                }
                else{
                    return DateTime.MinValue;
                }
            }

            set{
                if(this.IsDisposed){
                    throw new ObjectDisposedException(this.GetType().Name);
                }

                if(value == DateTime.MinValue){
                    this.Header.RemoveAll("Date");
                }
                else{
                    MIME_h h = this.Header.GetFirst("Date");
                    if(h == null){
                        this.Header.Add(new MIME_h_Unstructured("Date",MIME_Utils.DateTimeToRfc2822(value)));
                    }
                    else{
                        this.Header.ReplaceFirst(new MIME_h_Unstructured("Date",MIME_Utils.DateTimeToRfc2822(value)));
                    }
                }
            }
        }


需要增加對普通日期格式的修改,修改后的代碼如下所示

復制代碼代碼如下:


public DateTime Date
        {
            get{
                if(this.IsDisposed){
                    throw new ObjectDisposedException(this.GetType().Name);
                }

 

                MIME_h h = this.Header.GetFirst("Date");
                if(h != null){
                    try{
                        return MIME_Utils.ParseRfc2822DateTime(((MIME_h_Unstructured)h).Value);
                    }
                    catch{

                        //嘗試轉換正常的日期
                        DateTime dt;
                        string dateString = ((MIME_h_Unstructured)h).Value;
                        bool success = DateTime.TryParse(dateString, out dt);
                        if (success)
                        {
                            return dt;
                        }
                        else
                        {
                            throw new ParseException("Header field 'Date' parsing failed.");
                        }
                    }                    
                }
                else{
                    return DateTime.MinValue;
                }
            }

            set{
                if(this.IsDisposed){
                    throw new ObjectDisposedException(this.GetType().Name);
                }

                if(value == DateTime.MinValue){
                    this.Header.RemoveAll("Date");
                }
                else{
                    MIME_h h = this.Header.GetFirst("Date");
                    if(h == null){
                        this.Header.Add(new MIME_h_Unstructured("Date",MIME_Utils.DateTimeToRfc2822(value)));
                    }
                    else{
                        this.Header.ReplaceFirst(new MIME_h_Unstructured("Date",MIME_Utils.DateTimeToRfc2822(value)));
                    }
                }
            }
        }


2、由于意外的數據包格式,握手失敗
錯誤信息:[2013-05-04 10:13:54]    System.IO.IOException: 由于意外的數據包格式,握手失敗。

 

   在 LumiSoft.Net.TCP.TCP_Client.Connect(String host, Int32 port, Boolean ssl)

   在 WHC.PlugInService.SmtpHelper.Send() 位置 ........\SmtpHelper.cs:行號 123

   在 WHC.PlugInService.SendMailService.DataThreadHandle(MailSendConfigInfo info) 位置 ...............\SendMailService.cs:行號 66

錯誤原因:由于POP3的配置端口不正確導致,一般的端口必須嚴格按照正常的來填寫。

郵件SMTP和POP3常用配置說明:
 

郵箱

Smtp服務器

Smtp端口

POP3服務器

POP3端口

使用SSL

Gmail.com

smtp.gmail.com

465

pop.gmail.com

995

true

QQ.com

smtp.qq.com

25

pop.qq.com

110

true

163.com

smtp.163.com

25

pop.163.com

110

false

Sina.com

smtp.sina.com

25

pop.sina.com

110

false

其他

smtp.test.com

25

pop.test.com

110

false

 

 3、郵件標題亂碼問題

錯誤信息:標題出現類似=?utf-8?B?5rWL6K+V6YKu5Lu2?=

錯誤原因:這個是因為編碼的問題,其中=?utf-8?B是表示該段字符為UTF-8的格式,后面的是base64格式的內容。除了utf-8,還可以出現gb2312或者ibm-euccn等格式。為了轉換上面的編碼問題,我寫了一個轉碼函數,如下所示。

復制代碼代碼如下:


private string DecodeString(string input)
        {
            string regex = @"=\?(?<encode>.*?)\?B\?(?<body>.*?)\?=";

 

            Regex re = new Regex(regex, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
            MatchCollection mcs = re.Matches(input);
            foreach (Match mc in mcs)
            {
                string encode = mc.Groups["encode"].Value;
                if (!string.IsNullOrEmpty(encode))
                {
                    if (encode.ToLower().Contains("euccn") || encode.ToLower().Contains("euc-cn") ||
                        encode.ToLower().Contains("gbk"))
                    {
                        encode = "gb2312";
                    }
                    else if (encode.ToLower().Contains("utf8"))
                    {
                        encode = "utf-8";
                    }

                    string body = mc.Groups["body"].Value;
                    byte[] bytes = Convert.FromBase64String(body);
                    string result = Encoding.GetEncoding(encode).GetString(bytes);

                    input = input.Replace(mc.Value, result);
                }
            }
            return input;
        }


如可以通過代碼吧標題進行轉碼解析

復制代碼代碼如下:

info.Title = DecodeString(mime_header.Subject);


轉碼后,標題和相關的內容都可以正常顯示了。

 

除了上面的轉碼操作,還有一種更好的方法,能夠使得郵件相關信息正常顯示。

因為通過分析了解到,由于Lumisoft的Mail_Message.ParseFromByte函數默認只是以UTF8轉換字節,一旦字節為GB2312格式,就會發生轉換亂碼問題,因此先經過Default編碼轉換,然后再以UTF8獲取字節,即可正常轉換郵件頭部。

復制代碼代碼如下:

byte[] utf8Bytes = Encoding.UTF8.GetBytes(message.HeaderToString());
Mail_Message mime_header = Mail_Message.ParseFromByte(utf8Bytes);


這樣獲取到的標題,以及郵件頭部等信息,都是正常的了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: av在线网址观看 | 国产精品一区久久久 | 欧美精品亚洲 | 国产精品日韩欧美一区二区三区 | 久久免费国产 | 日韩av片无码一区二区不卡电影 | 精品一二三四区 | 国产一区二区三区免费视频 | 性色aⅴ免费视频 | 免费一区二区三区四区 | 激情五月婷婷丁香 | 黄色av影视| 欧洲精品在线观看 | 日本在线免费观看 | 成人男女啪啪免费观软件 | 欧美亚洲综合久久 | 免费观看一区二区三区毛片软件 | 君岛美绪一区二区三区在线视频 | 99亚洲 | 亚洲永久免费视频 | 亚洲人成在线播放 | 性视频网站免费 | 久久国产综合 | 精品国精品国产自在久不卡 | 在线黄色网 | 欧美激情二区 | 国产精品尤物麻豆一区二区三区 | 国产精品成人av | 黄片毛片 | 女教师高潮叫床视频在线观看 | 日韩欧美~中文字幕 | 精品久久久久久久久久久久久久 | 国产色视频一区 | 一级片在线播放 | 综合久久99 | 日韩色区 | 国产超碰人人爽人人做人人爱 | 一级电影免费在线观看 | 不卡av一区二区三区 | 黄视频网站在线观看 | 免费成人av片 |