我尝试了很多教程来创建一个电子邮件发送应用程序,但是每个代码都会抛出相同的错误:
javax.mail.MessagingException:无法连接到SMTP主机:smtp.gmail.com,port:587; 嵌套异常是: java.net.NoRouteToHostException:没有到主机的路由(Host unreachable)
我使用Ubuntu 16.04和Eclipse Neon.1a Release(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 = "myEmail@gmail.com";
String pass = "myPassword";
String to = "receiverEmail@gmail.com";
String from = "myEmail@gmail.com";
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);
}
}}
我是否需要安装其他软件或其他软件?
更新
问题出在我的无线路由器中。
我通过手机上的热点使用移动(3G)互联网,一切都很顺利。
现在我们可以解决问题,如果有人有路由器设置的经验。
答案 0 :(得分:0)
它可能是阻止传出呼叫的防火墙。防火墙可以位于客户端或服务器上。
答案 1 :(得分:0)
可能是您的第三方谷歌应用授权已关闭,请尝试允许它们: https://myaccount.google.com/lesssecureapps