从Indy的附件中获取原始base64内容?

时间:2013-06-05 18:19:05

标签: delphi indy indy10

所以我在收到的Pop3消息上有一个附件, Msg.MessageParts.Items[msgpart] as TidAttachmentFile 但是,是否有可能以Msg.MessageParts.Items[msgpart].ContentTransfer指定的格式(所以base64 ascii)获取此附加文件的内容,而不是创建临时文件,调用SaveToFile,然后重新读取文件并重新转换回来到base64?

1 个答案:

答案 0 :(得分:2)

如果TIdMessage.NoDecode设置为False,则为no,则不可能。当NoDecode为False时,TIdMessageClient会在从套接字读取电子邮件时对电子邮件进行解码,并将已解码的二进制数据放入附件对象中。获取原始base64数据的唯一方法是将TIdMessage.NoDecode设置为True并手动解析原始电子邮件数据(它按原样存储在TIdMessage.Body中),因为您实际上将禁用{{1}整个解码系统。

另一方面,如果您只想避开临时文件,可以使用TIdMessageClient's事件让Indy创建TIdMessage.OnCreateAttachment个对象而不是默认的TIdAttachmentMemory个对象。 base64仍然会被自动解码并作为二进制文件存储在附件中,但至少附件只能在内存中,因此您的重新编码会更快。