我不能用indy从ssl下载附件

时间:2013-02-25 11:14:57

标签: ssl indy

我一直在使用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;

1 个答案:

答案 0 :(得分: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属性仅用于包含多部分和/或非文本数据的电子邮件。