Delphiの特定のIMAPメールボックスからすべての電子メールメッセージの本文を取得するにはどうすればよいですか?たとえば、INBOX
メールボックスから?
8304 次
1 に答える
13
選択したメールボックスからすべてのメッセージのすべての本文を取得する方法はたくさんあります。私は、メールボックスとメールボックスからRetrieve
のすべてのメッセージを1つずつ繰り返す1つを使用しました。この方法では、コードを変更できるため、必要なときにループを中断したり、最初に述べたようにメッセージをサーバー上で既読としてマークしない置換などを行うことができます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.dll
とライブラリを配置することを忘れないでください。ssleay32.dll
Indy用のOpenSSLライブラリをさまざまなバージョンとプラットフォームでダウンロードできますfrom here
。
于 2012-11-28T16:36:52.063 に答える