如何解决 Indy 的 IdPOP3 和 IdMessage 做邮件收发时的乱码问题
用 Indy 的 IdPOP3 和 IdMessage 做邮件收发的程序。
现况如下:
能检测到未读邮件数目,也能正常收取,但收到邮件的名字都是诸如:=?gbk?B?NjY2NrT408q8/rLiytQ=?=这样的乱码(名字仅为数字时正常),邮件内容则为空白,接收源码如下:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
String TempStr;
Button2->Enabled=false;
Memo1->Clear();
for(int i=1;i<=IdPOP31->CheckMessages();i++)
{ IdMessage1->Clear();
try
{ StatusBar1->SimpleText=" 正在收取邮件第 "+IntToStr(i)+" 封邮件......";
//IdMessage1->From->Name="Carny";
IdMessage1->ContentType="text/html";
//IdMessage1->CharSet="US-ASCII";
IdMessage1->CharSet="GB2312";
IdMessage1->ContentTransferEncoding="base64";
IdPOP31->RetrieveHeader(i,IdMessage1);
TempStr=IdMessage1->Subject; //(IdMessage1->Subject);
Memo1->Lines->Add(TempStr);
IdPOP31->Retrieve(i,IdMessage1);
TempStr=IdMessage1->Body->Text;
Memo1->Lines->Add(TempStr);
StatusBar1->SimpleText=" 第 "+IntToStr(i)+" 封邮件接收成功......";
}
catch(...)
{ IdPOP31->DisconnectSocket();
IdPOP31->Disconnect();
StatusBar1->SimpleText=" 收取邮件时发生未知错误!";
Application->MessageBox("收取邮件时发生未知错误!","错误提示",MB_ICONWARNING);
}
}
IdPOP31->Disconnect();
}
//---------------------------------------------------------------------------
问题如下:
收到的邮件名字是 base64 编码吗?怎样能解析出正常的文字?为什么邮件的 Body 收到的是一版空白?
请经验的老兄支招,谢绝灌水,如有可能请给代码示例一下最好,先谢过您了。