gpt4 book ai didi

delphi - 如何将电子邮件附件保存到文件

转载 作者:行者123 更新时间:2023-12-03 15:54:04 30 4
gpt4 key购买 nike

我想使用 Indy Ver.10 的 TIdImap4 对象将电子邮件附件保存到文件中。

我获取了电子邮件的 UID,然后使用以下代码:

lMsg := TIdMessage.Create(Self);
lImap.UIDRetrieveStructure(lUid, lMsg);
lMsg.MessageParts.CountParts;
if lMsg.MessageParts.AttachmentCount > 0 then
for lJ := 0 to lMsg.MessageParts.Count - 1 do
if (lMsg.MessageParts[lJ] is TIdAttachment) and
SameText(lMsg.MessageParts[lJ].Name, 'MyAttachment') then
lImap.UidRetrievePartToFile(lUid, lJ, lDimAllegato, lFileName, Trim(lMsg.MessageParts[lJ].ContentTransfer))

这一直有效,直到lMsg.MessageParts[lJ].ContentType = 'Text/Plain'并且lMsg.MessageParts[lJ].ContentTransfer = '7bit',现在 UidRetrievePartToFile() 返回 False,并且不会创建任何文件。我想是因为lMsg.MessageParts[lJ].ContentType = 'application/octet-stream'lMsg.MessageParts[lJ].ContentTransfer = 'base64'

我对此主题不熟练,我需要更改代码才能保存此类附件吗?

我还尝试过:TIdAttachment(lMsg.MessageParts[lJ]).SaveToFile(lFileName)类似,但创建的文件始终为空。

最佳答案

UIDRetrieveStructure()TIdMessage 一起使用将会用大量 TIdttachment 填充 TIdMessage.MessageParts > 对象,绝不是任何 TIdText 对象,并且并非所有对象都将代表实际的附件。您正在使用 TIdAttachment 索引作为 UIDRetrievePartToFile()APartNum 参数,这可能不准确。

并且在使用UIDRetreiveStructure()时不能使用TIdAttachment.SaveToFile(),因为没有下载实际数据,只下载了电子邮件的结构,这然后允许您下载所需特定元素的数据。

我建议您使用 UIDRetrieveStructure() 的其他重载版本来填充 TIdImapMessageParts。除此之外,TIdImapMessagePart 为您提供了一个准确的 ImapPartNumber,然后您可以将其提供给 UIDRetrievePartToFile()(以及 ContentTransferEncoding):

lParts := TIdImapMessageParts.Create(nil);
try
lImap.UIDRetrieveStructure(lUid, lParts);
for lJ := 0 to lParts.Count - 1 do
begin
if (lParts[lJ] is the desired attachment) then
begin
lImap.UidRetrievePartToFile(lUid, lParts[lJ].ImapPartNumber, lDimAllegato, lFileName, lParts[lJ].ContentTransferEncoding);
end;
end;
finally
lParts.Free;
end;

关于delphi - 如何将电子邮件附件保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35778642/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com