哪位高手能提供用indy编写的邮件客户端的例程,indy自己带了一个,但是不能进行邮件信息的解码,我现在就想获得解码部分的实例,如果indy没有解码功能,请高手告诉我一下,我就转向其他方向了。
解决方案 »
- 请问有朋友做过飞鸽传书吗?难度大不大?
- 一个很头痛的问题
- 请问adoquery控件为何没有parambyname方法呀?我该如何创建动态查询参数??
- [共享]在程序中执行动态生成的Delphi代码的方法 兼散分
- 在DBGrid中修改字段值,如何保证某字段值的唯一性?
- 关于网络速度的监控?
- 求救高手,程序啟動問題,急,可能要走人了!
- 跪求ApplicationStudio,请发给我([email protected]),谢谢
- 我在SQLServer2000中为表建的索引为何在ADODataSet中的indexName中看不出来?
- 急求(基于C/S的实验室教学与考试系统的设计与开发)的delphi代码
- 请问如何取得windows文件的后缀名?
- 应该采用什么技术?
我自己实现了编码,但是还没有实现解码~~~没时间啊~~~`
Subject: =?gb2312?Q?=BD=F4=BC=B1=A3=A1e=D3=D1=CD=F8=D5=F7=C5=D0=E3=C4=D0=CA=BF=A3=A1?=
类似这种编码,怎么办
属性 Body
ContentTransferEncoding
IsEncoded
ContentType
Encoding meMIME 使用MIME 编码 meUU UUEncode编码
没写过,感觉应该是支持编码的
TIdUUDecoder;
TIdQuotedPrintableDecoder;看看这三个东西,你应该就明白了,MIME 主要就是这个三种编码
它里面有
if LEncodingStartPos = 0 then begin
LEncodingStartPos := PosIdx('=?WINDOWS', UpperCase(Header), 1); {do not localize}
blWindows:=LEncodingStartPos>0;
end;
你加上
if LEncodingStartPos = 0 then begin
LEncodingStartPos := PosIdx('=?GB2312', UpperCase(Header), 1); {do not localize}
blGb2312:=LEncodingStartPos>0;
end;
等等其他的编码就可以了
我就是这样改的注:我的INDY 版本为10的。
但是我现在研究下来,嵌入的规则完全是有boundary决定的,而且嵌入的图片有的还没有content-id,我就不明白indy是如何实现他们的关联的,而且看着TIdAttachment,TIdText的少得可怜的属性和方法,真是不知道到底怎么来用。
其实问题就是
1、如何判断一个附件是内嵌的(嵌入的规则应该是由boundary决定,不知怎么访问,使用msg.MIMEBoundary.Boundary;基本都是空串)
2、如何获得附件的content-id,其实应该不难,通过TIdAttachment.Headers应该可以访问到,但是我用indy的组件一个都得不到,全为空(源代码中明明有的),其他的mail组件倒是获得过,就是不放心
获取content-id
tmpContentId:=TIdAttachment(FReceiveMsg.MessageParts.Items[intIndex]).ContentID;
你看一下IdMessageClient单元里面的ProcessAttachment过程中有没有
ContentID := AMsg.Headers.Values['Content-ID']; {do not localize}这个语句,有的话可以这样取,没有就要你自己取了