Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email Indy 10 smtp身份验证引发访问冲突_Email_Delphi_Authentication_Smtp_Indy - Fatal编程技术网

Email Indy 10 smtp身份验证引发访问冲突

Email Indy 10 smtp身份验证引发访问冲突,email,delphi,authentication,smtp,indy,Email,Delphi,Authentication,Smtp,Indy,Iam使用最近从下载的Delphi 5和Indy 10。 当提供的凭据不正确时,将发生访问冲突错误。验证函数似乎产生了错误。 也不可能越过访问冲突错误,导致程序在没有任何警告的情况下关闭。 下面是一个示例代码: procedure TForm1.Button2Click(Sender: TObject); var IDSMTP1: TIdSMTP; Idmessage1: TIDMessage; IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSock

Iam使用最近从下载的Delphi 5和Indy 10。 当提供的凭据不正确时,将发生访问冲突错误。验证函数似乎产生了错误。 也不可能越过访问冲突错误,导致程序在没有任何警告的情况下关闭。 下面是一个示例代码:

procedure TForm1.Button2Click(Sender: TObject);
var IDSMTP1: TIdSMTP;
 Idmessage1: TIDMessage;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
begin
  IDSMTP1 := TIdSMTP.Create;
  IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create;
  try
    with IDSMTP1 do begin
      Host := 'smtp.gmail.com';
      Port := 465;
      Username := 'email@gmail.com';
      Password := 'password';
      AuthType := satDefault;

      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1];
      IOHandler := IdSSLIOHandlerSocketOpenSSL1;

      UseTLS := utUseRequireTLS;
    end;

    Idmessage1 := TIDMessage.Create;
    try
      with Idmessage1 do begin
        Subject := 'test';
        From.Address := 'email@gmail.com';
        From.Name := 'testname';
        Recipients.EMailAddresses := 'email@gmail.com';
      end;

      with IDSMTP1 do begin
        if not Connected then
          Connect;
        try  
          Authenticate;
          Send(IdMessage1);
        except
        end;
        Disconnect;
      end;

    finally
      Idmessage1.Free;
    end;
  finally
    IDSMTP1.Free;
    IdSSLIOHandlerSocketOpenSSL1.Free;
  end;
end;

提前谢谢。

我已经用Gmail测试了很多次TIdSMTP,所以我知道它是有效的,除非这是Delphi5特有的bug(这不是第一次)。当错误发生时,调试器为调用堆栈显示了什么?我可能知道什么失败了,但我需要检查代码。至于“不可能过去”,那根本不是真的。
try/except
可以捕获访问冲突。您的代码只使用了
try/finally
,它不会捕获异常。但是,即使您没有捕获它,您的代码也在UI事件处理程序中,因此VCL消息循环将捕获异常。您的应用程序不应终止。是的,这是一个已知的Delphi 5错误(与调用具有开放数组参数的重载方法时的调用堆栈损坏有关,这是
Authenticate
内部执行的操作)。此错误已在Delphi6中修复。Delphi5中的一个解决方法是在启用堆栈帧和禁用优化的情况下重新编译Indy,但这并不总是有效的。我确实有一个代码修复程序,但它真的很难看,所以我还没有检查它,我需要找到一个更干净的解决方案,不会破坏与更高版本的兼容性。感谢您的回复。我在
Connect
之后使用了
try/except
,还尝试用
except
替换
最后的