我一直在使用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;
答案 0 :(得分:1)
SSL与非SSL对Indy生成和解析电子邮件的能力无任何影响。如果您未在TIdAttachment
集合中收到任何Msg.MessageParts
个对象,则电子邮件通常会格式错误,或者电子邮件使用的是Indy不支持的格式。
接收或加载电子邮件不会设置AttachmentCount
,RelatedPartCount
或TextPartCount
属性,因此它们将始终为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
属性仅用于包含多部分和/或非文本数据的电子邮件。