我正在尝试使用这些设置使用gmail帐户(Delphi 7,Indy 10)发送电子邮件:
TIdSmtp:
Port = 587;
UseTLS := utUseExplicitTLS;
TIdSSLIOHandlerSocketOpenSSL:
SSLOptions.Method := sslvTLSv1;
一切似乎都设定好了。我收到了这个回复:
Resolving hostname smtp.gmail.com.
Connecting to 74.125.77.109.
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = RC4-MD5; description = RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
; bits = 128; version = TLSv1/SSLv3;
然后它挂起并没有完成。电子邮件未发送。可能是什么问题?
答案 0 :(得分:4)
首先确保您拥有最新的ssl库from here
我已经看到在indy的最新版本(即非稳定版本)中已经解决的间歇性失速和错误。见http://www.indyproject.org/sockets/download/svn.DE.aspx
对于gmail,我通常在端口465上使用implicityTLS ..
idSmtp := TIdSMTP.Create(nil);
try
idSmtp.IOHandler := nil;
idSmtp.ManagedIOHandler := true;
// try to use SSL
try
TIdSSLContext.Create.Free;
idSmtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSmtp);
if (smtpSettings.port = 465) then
idSmtp.UseTLS := utUseImplicitTLS
else
idSmtp.UseTLS := utUseExplicitTLS;
except
idSmtp.IOHandler.Free;
idSmtp.IOHandler := nil;
end;
if (idSmtp.IOHandler = nil) then
begin
idSmtp.IOHandler := TIdIOHandler.MakeDefaultIOHandler(idSmtp);
idSmtp.UseTLS := utNoTLSSupport;
end;
// send message, etc
finally
idSmtp.Free;
end;
答案 1 :(得分:3)
问题很简单。我没有耐心,应用程序没有挂起,有很长的超时。超时是错误设置的结果。
答案 2 :(得分:1)
首先,您确认代码是否正在与其他电子邮件服务器一起使用?
前段时间有人提到他们在使用Indy TIdHTTP组件接受http请求的某些服务器时出现问题。原因是他们将Indy作为使用者的一部分包括在内:
Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
当他们删除了 Indy Library 时,它就有效了。显然,Indy创建了一些恶意Web服务,因此一些站点将拒绝使用它创建的应用程序的连接。
我不确定您使用的组件是否具有任何类型的UserAgent属性。但如果确实如此,则取消对Indy的任何引用。
答案 3 :(得分:1)