0

メールの送受信に Indy を使用しています。現在、ssl メール サーバーを使用していますが、メールから添付ファイルを取得できません。私を助けてください....

Memo1.Clear;
POP3.ConnectTimeout := 20000;
if POP3.Connected then
  POP3.Disconnect;
POP3.Host := '*******';
POP3.Port := 995;
POP3.Username := '*******';
POP3.Password := '*******';
SSLIOHandler.Host := POP3.Host;
SSLIOHandler.Port := POP3.Port;
POP3.IOHandler := SSLIOHandler;
POP3.UseTLS := utUseImplicitTLS
try
  POP3.Connect;
except
  Memo1.Text := Memo1.Text + 'Can not connect to server' + #13#10;
  Memo1.Text := Memo1.Text + '==========' + #13#10;
end;
for i := 1 to POP3.CheckMessages do
begin
  Msg.Clear;
  POP3.RetrieveHeader(i, Msg)
  Memo1.Text := Memo1.Text + 'Subject: ' + Msg.Subject + #13#10;
  Memo1.Text := Memo1.Text + 'AttachmentCount: ' + IntToStr(Msg.MessageParts.AttachmentCount) + #13#10;
  Memo1.Text := Memo1.Text + 'MessagePartsCount: ' + IntToStr(Msg.MessageParts.Count) +   #13#10;
  Memo1.Text := Memo1.Text + '==========' + #13#10;
  for j := 0 to Msg.MessageParts.Count do
  begin
    if (Msg.MessageParts.Items[j] is TIdAttachmentFile) then
    begin
      //My Code
    end;
  end;
end;
POP3.Disconnect;
Memo1.Text := Memo1.Text + 'End of conecction' + #13#10;
4

1 に答える 1

1

SSL と非 SSL は、電子メールを生成および解析する Indy の機能にはまったく影響しません。TIdAttachmentコレクション内のオブジェクトを取得していない場合はMsg.MessageParts、電子メールの形式が一般的に間違っているか、Indy がサポートしていない形式を電子メールが使用しています。

電子メールの受信または読み込みでは、、、またはプロパティが設定されないAttachmentCountためRelatedPartCountTextPartCount常に 0 になります。これらのプロパティは、電子メールの受信/読み込みではなく、電子メールの送信/保存時にのみ使用されます。メールを受信/ロードするときにこれらのプロパティに値を持たせたい場合は、Msg.MessageParts.CountParts()メソッドを自分で呼び出す必要があります。たとえば、次のようになります。

POP3.Retrieve(i, Msg);
Msg.MessageParts.CountParts;
Memo1.Text := Memo1.Text + 'AttachmentCount: ' + IntToStr(Msg.MessageParts.AttachmentCount) + #13#10;

最後に、電子メールに添付ファイルがなく、単純なプレーンテキストの電子メールまたは単一部分の MIME 電子メールである場合、Msg.MessagePartsコレクションは電子メールのコンテンツを保持せず、Msg.Body代わりにプロパティが保持することに注意してください。このMsg.MessagePartsプロパティは、マルチパートおよび/または非テキスト データを含む電子メールにのみ使用されます。

于 2013-02-26T23:08:33.447 に答える