婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入Lumisoft.NET組件開發(fā)碰到亂碼等問題的解決方法

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

熱門標簽:萊蕪外呼電銷機器人價格 長春呼叫中心外呼系統(tǒng)哪家好 地圖標注和認領 電銷語音自動機器人 戶外地圖標注軟件手機哪個好用 智能電話營銷外呼系統(tǒng) 凱立德導航官網(wǎng)地圖標注 鄭州400電話辦理 聯(lián)通 五常地圖標注

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

1、 日期轉(zhuǎn)換出錯問題。
錯誤信息:[2013-05-04 10:49:03]    轉(zhuǎn)換郵件的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

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

復制代碼 代碼如下:

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組件無法解析,需要跟蹤到他的郵件日期處理的代碼,然后進行修改才可以實現(xiàn)正常的郵件日期解析了。

官方的代碼如下所示

復制代碼 代碼如下:

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{

                        //嘗試轉(zhuǎn)換正常的日期
                        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、由于意外的數(shù)據(jù)包格式,握手失敗
錯誤信息:[2013-05-04 10:13:54]    System.IO.IOException: 由于意外的數(shù)據(jù)包格式,握手失敗。

   在 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、郵件標題亂碼問題

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

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

復制代碼 代碼如下:

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;
        }


如可以通過代碼吧標題進行轉(zhuǎn)碼解析
復制代碼 代碼如下:

info.Title = DecodeString(mime_header.Subject);

轉(zhuǎn)碼后,標題和相關的內(nèi)容都可以正常顯示了。

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

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

復制代碼 代碼如下:

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

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

標簽:西藏 福州 湖州 西寧 宣城 紅河 衢州 岳陽

巨人網(wǎng)絡通訊聲明:本文標題《深入Lumisoft.NET組件開發(fā)碰到亂碼等問題的解決方法》,本文關鍵詞  深入,Lumisoft.NET,組件,開發(fā),;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入Lumisoft.NET組件開發(fā)碰到亂碼等問題的解決方法》相關的同類信息!
  • 本頁收集關于深入Lumisoft.NET組件開發(fā)碰到亂碼等問題的解決方法的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 伊通| 兴义市| 七台河市| 宣城市| 那坡县| 辽阳市| 改则县| 邳州市| 景东| 南阳市| 娱乐| 米易县| 繁昌县| 阳朔县| 宁波市| 中山市| 临汾市| 泾川县| 基隆市| 靖安县| 柳州市| 象州县| 临湘市| 浦江县| 密云县| 界首市| 家居| 西宁市| 望城县| 库尔勒市| 延长县| 额尔古纳市| 汉中市| 张家港市| 巴塘县| 乌鲁木齐县| 桃园市| 张家港市| 旬阳县| 榆林市| 静宁县|