2017-05-09 239 views
0

我嘗試了很多的教程創建的電子郵件發送程序,但每一個代碼拋出了同樣的錯誤:javax.mail.MessagingException:無法連接到SMTP主機:smtp.gmail.com,端口:587; java.net.NoRouteToHostException:沒有到主機的路由

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587; nested exception is: java.net.NoRouteToHostException: No route to host (Host unreachable)

我使用Ubuntu 16.04和Eclipse Neon.1a版本(4.6.1)

這是我的代碼:

import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import javax.mail.internet.MimeMessage; 

public class SendEmail { 

public static void main(String args[]){ 
    try{ 
     String host ="smtp.gmail.com" ; 
     String user = "[email protected]"; 
     String pass = "myPassword"; 
     String to = "[email protected]"; 
     String from = "[email protected]"; 
     String subject = "My first email"; 
     String messageText = "Some text"; 
     boolean sessionDebug = false; 

     Properties props = System.getProperties(); 

     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.port", "587"); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.starttls.required", "true"); 

     //java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 
     Session mailSession = Session.getDefaultInstance(props, null); 
     mailSession.setDebug(sessionDebug); 
     Message msg = new MimeMessage(mailSession); 
     msg.setFrom(new InternetAddress(from)); 
     InternetAddress[] address = {new InternetAddress(to)}; 
     msg.setRecipients(Message.RecipientType.TO, address); 
     msg.setSubject(subject); msg.setSentDate(new Date()); 
     msg.setText(messageText); 

     Transport transport=mailSession.getTransport("smtp"); 
     transport.connect(host, user, pass); 
     transport.sendMessage(msg, msg.getAllRecipients()); 
     transport.close(); 
     System.out.println("message send successfully"); 
    }catch(Exception ex) 
    { 
     System.out.println(ex); 
    } 
}} 

難道我也許需要安裝額外的軟件,還是其他什麼東西?

UPDATE:

的問題是在我的無線路由器的地方。

我在手機上通過熱點使用移動(3G)互聯網,一切都很順利。

現在我們可以解決問題,如果有人有路由器設置的經驗。

+0

看來你不能得到達到谷歌的郵件服務器,你可以從'平smtp.gmail.com'你的電腦? –

+0

可能是客戶端計算機上的防火牆,阻止傳出呼叫或在另一端的某處。詳細信息可以在這裏找到,https://coderanch.com/t/476146/java/SMTP-Send-Email-Java-Mail –

+0

對不起,但我不太明白,'ping smtp.gmail是什麼意思。 com'? – elano7

回答

0

它可能是阻止撥出呼叫的防火牆。防火牆可以在客戶端或服務器上。

+0

和我能做些什麼來避免這種情況?我試過這個命令'ping smtp.gmail.com',並得到這個結果: 'PING gmail-smtp-msa.l.google.com(74.125.133.108)56(84)字節的數據。來自wo-in-f108.1e100.net(74.125.133.108)的64個字節:icmp_seq = 1 ttl = 41時間= 56.5ms --- gmail-smtp-msa.l.google.com ping統計數據---發送了25個數據包,25收到,0%丟包率,時間24034ms rtt min/avg/max/mdev = 55.846/72.355/100.889/11.747 ms – elano7

+0

問題出在我的無線路由器的某個地方。 我在手機上通過熱點使用移動(3G)互聯網,一切都很順利。 現在我們可以解決問題,如果有人有路由器設置的經驗。 – elano7

+0

什麼路由器?所有路由器都不同。你自己設置了路由器嗎? 「不小心」設置防火牆的可能性不大。您確定您的計算機上沒有防火牆或防病毒軟件阻止訪問?JavaMail FAQ有[連接調試技巧](https://javaee.github.io/javamail/FAQ#condebug)。 –

0

可能對第三方您的谷歌應用程序的授權是關閉的,所以讓他們嘗試: https://myaccount.google.com/lesssecureapps

+0

問題出在我的無線路由器的某個地方。 我在手機上通過熱點使用移動(3G)互聯網,一切都很順利。 現在我們可以解決問題,如果有人有路由器設置的經驗。 – elano7

相關問題