我在 Delphi 中阅读了一些教程,但真的很困惑。
这并不奇怪,因为 IMAP 通常是一个复杂且令人困惑的协议。这就是为什么与其他邮箱协议(如和)TIdIMAP4
相比有更多方法的原因(它甚至没有实现 IMAP 的所有功能)。TIdPOP3
TIdSMTP
比如选择邮箱后应该怎么做?
ImapClient->UIDRetrieve() 或 ImapClient->RetrieveStructure() 或 ImapClient->RetrievePart() od ImapClient->RetrieveEnvelop()。
这实际上取决于您打算如何处理电子邮件及其附件。
(UID)Retrieve()
下载整封电子邮件,将其解析为 aTIdMessage
并在服务器上将其标记为“已读”。
(UID)RetrieveStructure()
检索电子邮件中各种 MiME 部分的父/子层次结构,为一个TIdMessage.MessageParts
或TIdImapMessageParts
集合中的每个部分创建一个条目,提供有关每个部分的一些基本描述信息,例如内容类型和部分编号。不检索每个部分的实际内容。
(UID)RetrievePart()
检索电子邮件特定 MIME 部分的实际内容。您无需下载整个电子邮件。但是您必须先下载电子邮件的结构,以便知道要检索的部件号。
(UID)RetrieveEnvelope()
检索电子邮件的一些基本顶级标题:日期、主题、发件人、回复、收件人、抄送、密件抄送、回复中和消息 ID。
那么,接下来我应该怎么做才能识别 MessagePart 没有,有附件文件?
如果您下载整封电子邮件,则必须遍历其MessageParts
集合以查找TIdAttachment
包含您感兴趣的所需文件名/内容类型的对象。
如果您只下载电子邮件的一部分,则必须检索电子邮件的结构并遍历生成的集合以查找包含您感兴趣的所需文件名/内容类型的条目,然后您可以请求该特定部分的内容。
最后一个,如何将该文件保存到本地驱动器?
如果您下载整封电子邮件,那么您将调用SaveToFile()
所需的TIdAttachment
对象:
static_cast<TIdAttachment*>(IdMessage1->MessageParts->Items[no])->SaveToFile("filename");
如果您下载电子邮件的结构,您可以使用(UID)RetrievePart()
将附件的数据检索到TStream
对象中,例如TFileStream
.