【发布时间】:2015-05-13 04:38:11
【问题描述】:
我正在尝试使用Indy 的TIdSMTPRelay 组件发送邮件,这是我使用的过程:
procedure tryRelayTask;
var
relayMsg : TIdMessage;
LRelayRecipients: TIdEMailAddressList;
LRelay : TIdSmtpRelay;
SSLHandler : TIdSSLIOHandlerSocketOpenSSL;
begin
relayMsg := TIdMessage.Create;
relayMsg.LoadFromFile(mailFileName);
try
LRelayRecipients := TIdEMailAddressList.Create(nil);
try
LRelayRecipients.Add.Address := recipientEmailAddress;
LRelay := TIdSMTPRelay.Create(nil);
try
SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
try
SSLHandler.SSLOptions.KeyFile := myKeyFile;
SSLHandler.SSLOptions.CertFile := myCertFile;
SSLHandler.SSLOptions.RootCertFile := myRootCertFile;
LRelay.IOHandler := SSLHandler;
LRelay.SSLOptions.SSLSupport := SupportSSL;
LRelay.DNSServer := myRelayDNSServer;
LRelay.Send(relayMsg, LRelayRecipients) ;
if Lrelay.StatusList.Items[0].Sent then begin
// message is sent ok ?
end
else begin
// message is not sent ok - handleError
handleRelayError(LRelay.StatusList.Items[0].ExceptionMessage);
end;
finally
SSLHandler.Free;
end;
finally
LRelay.Free;
end;
finally
LRelayRecipients.Free;
end;
finally
relayMsg.Free;
end;
end;
有时Lrelay.StatusList.Items[0].Sent 属性是False,但消息实际上已发送,因此如果我再次尝试发送它,我最终会成功发送它N 次而不是只有 1 次。有人可以帮我发送使用TIdSMTPRealy 组件正确发送消息?
【问题讨论】:
-
Sent为 false 时,ExceptionMessage的实际值是多少? -
ExceptionMessages的值如下所示:无法连接到地址 xyz@xyz.com 的 MX 服务器 -
该特定错误意味着
TIdSMTPRelay能够查询 DNS 以获取xyz.com域的 MX 记录(SMTP 服务器 IP),但无法连接到任何报告的服务器,或协商与其中任何一个的 SSL/TLS 会话。如果TIdSMTPRelay能够连接到服务器,但无法向其发送电子邮件,您将收到不同的错误消息。另外,我刚刚发现TIdSMTPRelay可以为单个地址创建多个状态项,因此请务必考虑到这一点。