我也不清楚给你个例子看看有没有帮助:
我听说这是因为SMTP在传输中,不会对邮件的中文编码自动解码,需要自己手动解码,
如果上面还不能解决的话,还有一种方法,就是先将收到的编码以二进制形式写入文件,再以ascii码的形式将其读出,就可以解决了procedure Tfrm_Get_Mail.NMPOP31Connect(Sender: TObject);
var
  S: String;
  M: Integer;
begin
  frm_Get_Mail.Caption:='已经连接到 '+ADOQuery1['Mail_UserName']+' 在 '+ADOQuery1['Mail_POP3_Host']+'上';
  if NMPOP31.MailCount > 0 then
  begin
    Label1.Caption:='有 '+IntToStr(NMPOP31.MailCount)+' 封信在你的信箱里。';
    if InputQuery('输入一个编号', '接收哪条? (1-'+IntToStr(NMPOP31.MailCount)+')', S) then
    begin
      M := StrToIntDef(S, -1);
      If (M < 0) or (M > NMPOP31.MailCount) then
        ShowMessage('无效的编号')
      else
        ProgressBar1.Max:=100;
        ProgressBar1.Min:=0;
          NMPOP31.GetMailMessage(M);
    end;
    end
  else
    Label1.Caption:='没有邮件.';
end;procedure Tfrm_Get_Mail.NMPOP31DecodeStart(var FileName: String);
var
  S: String;
begin
  S := FileName;
  if InputQuery('保存附件', '文件名?', S) then
    FileName := S;
end;procedure Tfrm_Get_Mail.NMPOP31RetrieveEnd(Sender: TObject);
begin
Memo1.Text := NMPOP31.MailMessage.Body.Text;
  Memo1.lines.add( NMPOP31.MailMessage.Subject);
  Memo1.Lines.Add(NMPOP31.MailMessage.From);
  Label1.Caption:='接收完毕';