身份验证通过ISAPI-dll发送SMTP电子邮件的问题

时间:2019-04-03 15:02:19

标签: delphi smtp indy intraweb

使用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)

0 个答案:

没有答案