使用java超时异常发送电子邮件

时间:2014-03-31 21:48:34

标签: java email gmail javamail connection-timeout

我正在尝试使用java向gmail发送电子邮件。我正在使用此代码。

final String username = "xyz@gmail.com";
        final String password = "**********";
        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");
        Session session = Session.getInstance(props,new javax.mail.Authenticator() {

        protected PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication(username,password);
        }
        });



            Message message = new MimeMessage(session);

            message.setFrom(new InternetAddress("xyz@gmail.com"));
            message.setRecipient(Message.RecipientType.TO,newInternetAddress("abcdef@gmail.com"));
            message.setSubject("First email to using java");
            message.setContent("<h:body style =background-color:white> This is a test mail sent using java" + "</body>","text/html;  charset=utf-8");
            Transport.send(message);
            System.out.println("Message Sent");

但是当我运行上面的代码时,它会显示以下错误:

Exception in thread "main" com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.gmail.com, 587; timeout -1;

我有一个使用代理服务器并需要身份验证的Internet连接。这是因为Proxy的错误还是我的代码中存在一些问题。请告诉我如何解决它。

2 个答案:

答案 0 :(得分:0)

是的,这是因为您的代理服务器。

答案 1 :(得分:0)

JavaMail不能直接使用Web代理服务器,尽管它可以使用SOCKS代理服务器。如果您只有一个Web代理服务器,像Corkscrew这样的程序可以提供帮助。

您可以在JavaMail中设置SOCKS代理服务器,如下所示:

Properties p = System.getProperties();
p.setProperty("proxySet","true");
p.setProperty("socksProxyHost","192.168.1.1");
p.setProperty("socksProxyPort","1234");