2013-10-06 95 views
4

我試圖在go程序中使用smtp.SendMail()。 但是,它會阻止,直到它超時纔會返回。 這可以防止我發現什麼是錯的。Golang smtp.SendMail攔截

我的代碼:

to := []string{"[email protected]"} 
err := smtp.SendMail("smtp.web.de:25", smtp.CRAMMD5Auth("[email protected]", "password"), "[email protected]", to, []byte("hi")) 
if err != nil { 
    fmt.Println(err) 
}else{ 
    fmt.Println("Success") 
} 

後很長一段時間,我得到了以下錯誤:

dial tcp 213.165.67.124:25: connection timed out 

任何想法可能是什麼真正的問題?

+1

阻止如何阻止您調試?我無法重現這種行爲,我得到'530認證所需'。您是否嘗試過使用數據包嗅探器來追蹤流量? – nemo

+0

至於嗅探:它似乎使用TLS,這使我無法看到發生了什麼。 (Wireshark報告TLSv1客戶端密鑰交換等)至於調試:我不知道如何讓SendMail打印它發送/接收的內容。 – user2089648

+1

@ user2089648查看http://sendmail.org/~ca/email/doc8.12/op-sh-3.html中的'Debugging'部分 – Intermernet

回答

-2

我很確定端口上的任何內容:25在路由器級別被阻塞,所以您將不得不更改您的路由器或服務器提供程序設置。

+2

這是不正確的。端口25用於smtp郵件 – user3091574

+0

如果他們在住宅網絡中,如果您通過SSH連接到服務器並運行它,則不會被允許,那麼它應該可以工作,我相信。 – RonnieKritou

+1

你似乎在談論你的本地設置而不是OP的一般答案 – LenW

0

如果您看到了超時,你可以嘗試使用net.Dial直接以驗證連接:

conn, err := net.Dial("tcp", "smtp.web.de:25") 
if err != nil { 
    fmt.Println(err) 
} 

如果沒有連接,然後有一些地方阻擋插座。詢問本地網絡人員關於防火牆設置,或者是否有任何網絡代理類型設備攔截傳出流量。