带有TIdSMTP连接超时的SendMail

时间:2014-11-08 14:40:46

标签: delphi smtp sendmail indy

我无法使用TIdSMTP发送电子邮件我收到以下消息:Socket Error # 10060 / Connection timed out.

我正在使用版本Delphi XE6

image

这是我的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  IdSMTP : TIdSMTP;
  IdMessage : TIdMessage;
begin
  IdSMTP := TIdSMTP.Create (Nil);
  IdMessage := TIdMessage.Create (Nil);
  IdSMTP.Host := 'mail.mysmtp.com';
  IdSMTP.Port := 25;
  IdSMTP.Connect ();
  IdMessage.From.Address := 'test@mysmtp.com';
  IdMessage.From.Name := 'Contato';
  IdMessage.Recipients.EMailAddresses := 'test@hotmail.com';
  IdMessage.Subject := 'Contato test';
  IdMessage.Body.Text := 'test';
  IdSMTP.Send (IdMessage);
  IdSMTP.Disconnect ();
  FreeAndNil (IdMessage);
  FreeAndNil (IdSMTP);
end;

1 个答案:

答案 0 :(得分:1)

来自Google:10060范围内的套接字错误是Winsock错误。它通常是由传出连接问题或主机端的连接问题引起的。

我不知道您是否对此代码进行了清理以便发布,但我会说罪魁祸首是来自地址的主机名或用户名。

Winsock将尝试创建与主机名的连接。如果未能获得预期的ACK,则会产生超时错误。我也看到过这种情况发生在域名未被DNS解析时。

此外,之前提到的有关身份验证的内容...... SMTP主机缺少响应可能是由于身份验证不当造成的。这完全取决于主机的SMTP服务的配置方式,因此可以忽略未经授权的请求。

您需要查看是否必须使用SMTP请求传入用户名/密码,或者先读取邮箱(在写入之前阅读,可以这么说)。我无法想象任何人在不需要某种身份验证的情况下配置SMTP服务器,因为否则你有什么相当于“开放中继”,任何进程都可以通过它发送无限流量。

此外,起始地址可能需要有效。也就是说,'test@mysmtp.com'需要用户/邮箱才能存在'test',而不是'* @mysmtp.com'可以使用任何用户/邮箱名称。

所有这些都可能导致超时,因为可以将SMTP主机配置为忽略不正确和未经身份验证的请求。