在 C++ Builder 中使用 Indy IMAP4 下载电子邮件附件文件
Download email attachment files using Indy IMAP4 in C++ Builder
我正在寻找有关如何在 C++ Builder(我使用 C++ Builder XE8)中使用 Indy Imap 下载邮件附件的分步解决方案。我已经阅读了 Delphi 中的一些教程,但真的很困惑。
比如选择邮箱后应该做什么?
ImapClient->UIDRetrieve()
或
ImapClient->RetrieveStructure()
或
ImapClient->RetrievePart()
或
ImapClient->RetrieveEnvelop().
那么,接下来要如何识别MessagePart没有,有附件呢?
最后一个,如何将该文件保存到本地驱动器?
我应该用 C++ 翻译以下内容吗?
TIdAttachmentFile(mbMsgP.MessageParts.Items[liCount]).SaveToFile(fName);
但我不能创建这样的语句
TIdAttachmentFile(IdMessage1->MessageParts->items[no])->SaveToFile("filename");
I have read some tutorial in Delphi, but really getting Confused.
这并不奇怪,因为 IMAP 通常是一个复杂且令人困惑的协议。这就是为什么 TIdIMAP4
与 TIdPOP3
和 TIdSMTP
等其他邮箱协议相比有更多的方法(它甚至没有实现 IMAP 能够实现的所有功能)。
For example, what should I do after selecting the mailbox?
ImapClient->UIDRetrieve() or ImapClient->RetrieveStructure() or ImapClient->RetrievePart() od ImapClient->RetrieveEnvelop().
这实际上取决于您打算如何处理电子邮件及其附件。
(UID)Retrieve()
下载整封电子邮件,将其解析为 TIdMessage
并在服务器上将其标记为 "read"。
(UID)RetrieveStructure()
检索电子邮件中各个 MiME 部分的 parent/child 层次结构,为 TIdMessage.MessageParts
或 TIdImapMessageParts
[=60= 中的每个部分创建一个条目],提供有关每个部分的一些基本描述信息,例如内容类型和部分编号。各部分实际内容未检索
(UID)RetrievePart()
检索电子邮件特定 MIME 部分的实际内容。您无需下载整封电子邮件。但是您必须先下载电子邮件的结构,以便您知道要检索的部件号。
(UID)RetrieveEnvelope()
检索电子邮件的一些基本 top-level headers:日期、主题、发件人、发件人、reply-to、收件人、抄送、密件抄送、in-reply-to 和 message-id.
Then, what should I do next to identify the MessagePart no, haveing the attachment file?
如果您下载整封电子邮件,则必须遍历其 MessageParts
collection 以查找包含所需 filename/contenttype 的 TIdAttachment
object你感兴趣的。
如果您只下载电子邮件的一部分,则必须检索电子邮件的结构并遍历生成的 collection 以查找包含您感兴趣的所需 filename/contenttype 的条目, 然后您可以请求该特定部分的内容。
The Last One, how to save that file to local drive?
如果您下载整封电子邮件,那么您将在所需的 TIdAttachment
object:
上调用 SaveToFile()
static_cast<TIdAttachment*>(IdMessage1->MessageParts->Items[no])->SaveToFile("filename");
如果您下载电子邮件的结构,您可以使用 (UID)RetrievePart()
将附件数据检索到 TStream
object,例如 TFileStream
.
我正在寻找有关如何在 C++ Builder(我使用 C++ Builder XE8)中使用 Indy Imap 下载邮件附件的分步解决方案。我已经阅读了 Delphi 中的一些教程,但真的很困惑。
比如选择邮箱后应该做什么?
ImapClient->UIDRetrieve()
或
ImapClient->RetrieveStructure()
或
ImapClient->RetrievePart()
或
ImapClient->RetrieveEnvelop().
那么,接下来要如何识别MessagePart没有,有附件呢?
最后一个,如何将该文件保存到本地驱动器?
我应该用 C++ 翻译以下内容吗?
TIdAttachmentFile(mbMsgP.MessageParts.Items[liCount]).SaveToFile(fName);
但我不能创建这样的语句
TIdAttachmentFile(IdMessage1->MessageParts->items[no])->SaveToFile("filename");
I have read some tutorial in Delphi, but really getting Confused.
这并不奇怪,因为 IMAP 通常是一个复杂且令人困惑的协议。这就是为什么 TIdIMAP4
与 TIdPOP3
和 TIdSMTP
等其他邮箱协议相比有更多的方法(它甚至没有实现 IMAP 能够实现的所有功能)。
For example, what should I do after selecting the mailbox?
ImapClient->UIDRetrieve() or ImapClient->RetrieveStructure() or ImapClient->RetrievePart() od ImapClient->RetrieveEnvelop().
这实际上取决于您打算如何处理电子邮件及其附件。
(UID)Retrieve()
下载整封电子邮件,将其解析为 TIdMessage
并在服务器上将其标记为 "read"。
(UID)RetrieveStructure()
检索电子邮件中各个 MiME 部分的 parent/child 层次结构,为 TIdMessage.MessageParts
或 TIdImapMessageParts
[=60= 中的每个部分创建一个条目],提供有关每个部分的一些基本描述信息,例如内容类型和部分编号。各部分实际内容未检索
(UID)RetrievePart()
检索电子邮件特定 MIME 部分的实际内容。您无需下载整封电子邮件。但是您必须先下载电子邮件的结构,以便您知道要检索的部件号。
(UID)RetrieveEnvelope()
检索电子邮件的一些基本 top-level headers:日期、主题、发件人、发件人、reply-to、收件人、抄送、密件抄送、in-reply-to 和 message-id.
Then, what should I do next to identify the MessagePart no, haveing the attachment file?
如果您下载整封电子邮件,则必须遍历其 MessageParts
collection 以查找包含所需 filename/contenttype 的 TIdAttachment
object你感兴趣的。
如果您只下载电子邮件的一部分,则必须检索电子邮件的结构并遍历生成的 collection 以查找包含您感兴趣的所需 filename/contenttype 的条目, 然后您可以请求该特定部分的内容。
The Last One, how to save that file to local drive?
如果您下载整封电子邮件,那么您将在所需的 TIdAttachment
object:
SaveToFile()
static_cast<TIdAttachment*>(IdMessage1->MessageParts->Items[no])->SaveToFile("filename");
如果您下载电子邮件的结构,您可以使用 (UID)RetrievePart()
将附件数据检索到 TStream
object,例如 TFileStream
.