0

我在 delphi XE3 版本(版本 17.0.4770.56661)上使用 indy 发送 gmail smtp 邮件时遇到问题

我可以顺利发送我的笔记本电脑,但其他电脑会出现“连接正常关闭”之类的错误

我在表单上添加了一个 idlogfile 组件并给了我这一行

Recv 18.04.2013 11:17:20: 220 mx.google.com ESMTP s47sm13947715eeg.8 - gsmtp<EOL>
Sent 18.04.2013 11:17:20: EHLO S23-101<EOL>
Recv 18.04.2013 11:17:20: 250-mx.google.com at your service, [195.175.87.XX]<EOL>250-SIZE 35882577<EOL>250-8BITMIME<EOL>250-STARTTLS<EOL>250 ENHANCEDSTATUSCODES<EOL>
Sent 18.04.2013 11:17:20: STARTTLS<EOL>
Recv 18.04.2013 11:17:21: 220 2.0.0 Ready to start TLS<EOL>
Sent 18.04.2013 11:17:21: QUIT<EOL>

我在我的应用程序上使用此代码

IdSMTP1.host:='smtp.gmail.com'  ;
    IdSMTP1.username:='umutscada@gmail.com';
    IdSMTP1.Password:='XXXX';
    IdSMTP1.port:=587;
    IdSMTP1.UseTLS:=utUseExplicitTLS;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmClient;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvTLSv1;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth := 2;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [];
    IdSSLIOHandlerSocketOpenSSL1.Host := IdSMTP1.Host;
    IdSSLIOHandlerSocketOpenSSL1.Port := IdSMTP1.Port;

    IdMessage1.From.address := 'umutscada@gmail.com';
    IdMessage1.CClist.EMailAddresses:= edit5.Text;
    IdMessage1.Subject:= 'Subject is here';
    IdMessage1.Body.Clear;
    Idmessage1.Body.Add('Body is here');
    for Z := 0 to ListBox8.Items.Count-1 do begin
      TIdAttachmentFile.Create(IdMessage1.MessageParts,ListBox8.Items[Z]);
    end;
    IdSMTP1.Connect;
    IdSMTP1.Authenticate;
    try
        try
            idSMTP1.Send(IdMessage1);
        except on E:Exception do
            Memo1.Lines.Insert(0, 'ERROR: ' + E.Message);
        end;
    finally
        if idSMTP1.Connected then idSMTP1.Disconnect;
    end;

请帮我

谢谢 :)

4

2 回答 2

0

当收到响应QUIT后立即发送命令时STARTTLS,这意味着在实际 SSL/TLS 握手期间引发了异常。 TIdSMTP.Connect()捕获异常,调用(由于 SSL/TLS 未激活1Disconnect()发送未加密),然后将异常重新引发到您的代码中。因此,您需要检查实际引发了什么异常。“连接正常关闭”异常意味着连接在另一端关闭,可能是由服务器本身关闭,也可能是由位于连接中间的防火墙/路由器关闭。QUIT


更新:

1TIdSMTP在 2014 年的 SVN rev 5156 中进行了更新,由于 SSL/TLS 握手失败而在关闭套接字时不再发送未加密QUIT的数据,因为此时套接字处于不确定状态。

于 2013-04-18T19:09:43.660 回答
-1

您必须在帐户配置中“允许不太安全的应用程序访问 yoputr 帐户”。谷歌已经以这种方式添加了一些限制。

请参阅 Google 文档中的此链接。

于 2016-10-21T07:52:53.370 回答