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 不支持的格式。

接收或加载电子邮件不会设置AttachmentCountRelatedPartCountTextPartCount属性,因此它们将始终为 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 回答