gpt4 book ai didi

delphi - 如何从某个 IMAP 邮箱获取所有电子邮件的正文?

转载 作者:行者123 更新时间:2023-12-03 14:57:51 31 4
gpt4 key购买 nike

如何从 Delphi 中的某个 IMAP 邮箱获取所有电子邮件的正文?例如,来自 INBOX 邮箱?

最佳答案

有多种方法可以从所选邮箱中检索所有邮件的所有正文文本。我使用过一个,您可以在其中迭代邮箱和 Retrieve邮箱中的每一条消息都一一发出。这种方式允许您修改代码,以便您能够在需要时打破循环,例如替换Retrieve通过 RetrievePeek它不会像前面提到的那样将消息标记为在服务器上已读。当从服务器检索消息时,它的所有部分都会被迭代,当它是文本部分时,它的正文会被附加到本地 S 变量中。迭代后,S 变量将添加到输出 BodyTexts 字符串列表中。因此,结果您将获得字符串列表集合,其中每个项目由串联消息的文本部分正文组成,并且每个项目表示一条消息。

uses
IdIMAP4, IdSSLOpenSSL, IdText, IdMessage, IdExplicitTLSClientServerBase;

procedure GetGmailBodyTextParts(const UserName, Password: string;
BodyTexts: TStrings);
var
S: string;
MsgIndex: Integer;
MsgObject: TIdMessage;
PartIndex: Integer;
IMAPClient: TIdIMAP4;
OpenSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
BodyTexts.Clear;
IMAPClient := TIdIMAP4.Create(nil);
try
OpenSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
OpenSSLHandler.SSLOptions.Method := sslvSSLv3;
IMAPClient.IOHandler := OpenSSLHandler;
IMAPClient.Host := 'imap.gmail.com';
IMAPClient.Port := 993;
IMAPClient.UseTLS := utUseImplicitTLS;
IMAPClient.Username := UserName;
IMAPClient.Password := Password;
IMAPClient.Connect;
try
if IMAPClient.SelectMailBox('INBOX') then
begin
BodyTexts.BeginUpdate;
try
for MsgIndex := 1 to IMAPClient.MailBox.TotalMsgs do
begin
MsgObject := TIdMessage.Create(nil);
try
S := '';
IMAPClient.Retrieve(MsgIndex, MsgObject);
MsgObject.MessageParts.CountParts;
if MsgObject.MessageParts.TextPartCount > 0 then
begin
for PartIndex := 0 to MsgObject.MessageParts.Count - 1 do
if MsgObject.MessageParts[PartIndex] is TIdText then
S := S + TIdText(MsgObject.MessageParts[PartIndex]).Body.Text;
BodyTexts.Add(S);
end
else
BodyTexts.Add(MsgObject.Body.Text);
finally
MsgObject.Free;
end;
end;
finally
BodyTexts.EndUpdate;
end;
end;
finally
IMAPClient.Disconnect;
end;
finally
OpenSSLHandler.Free;
end;
finally
IMAPClient.Free;
end;
end;

此代码需要 OpenSSL,因此请不要忘记将 libeay32.dllssleay32.dll 库放置到项目可见的路径中;您可以下载不同版本和平台的 Indy 的 OpenSSL 库 from here .

关于delphi - 如何从某个 IMAP 邮箱获取所有电子邮件的正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13607194/

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