以Indy8發信,Outlook express收信,標題及內容是亂碼... |
尚未結案
|
carny
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-02 發送簡訊給我 |
大家好,請教各位先進,因為我信件的內容是以UTF-8來編碼的,可是在以Outlook看信時卻會以Big5來解碼,目前每次都要以檢視/編碼來改變編碼方式才看的到中文,那我該如何設定才會讓Outlook express自動以UTF-8來解碼呢?我目前的設定是:
this->IdMessage1->ContentType = "text/html; charset='UTF-8'";
this->IdMessage1->CharSet = "UTF-8";
this->IdMessage1->ContentTransferEncoding = "CODE64";
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 大家好,請教各位先進,因為我信件的內容是以UTF-8來編碼的,可是在以Outlook看信時卻會以Big5來解碼,目前每次都要以檢視/編碼來改變編碼方式才看的到中文,那我該如何設定才會讓Outlook express自動以UTF-8來解碼呢?我目前的設定是: this->IdMessage1->ContentType = "text/html; charset='UTF-8'"; this->IdMessage1->CharSet = "UTF-8"; this->IdMessage1->ContentTransferEncoding = "CODE64";carny 你好: 請問~~你其他的程式碼方便一起貼上來嗎??< > 我想嘗試看看...< > -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
carny
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-02 發送簡訊給我 |
RaynorPao你好:
先謝謝你的幫忙,其實我就只是使用Indy來單純的發信而已,但是信件的內容是用我們公司同事所開發的一個元件,由資料庫中取出並轉換成UTF-8的格式,目的在於可以支援多國語言的內容,所以關於如何取得UTF-8文字的方法我這邊就無法提供了,以下是我的程式:
this->IdSMTP1->Host = mailServer;
this->IdMessage1->From->Text = mailSender;
this->IdMessage1->From->Name = "Carny";
this->IdMessage1->ContentType = "text/html; charset='UTF-8'";
this->IdMessage1->CharSet = "UTF-8";
this->IdMessage1->ContentTransferEncoding = "CODE64"; try {
this->IdSMTP1->Connect();
}
catch(...){
this->StatusBar1->Panels->Items[2]->Text = " Mail Server can not be Connected";
return;
} TDateTime time = TDateTime::CurrentTime();
AnsiString sql;
// mark sending mail
sql = "UPDATE mail SET send_mail = '1' WHERE send_mail LIKE '0'";
this->workflowDataModule->ExecuteSQL(sql); // select sending mail
sql = "SELECT * FROM mail WHERE send_mail LIKE '1'";
WebDBResultSet* resultSet = this->workflowDataModule->ExecuteQuery(sql);
int count = 0;
while(resultSet->Next()){
AnsiString receiver = resultSet->GetString("receiver_mail");
AnsiString body = resultSet->GetString("body_mail");
AnsiString title = resultSet->GetString("desc_mail");
this->IdMessage1->ClearBody();
this->IdMessage1->Body->Add(WorkflowUtility::ReplaceChar(body,"\n", "
")); this->IdMessage1->Recipients->EMailAddresses = receiver; this->IdMessage1->Subject = title; try{ this->IdMessage1->IsEncoded = false; this->IdSMTP1->Send(this->IdMessage1); } catch(Exception& e){ this->StatusBar1->Panels->Items[2]->Text = e.Message " Mail sent fail."; return; } count ; } this->IdSMTP1->Disconnect(); // delete sending mail sql = "DELETE FROM mail WHERE send_mail LIKE '1'"; this->workflowDataModule->ExecuteSQL(sql); delete resultSet; 再次謝謝你願意幫忙 ><~~~(痛哭流涕中) |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 先謝謝你的幫忙,其實我就只是使用Indy來單純的發信而已,但是信件的內容是用我們公司同事所開發的一個元件,由資料庫中取出並轉換成UTF-8的格式,目的在於可以支援多國語言的內容,所以關於如何取得UTF-8文字的方法我這邊就無法提供了carny 你好: 我用以下的程式碼做測試 ( class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { IdSMTP1->Host="MyHostName"; IdSMTP1->Port=25; IdSMTP1->Username="MyName"; IdSMTP1->Password="MyPassword"; IdMessage1->From->Text="MyEmail"; IdMessage1->From->Name="MyName"; IdMessage1->ContentType="text/html; charset='UTF-8'"; IdMessage1->CharSet="US-ASCII"; // IdMessage1->CharSet="UTF-8"; IdMessage1->ContentTransferEncoding="CODE64"; try { IdSMTP1->Connect(); } catch(...) { ShowMessage("Connect failed"); return; } AnsiString receiver="MyEmail"; AnsiString body="測試測試測試測試測試測試"; AnsiString title="測試測試測試測試測試測試"; IdMessage1->ClearBody(); IdMessage1->Body->Add(body); IdMessage1->Recipients->EMailAddresses=receiver; IdMessage1->Subject=title; try { IdMessage1->IsEncoded=false; IdSMTP1->Send(IdMessage1); } catch(Exception& e) { ShowMessage("Sent failed"); return; } IdSMTP1->Disconnect(); ShowMessage("Sent succeeded"); } 備註: (1)我是用 Indy v9.00.11 做測試的 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
carny
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-02 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao你好: 謝謝你做的測試,可是在我的環境下測的時候,連outlook都是亂碼@@,可能是因為你所發出的內容其實還是Big5的編碼(因為是直接打上去的)。真的謝謝你的測試,謝謝~希望這個問題真的有解@@carny 你好: 我有一個想法~~如果你願意的話,先試試看 就是先把文字由 > 備註: 有關 >
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
carny
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-02 發送簡訊給我 |
引言:
-------------------------------------------------------------------------------- carny 你好:
我有一個想法~~如果你願意的話,先試試看
就是先把文字由 UTF-8(Unicode) 轉成 ANSI
然後再把 Mail 發出去,看看這樣行不行?? -------------------------------------------------------------------------------- RaynorPao你好:
謝謝你的建議,我有試著把他轉成ANSI了,但是收到的信還是亂碼@@,而且在Outlook express中改變編碼成UTF-8後,也無法正確看到中文了
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
carny
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-02 發送簡訊給我 |
引言:carny 你好: 請問你是怎麼轉的呢??RaynorPao你好: 我是用AnsiString的WideChar 來轉的 下面是我的Code: AnsiString title = resultSet->GetString("desc_mail"); int iWCBuf=title.WideCharBufSize(); wchar_t wsz[512]={0}; title.WideChar(wsz, iWCBuf); title = AnsiString(wsz); this->IdMessage1->Subject = title; |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao你好: 我是用AnsiString的WideChar 來轉的 下面是我的Code: AnsiString title = resultSet->GetString("desc_mail"); int iWCBuf=title.WideCharBufSize(); wchar_t wsz[512]={0}; title.WideChar(wsz, iWCBuf); title = AnsiString(wsz); this->IdMessage1->Subject = title;carny 你好: 你方便把你的 UTF-8 的中文字(取一行就好) 先儲存成一個檔案,然後放到網頁上來,我再試試看 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
carny
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-02 發送簡訊給我 |
引言: carny 你好: 你方便把你的 UTF-8 的中文字(取一行就好) 先儲存成一個檔案,然後放到網頁上來,我再試試看RaynorPao你好: 不好意思這麼久才回覆,其實你如果有UltraEdit9.0的話,是可以用他來轉一般的文字檔成為UTF-8的格式,方法為 File / Conversion / ANSI to UTF-8;另外Windows2000的筆記本(NotePad)也可以轉,只要另存新檔時在編碼選UTF-8即可。因為我不知道怎麼把檔案上傳到這個站,也沒有外面的免費網頁的位置,所以你如果還需要我做出來的UTF-8的檔案的話,你可以把你的e-mail告訴我,我再寄過去給你,真的謝謝你的幫忙。 對了,之前我有去追過 > |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao你好: 不好意思這麼久才回覆,其實你如果有UltraEdit9.0的話,是可以用他來轉一般的文字檔成為UTF-8的格式,方法為 File / Conversion / ANSI to UTF-8;另外Windows2000的筆記本(NotePad)也可以轉,只要另存新檔時在編碼選UTF-8即可。因為我不知道怎麼把檔案上傳到這個站,也沒有外面的免費網頁的位置,所以你如果還需要我做出來的UTF-8的檔案的話,你可以把你的e-mail告訴我,我再寄過去給你,真的謝謝你的幫忙。 對了,之前我有去追過 > >>< face="Verdana, Arial, Helvetica">carny 你好: (1)如果安裝 Indy v9.00.11 會發生問題的話,請先參考以下連結文章 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25182 (2)如何將檔案上傳到網站來?? 請參考以下連結文章 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
carny
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-02 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao你好: 我已經上傳了一個以UTF-8扁碼的檔案上來了,就在: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26695 謝謝你的幫忙 >>< face="Verdana, Arial, Helvetica"> carny 你好: 以下是 UTF8 轉 BIG5 的範例程式碼(參考看看) 不過~~我發現日文的部分轉不出來~~ < class="code"> TMemoryStream *msUTF8=new TMemoryStream; msUTF8->LoadFromFile("UTF_8_File.txt"); char szUTF8[1024]; wchar_t wszUNICODE[1024]; char szBIG5[1024]; msUTF8->Position=0; msUTF8->Read(szUTF8, msUTF8->Size); MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, wszUNICODE, 1024); WideCharToMultiByte(CP_ACP, 0, wszUNICODE, -1, szBIG5, 1024, NULL, NULL); TMemoryStream *msBIG5=new TMemoryStream; msBIG5->Size=strlen(szBIG5); msBIG5->Write(szBIG5, msBIG5->Size); msBIG5->SaveToFile("BIG_5_File.txt"); delete msBIG5; delete msUTF8; -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |