2013-04-18 54 views
0

我有一个问题德尔福XE3构建发送Gmail的SMTP邮件与印(版本17.0.4770.56661)德尔福XE3印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:='[email protected]'; 
    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 := '[email protected]'; 
    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; 

请帮我

谢谢:)

+0

我记得,GMail弹出界面需求使用SSL/TLS。检查防火墙或防病毒程序是否不会杀死加密的邮件通讯(Avira存在问题)。检查日期,时间和时区设置是否正确。 –

+0

嗨arioch,我没有使用任何防火墙或防病毒,我尝试了很多电脑 – CeRBeR

回答

0

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


更新:

TIdSMTP在SVN更新于2014年修订版5156没有关闭套接字时再发送一个未加密的QUIT由于SSL/TLS握手失败,因为由于该点,套接字处于不确定状态。

-1

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

See this link in Google documentation.

+0

不,你*不需要启用“允许不太安全的应用程序”选项。您可以让Google生成特定于应用程序的密码,然后您可以将该密码与Indy一起使用,而不是通常的Gmail密码。但是无论如何,这不是OP问题的原因,因为在执行SMTP认证之前,在TLS握手期间发生故障。 –