2014-11-08 16 views
0

我無法發送使用TIdSMTP我收到以下消息的電子郵件:Socket Error # 10060/Connection timed out.sendmail將以TIdSMTP連接超時

我使用的版本的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 := '[email protected]'; 
    IdMessage.From.Name := 'Contato'; 
    IdMessage.Recipients.EMailAddresses := '[email protected]'; 
    IdMessage.Subject := 'Contato test'; 
    IdMessage.Body.Text := 'test'; 
    IdSMTP.Send (IdMessage); 
    IdSMTP.Disconnect(); 
    FreeAndNil (IdMessage); 
    FreeAndNil (IdSMTP); 
end; 
+4

IdSMTP.connect引發異常嗎?你能通過Telnet連接到你的SMTP服務器嗎? – 2014-11-08 15:33:05

+1

你確定主機?也許無關,但一些身份驗證也會丟失(SMTP/SMTP之前的用戶名/密碼/ POP),端口,TSL ...看看[這裏](http://stackoverflow.com/a/11157460/1699210),也許你會必須改進你的問題。 – bummi 2014-11-08 15:53:22

+2

請注意,您可以簡單地在沒有(nil)的情況下編寫'TIdSMTP.Create'和'TIdMessage.Create'。也可以使用try .. finally,並將finally/FreeAndNil放在finally塊中以消除內存泄漏的風險。 – mjn 2014-11-08 16:08:58

回答

1

來自Google:10060範圍內的套接字錯誤是Winsock錯誤。它通常是由主機端出現連接問題或連接問題引起的。

我不知道你是否清理了這段代碼來發布它,但我會說罪魁禍首是源地址上的主機名或用戶名。

Winsock將嘗試創建到主機名的連接。如果未能獲得預期的ACK,則會產生超時錯誤。當域名未被DNS解析時,我也看到了這種情況。

此外,之前提到的有關身份驗證的問題...... SMTP主機缺少響應可能是由於身份驗證不正確。這完全取決於主機的SMTP服務是如何配置的,所以它可以忽略未經授權的請求。

您需要查看您是否必須通過SMTP請求傳遞用戶名/密碼,或先讀取郵箱(可以這麼說,先寫郵件)。我無法想象任何人在不需要某種認證的情況下配置SMTP服務器,因爲否則你就會得到一個「開放中繼」,任何進程都可以通過它進行無限流量發送。

另外,從地址可能需要有效。也就是說,'[email protected]'將需要用戶/郵箱進行'測試',而不是'*@mysmtp.com',它可以與任何用戶/郵箱名稱一起使用。

所有這些都可能導致超時,因爲可以將SMTP主機配置爲簡單地忽略不正確和未經身份驗證的請求。