<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:41:04
        文檔

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

        深入Lumisoft.NET組件開發碰到亂碼等問題的解決方法:在Lumisoft.NET組件獲取POP3郵件的時候,發現大多數郵件都能正常獲取,不過對于一些特殊的郵件,好像總是會出現轉換錯誤,或者出現亂碼及部分亂碼現象,有些在標題里面或者郵件接收人地址,而有些則在內容里面,為了更好整理相關的問題,寫了本文,希望對大家
        推薦度:
        導讀深入Lumisoft.NET組件開發碰到亂碼等問題的解決方法:在Lumisoft.NET組件獲取POP3郵件的時候,發現大多數郵件都能正常獲取,不過對于一些特殊的郵件,好像總是會出現轉換錯誤,或者出現亂碼及部分亂碼現象,有些在標題里面或者郵件接收人地址,而有些則在內容里面,為了更好整理相關的問題,寫了本文,希望對大家

        在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);

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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        深入Lumisoft.NET組件開發碰到亂碼等問題的解決方法:在Lumisoft.NET組件獲取POP3郵件的時候,發現大多數郵件都能正常獲取,不過對于一些特殊的郵件,好像總是會出現轉換錯誤,或者出現亂碼及部分亂碼現象,有些在標題里面或者郵件接收人地址,而有些則在內容里面,為了更好整理相關的問題,寫了本文,希望對大家
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 中文字幕亚洲免费无线观看日本| 无遮挡a级毛片免费看| 91香蕉在线观看免费高清| 亚洲AV无码久久精品狠狠爱浪潮| 97在线免费视频| 亚洲国产精品第一区二区| 久久久久久久岛国免费播放 | 黄色免费在线观看网址| 又黄又爽的视频免费看| 男人j进女人p免费视频| 亚洲午夜福利717| 最近高清中文字幕免费| 亚洲人成免费电影| 国产精品无码一区二区三区免费| 爱情岛论坛亚洲品质自拍视频网站| 国产成人精品高清免费| 一级做性色a爰片久久毛片免费| 亚洲动漫精品无码av天堂| 免费无码VA一区二区三区| 四虎必出精品亚洲高清| 免费人妻av无码专区| 国产真人无码作爱免费视频| 久久亚洲AV成人无码国产| 24小时日本在线www免费的| 在线亚洲精品视频| 国产亚洲精品xxx| 日韩不卡免费视频| 猫咪免费人成网站在线观看入口 | 亚洲黄黄黄网站在线观看| 免费看男人j放进女人j免费看| 亚洲精品一卡2卡3卡三卡四卡| 妞干网免费视频观看| 中文字幕免费在线看电影大全| 亚洲黄色在线视频| 又粗又黄又猛又爽大片免费| 一区二区免费视频| 国产成人亚洲精品91专区高清| 亚洲va久久久噜噜噜久久狠狠 | 亚洲爆乳大丰满无码专区| 国产亚洲一区二区在线观看| 国产卡一卡二卡三免费入口 |