全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2448
推到 Plurk!
推到 Facebook!

使用Indy 發mail,如果主旨超過24個中文字,內文自動會多一些訊息

答題得分者是:artist1002
homing927
一般會員


發表:1
回覆:1
積分:0
註冊:2003-05-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-14 12:22:17 IP:210.201.xxx.xxx 未訂閱
大家好,不知大家在使用Indy發mail時,是否有和小弟一樣的問題: 當使用Indy 發mail,如果主旨超過24個中文字,內文自動會多以下訊息: =?Big5?B?pK0=?= To: xxx@xxx.xxx.xx Date: Mon, 14 Jul 2003 11:47:13 0800 X-Priority: 3 X-Library: Indy 8.0.25 請各位高手解答,謝謝。
artist1002
高階會員


發表:2
回覆:155
積分:151
註冊:2002-09-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-14 13:46:54 IP:211.76.xxx.xxx 未訂閱
這個問題我也有碰到過, 我當時是使用Indy 9.0.11 會有這樣的Bug 根據我的測試, 原因是因為Indy的Message在遇到超過46個字元之後的base64編碼, 會產生換行. 而Indy在這個情況下會出現不正確的的換行, 導致在主旨後面的信件不正確, 閱讀E-mail的程式就會把不正確換行之後的所有文字都認為是內文.所以就會出現如你遇到的(內文自動多出訊息). 現在Indy出到9.0.14,不知道還有沒有這樣的錯誤. 解決方法:我當時的解決方式是自己做主旨的編碼.程式碼如下(我是用BCB的)
temp=IdMessage->Subject;
if (temp.Length()>46)
{
  if ((IdMessage->CharSet.LowerCase()=="big-5")||(IdMessage->CharSet.LowerCase()=="chinesebig5")||(IdMessage->CharSet.LowerCase()=="big5"))
  {
    for (i=1;i<=temp.Length();i  )
      if (temp.IsLeadByte(i))
        break;
    if (i<=temp.Length())
    {
      IdMessage->Subject="";
      for (i=1,j=1;i<=temp.Length();i  ,j  )
      {
        if (j==46)
        {
          if (i>46)
            IdMessage->Subject ="\n\t"; //就是這裡,Indy只有換行但是沒有tab的符號
            IdMessage->Subject ="=?big5?B?" B64Encode(temp.SubString(i-45,46)) "?=";
            j=0;
        }
      }
      if (i>46)
        IdMessage->Subject ="\n\t";
      IdMessage->Subject ="=?big5?B?" B64Encode(temp.SubString(i-j 1,j)) "?=";
      if (IdMessage->Subject=="")
        IdMessage->Subject=temp;
    }
    else
      IdMessage->Subject=temp;
  }
  else
    IdMessage->Subject=temp;
}
else
  IdMessage->Subject=temp;
發表人 - artist1002 於 2003/07/14 13:50:16
系統時間:2024-11-23 11:39:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!