使用Delphi,Intraweb,Indy。 在IDE(运行时)中发送电子邮件(SMTP)没有问题。 但是我收到错误消息:尝试进行身份验证时使用ISAPI-dll导致“ SSL协商失败”。 libeay32.dll和ssleay32.dll与ISAPI-dll位于同一目录。
有什么想法吗? 谢谢, 安德烈亚斯(Andreas)
function NetSendMail(cTo, cSubject, cBody: String; cFrom: String = ''): Boolean;
var
oIdSMTP: TIdSMTP;
oIdMessage: TIdMessage;
oIdSSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
result := False;
oIdSMTP := nil;
oIdMessage := nil;
try
oIdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(Application);
oIdSSLIOHandler.SSLOptions.Mode := sslmClient;
oIdSMTP := TIdSMTP.Create(Application);
oIdSMTP.IOHandler := oIdSSLIOHandler;
oIdSMTP.UseTLS := utUseExplicitTLS;
oIdSMTP.Host := 'smtp.strato.de';
oIdSMTP.Port := 587;
oIdSMTP.Username := '***';
oIdSMTP.Password := '***';
oIdMessage := TIdMessage.Create(Application);
with oIdMessage do
begin
Recipients.Add().Address := cTo;
Subject := cSubject;
Body.Add(cBody);
if cFrom <> '' then
From.Address := cFrom
else
From.Address := 'absender@sesamsoft.de';
end;
with oIdSMTP do
try
AuthType := satDefault;
try
if not Connected() then
Connect();
except
on E: Exception do
begin
MsgShowMessage('Connect: ' + E.Message);
result := False;
exit;
end;
end;
try
Authenticate;
except
on E: Exception do
begin
MsgShowMessage('Auth: ' + E.Message);
result := False;
exit;
end;
end;
if not Connected() then
Connect();
Send(oIdMessage);
except
on E: Exception do
begin
MsgShowMessage(E.Message);
result := False;
exit;
end;
end;
finally
oIdSMTP.Disconnect;
FreeAndNil(oIdSMTP);
FreeAndNil(oIdMessage);
FreeAndNil(oIdSSLIOHandler);
end;
result := True;
end;
答案无法帮助我。我包括了我正在使用的代码。它可以与“普通”桌面应用程序正常工作。它在运行时也可以与INTRAWEB一起使用,但在最终的ISAPI-dll中却不能。 –安德烈亚斯(Andreas)