哪位高手能提供用indy编写的邮件客户端的例程,indy自己带了一个,但是不能进行邮件信息的解码,我现在就想获得解码部分的实例,如果indy没有解码功能,请高手告诉我一下,我就转向其他方向了。

解决方案 »

  1.   

    我有一个,用就是三种编码方式。base64,qp,自己搜索一下就OK了
      

  2.   

    研究一下MIME编码格式吧,很简单的
    我自己实现了编码,但是还没有实现解码~~~没时间啊~~~`
      

  3.   

    但是在电子邮件里不是就2、3种编码阿,你说一个两个地解决不了问题,我要的是较为完整的使用indy的解码办法,根据我目前的研究,我感觉indy存在简单的解码办法,只是不知道具体怎么写,所以要例程,高手帮忙啊
      

  4.   

    特别是碰到From: "=?gb2312?Q?e=D1=CD?=" <[email protected]>
    Subject: =?gb2312?Q?=BD=F4=BC=B1=A3=A1e=D3=D1=CD=F8=D5=F7=C5=D0=E3=C4=D0=CA=BF=A3=A1?=
    类似这种编码,怎么办
      

  5.   

    TIdMessage
    属性 Body
         ContentTransferEncoding
         IsEncoded
         ContentType
         Encoding meMIME 使用MIME 编码 meUU UUEncode编码
    没写过,感觉应该是支持编码的
      

  6.   

    TIdBase64Decoder;
     TIdUUDecoder;
     TIdQuotedPrintableDecoder;看看这三个东西,你应该就明白了,MIME 主要就是这个三种编码
      

  7.   

    直接修改INDY 的IDCoderHeader 单元中的DecodeHeader函数就可以了
    它里面有 
     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的。
      

  8.   

    这个问题解决了,谢谢各位,不过又来了个问题,就是在邮件的body一般都是text/html类型的,中间有嵌入的图片,一般图片用附件方式发送,其中附件的头一般会有content-id:ajsfdoerjsd类似的内容,在body中会有类似的内容<img src="cid:ajsfdoerjsd">来指明嵌入的图片所在的位置。
    但是我现在研究下来,嵌入的规则完全是有boundary决定的,而且嵌入的图片有的还没有content-id,我就不明白indy是如何实现他们的关联的,而且看着TIdAttachment,TIdText的少得可怜的属性和方法,真是不知道到底怎么来用。
    其实问题就是
    1、如何判断一个附件是内嵌的(嵌入的规则应该是由boundary决定,不知怎么访问,使用msg.MIMEBoundary.Boundary;基本都是空串)
    2、如何获得附件的content-id,其实应该不难,通过TIdAttachment.Headers应该可以访问到,但是我用indy的组件一个都得不到,全为空(源代码中明明有的),其他的mail组件倒是获得过,就是不放心
      

  9.   

    content-id 肯定有,你的INDY版本是不是低了?
      

  10.   

    有content-id的为内嵌的,这时要本HTML正文部分中的'cid:'+tmpContentId 替换为你的附件名称带路径
    获取content-id
    tmpContentId:=TIdAttachment(FReceiveMsg.MessageParts.Items[intIndex]).ContentID;
      

  11.   

    jackystar(我) 老大,你用的indy是什么版本?TIdAttachment没有contentid属性的(indy9.0),我看要获得必须用TIdAttachment.Headers,再分析它,关键是我从来没找到ContentID(邮件中本身有),你说的方法我也想到了,关键是先要得到阿,而且我在想是不是还有更方便的方法呢
      

  12.   

    我的INDY 版本为10的
    你看一下IdMessageClient单元里面的ProcessAttachment过程中有没有
                ContentID := AMsg.Headers.Values['Content-ID'];                   {do not localize}这个语句,有的话可以这样取,没有就要你自己取了