使用Delphi发送电子邮件时,如果出现“连接超时”错误,该怎么办?

6
如何在Delphi 2010中发送电子邮件,例如(验证电子邮件、丢失密码或任何HTML/纯文本电子邮件)。
我尝试使用以下代码发送邮件,但在发送邮件时出现“Socket Error #10060 Connection Timed Out”的EIdSocket错误。
procedure TForm5.btnSendMailClick(Sender: TObject);
begin

//setup SMTP
smtppass := ed_IdVerification.Text;
SMTP.Host := 'smtp.google.com';   // Controle a distance
SMTP.Port := 465;
smtp.Username := 'hetallica69@gmail.com';
smtp.Password := QuotedStr(smtppass);


//setup mail message

MailMessage.From.Address := 'hetallica69@gmail.com';
MailMessage.Recipients.EMailAddresses := '_rafik@live.fr';

MailMessage.Subject := 'Confirm your account';
MailMessage.Body.Text := 'Text goes here';

//send mail
try
 try
   if not smtp.Connected then SMTP.Connect() ;
   SMTP.Send(MailMessage) ;
 except on E:Exception do
   ShowMessage(E.Message);
 end;
   finally
     if SMTP.Connected then SMTP.Disconnect;
   end;
end;

3
您遇到了什么错误?编译错误还是运行时错误?“超时”不是编译错误。您的问题不够清晰明确,缺少您实际错误的很多细节。此外,在您编辑帖子之前发布的原始代码版本使您看起来像一个网络钓鱼者,无论您如何编辑帖子。 - Warren P
2
你看过使用Indy发送GMail的邮件吗?链接 - mjn
项目 splash_screen.exe 触发了一个异常类 EIdSocket 错误,错误信息为“套接字错误 #10060 连接超时”。 - Rafik Bari
1
可能是重复的问题:如何使用Gmail的SMTP和Indy 10发送电子邮件? - Ken White
@The_Fox 我刚试了一下,但是SO自动将我的“琐碎回答”(尽管它包含有关现有答案内容的其他信息)转换为评论 :) - mjn
显示剩余2条评论
1个回答

6
您收到的错误意味着连接在此行失败:SMTP.Connect()
通常,这意味着端口错误、服务器未启动或您没有网络连接。
在这种情况下,您没有网络连接,很可能是因为您的ISP阻止了对该远程端口的连接。
请尝试从托管的Web服务器发送电子邮件。
即使您可以连接,您的代码也无法正常工作。Google SMTP服务器上的端口465需要安全(SSL)连接。您仍然需要实现它。请参考:如何使用Gmail的SMTP和Indy 10发送电子邮件?

2
这是错误的。它失败是因为Gmail使用安全连接,而发布者没有。这与连通性或服务器状态无关。(Gmail很少会停机。)阅读原问题的评论,并跟随其中提供的任一链接。 :) 在投票开始之前,您可能需要删除此答案。注意:我不会投反对票。 - Ken White
Ken,我没有错。如果连接是安全的,它至少会连接。TLS和SSL“安全连接”在TCP层之上。我也无法连接,因为我的ISP阻止了连接。 - Marcus Adams
不,我曾经在Thunderbird和配置gmail SMTP时遇到过问题,当TB首次发布时,我遇到了连接超时错误。 Gmail支持帮助我跟踪到配置的安全部分,一旦我弄清楚了这一点,连接超时就消失了。因此,TLS设置可能导致连接超时,或者Gmail支持决定对我撒谎说Gmail已经关闭,并用TLS借口来掩盖它。 :) - Ken White
我在工作中尝试过这个。当我可以连接但不使用TLS时,我会收到EIdReadTimeout错误。当我尝试连接到错误的端口或已知的被阻止的端口时,我会收到EIdConnectTimeout错误。 - Marcus Adams
好的。我不确定为什么会有差异(除非Thunderbird只是使用了一个通用的“超时”消息,而没有通知具体类型的超时 - 当我读到你最后的评论时才想到这一点)。很高兴我没有投反对票。 :) 我得收回它。我仍然不确定你是正确的,但至少我不能确定你是错误的。 ;) - Ken White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接