【问题标题】:Delphi XE3 indy gmail smtpDelphi XE3 indy gmail smtp
【发布时间】:2023-04-08 05:28:01
【问题描述】:

我在 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;

请帮帮我

谢谢:)

【问题讨论】:

  • 我记得,GMail pop 接口要求使用 SSL/TLS。检查防火墙或防病毒软件是否不会杀死加密的邮件流量(Avira 存在问题)。检查日期、时间和时区是否设置正确。
  • 嗨 arioch,我没有使用任何防火墙或防病毒软件,我尝试了很多电脑

标签: delphi gmail indy delphi-xe3


【解决方案1】:

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


更新:

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

【讨论】:

    【解决方案2】:

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

    See this link in Google documentation.

    【讨论】:

    • 不,您不需要启用“允许安全性较低的应用程序”选项。您可以改为让 Google 生成一个应用程序专用密码,然后您可以在 Indy 中使用该密码,而不是您的普通 Gmail 密码。但无论哪种方式,这都不是 OP 问题的原因,因为在执行 SMTP 身份验证之前的 TLS 握手期间发生了故障。
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2016-02-01
    • 2014-11-26
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多