为什么Javamail中的连接超时?

时间:2015-11-09 12:37:12

标签: java email javamail

我正在尝试在eclipse中使用javamail通过gmail发送电子邮件。每次我得到javax.mail.MessagingException

异常

 DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
    javax.mail.MessagingException: Could not connect to SMTP host: 

smtp.gmail.com, port: 587;
  nested exception is:
    java.net.ConnectException: Connection timed out: connect

代码

package org.itc.utility;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.itc.model.User;

public class SendEmail {
    public User sendingEmail(User user)
    {
        Properties props = new Properties();  
        props.put("mail.smtp.host", "smtp.gmail.com");  
        props.put("mail.smtp.auth", "true");  
        props.put("mail.debug", "true");  
        props.put("mail.smtp.port", 587);  
        props.put("mail.smtp.socketFactory.port", 587);  
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.transport.protocol", "smtp");
        Session mailSession = null;

        mailSession = Session.getInstance(props,  
                new javax.mail.Authenticator() {  
            protected PasswordAuthentication getPasswordAuthentication() {  
                return new PasswordAuthentication("<yogeshvbhat@gmail.com>", "<zc516z918>");  
            }  
        });  


        try {


            Transport transport = mailSession.getTransport();

            MimeMessage message = new MimeMessage(mailSession);

            message.setSubject("Sample Subject");
            message.setFrom(new InternetAddress("yogeshvbhat@gmail.com"));
            String []to = new String[]{"yogeshyvb@gmail.com"};
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to[0]));
            String body = "Sample text";
            message.setContent(body,"text/html");
            transport.connect();

            transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));
            transport.close();
        } catch (Exception exception) {
                System.out.println(exception);
        }
        return user;
    }
}

每次跳过try块我都会得到异常。对此有何帮助?

2 个答案:

答案 0 :(得分:0)

通常,连接超时可能有几个原因,包括服务器脱机,网络链路故障和网络路由问题 1

但在这种情况下,最可能的解释是防火墙阻止您对gmail邮件服务器的外出访问。这通常是作为监视/控制组织的外发电子邮件的一种手段,或作为一种防止被攻陷机器故意进行垃圾邮件或垃圾邮件的方式。

  

禁用防火墙

可能不是您的计算机防火墙或您的(家庭)网络防火墙正在执行阻止。您的组织的网络管理员或您的ISP管理员可能会阻止它。

1 - 一般情况下,这些事情可能会破坏从您的机器到服务器的所有网络流量,因此值得用&#34; ping&#34;,&#34; traceroute&#进行一些探测。 34;,&#34; tcptraceroute&#34;,etcetera。

答案 1 :(得分:0)

仅添加以下属性:

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");

另外,请检查您的Gmail设置:

Set up 2-Step Verification

希望这会有所帮助。