我无法使用TIdSMTP
发送电子邮件我收到以下消息:Socket Error # 10060 / Connection timed out.
我正在使用版本Delphi XE6
这是我的代码:
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;
答案 0 :(得分:1)
来自Google:10060范围内的套接字错误是Winsock错误。它通常是由传出连接问题或主机端的连接问题引起的。
我不知道您是否对此代码进行了清理以便发布,但我会说罪魁祸首是来自地址的主机名或用户名。
Winsock将尝试创建与主机名的连接。如果未能获得预期的ACK,则会产生超时错误。我也看到过这种情况发生在域名未被DNS解析时。
此外,之前提到的有关身份验证的内容...... SMTP主机缺少响应可能是由于身份验证不当造成的。这完全取决于主机的SMTP服务的配置方式,因此可以忽略未经授权的请求。
您需要查看是否必须使用SMTP请求传入用户名/密码,或者先读取邮箱(在写入之前阅读,可以这么说)。我无法想象任何人在不需要某种身份验证的情况下配置SMTP服务器,因为否则你有什么相当于“开放中继”,任何进程都可以通过它发送无限流量。
此外,起始地址可能需要有效。也就是说,'test@mysmtp.com'需要用户/邮箱才能存在'test',而不是'* @mysmtp.com'可以使用任何用户/邮箱名称。
所有这些都可能导致超时,因为可以将SMTP主机配置为忽略不正确和未经身份验证的请求。