idpop31收邮件乱码怎么解决

zhy1450 2009-02-07 01:55:29
我使用Idmessage、idpop3收邮件,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
temps:string;
begin
idpop31.Host:='pop3.sina.com.cn';
IdPOP31.Port:=110;//这个端口号只能是110吗?
idpop31.Username:='inteler';
idpop31.Password:='××××';
idpop31.Connect; //连接服务器
ShowMessage('已连接!');
Label1.Caption :=inttostr(idpop31.CheckMessages);
for i:=1 to idpop31.CheckMessages do
begin
IdMessage1.Clear;
idpop31.Retrieve(i,IdMessage1);
Memo1.Lines.Add(IdMessage1.Subject);//邮件主题是乱码
Memo2.Lines.Add(????????);/如何获取发件人的电子邮件

end;
idpop31.Disconnect;
end;
显示效果如下:

Memo1
=?GB2312?B?1Nq0y8rkyOvTyrz+1vfM4g==?=
=?GB2312?B?1Nq0y8rkyOvTyrz+1vfM4g==?=
=?GB2312?B?1Nq0y8rkyOvTyrz+1vfM4g==?=
=?GB18030?B?1Pi659TGLMvEtKjKobPJtry6vb/VuaTStdGn0KM=?= =?GB18030?B?LTkzMjIgtcTNrNGnw8e2vLrcz+vE7sTjo6E=?=
=?GB18030?B?1Pi659TGLMvEtKjA7bmk0afUui3J5s3ixvPStQ==?= =?GB18030?B?udzA7Tk2MSC1xM2s0afDx7a8utzP68TuxOOjoQ==?=
=?GB18030?B?1Pi659TGLMvEtKjA7bmk0afUui3Cw9POudw=?= =?GB18030?B?wO05NjEgtcTNrNGnw8e2vLrcz+vE7sTjo6E=?=
=?GBK?B?P9XiwO+/tLXEtb0gzP21xLW9?=
=?GBK?B?ysC8zbzR1LVfQUQg1KrP/LzRvdqw2s3RtaXJ7aOsxOO1xLCuyMu+zdTa1eLA76Oh?=
=?GB2312?B?1Nq0y8rkyOvTyrz+1vfM4g==?=
=?GBK?B?ysC8zbzR1LVfQUQgvNHIy9XQwezNqNaqo7rLrbDRsK7Iy7aq1NrV4sDvwcujvw==?=
=?GBK?B?1sfBqtXQxrggX0FEIMWjxOqjrMWjSm9io6HX7tDCw/vG89XQxrjQxc+io6y/7LLp0a/J6sfro6E=?=

请问如何解决:1、邮件乱码问题。2、获取发件人的Email到Memo2?3、端口号只能是110?
...全文
467 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhy911 2009-02-10
  • 打赏
  • 举报
回复
up
zhy1450 2009-02-09
  • 打赏
  • 举报
回复
没人知道怎么做?
zhy1450 2009-02-09
  • 打赏
  • 举报
回复
没有附件哦,分不够我再加
zhy1450 2009-02-09
  • 打赏
  • 举报
回复
if idpop31.CheckMessages>0 then
begin
for i:=0 to idpop31.CheckMessages do
begin
IdMsgSend.Clear;
idpop31.Retrieve(i,IdMsgSend);
temp1:=GetTitle(IdMsgSend.Subject);
ListBox1.Items.Add(temp1);
body[I]:=///邮件正文怎么写?body是字符串数组
liangpei2008 2009-02-08
  • 打赏
  • 举报
回复
对于UTF8编码的,即?=UTF8?B?XXXXXXXXXXXXXXXXXXXX这样的数据用UTF8Decode(DecodeString('XXXXXXXXXXXXX'))
liangpei2008 2009-02-08
  • 打赏
  • 举报
回复

//首先LZ要明白这是什么编码,这是base64编码!
//编码的格式是什么?拿第1行来说=?GB2312?B?1Nq0y8rkyOvTyrz+1vfM4g==?= ,正文部分为"1Nq0y8rkyOvTyrz+1vfM4g==",其它部分仅仅是告诉之编码格式是什么,正文从哪开始什么的!
//知道这些后,可以用字符串处理把正文部分取出,而后用TIdDecoderMime对其解码即可!
//如:
Showmessage(idcdrm1.DecodeString('1Nq0y8rkyOvTyrz+1vfM4g=='));//idcdrm1为TIdDecoderMime的实例
//显示结果为
在此输入邮件主题
无条件为你 2009-02-08
  • 打赏
  • 举报
回复
怎么可能是乱码呢?
发邮件何必要加密呢?
starluck 2009-02-07
  • 打赏
  • 举报
回复

function TEmail_mainfrm.Base64ToString(const Value: string): string;
var
x, y, n, l: Integer;
d: array[0..3] of Byte;
Table : string;
begin
Table :=
#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$3E +#$40
+#$40 +#$40 +#$3F +#$34 +#$35 +#$36 +#$37 +#$38 +#$39 +#$3A +#$3B +#$3C
+#$3D +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$00 +#$01 +#$02 +#$03
+#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$0C +#$0D +#$0E +#$0F
+#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$40 +#$40
+#$40 +#$40 +#$40 +#$40 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$21
+#$22 +#$23 +#$24 +#$25 +#$26 +#$27 +#$28 +#$29 +#$2A +#$2B +#$2C +#$2D
+#$2E +#$2F +#$30 +#$31 +#$32 +#$33 +#$40 +#$40 +#$40 +#$40 +#$40
+#$40;

SetLength(Result, Length(Value));
x := 1;
l := 1;
while x < Length(Value) do
begin
for n := 0 to 3 do
begin
if x > Length(Value) then
d[n] := 64
else
begin
y := Ord(Value[x]);
if (y < 33) or (y > 127) then
d[n] := 64
else
d[n] := Ord(Table[y - 32]);
end;
Inc(x);
end;
Result[l] := Char((D[0] and $3F) shl 2 + (D[1] and $30) shr 4);
Inc(l);
if d[2] <> 64 then
begin
Result[l] := Char((D[1] and $0F) shl 4 + (D[2] and $3C) shr 2);
Inc(l);
if d[3] <> 64 then
begin
Result[l] := Char((D[2] and $03) shl 6 + (D[3] and $3F));
Inc(l);
end;
end;
end;
Dec(l);
SetLength(Result, l);
end;


function TEmail_mainfrm.GetTitle(const Value: string): string;
var
  iPos: integer;
begin
 Result := Value;
ff Copy(Value, 1, 2) <> '=?' then exit;
iPos := Pos('?B?', Value);
Inc(iPos, 3);
Result := Copy(Value, iPos, Length(Value) - iPos - 1);
Result := Base64ToString(Result);
end;



这是转贴
starluck 2009-02-07
  • 打赏
  • 举报
回复

这是BASE64加密的,要解密才行
zhy1450 2009-02-07
  • 打赏
  • 举报
回复
另外补充下:Memo2.Lines.Add(IdMsgSend.From.Text);这样后获取收件人地址是:
inteler@sina.com
inteler@sina.com
inteler@sina.com
sender@5460.cn
sender@5460.cn
sender@5460.cn
w_mten17917@sina.com
=?GBK?B?ysC8zbzR1LUg?= <adsupport@sina.com>
inteler@sina.com
=?GBK?B?ysC8zbzR1LUg?= <adsupport@sina.com>
=?GBK?B?1sfBqtXQxrgg?= <adsupport@sina.com>
怎么处理,我的要求是只显示:inteler@sina.com这种格式的

还有收了邮件后如何把此邮件标记为已读?

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧