JavaMail连接问题

时间:2014-07-24 18:02:14

标签: java email javamail exchange-server permission-denied

我正在尝试测试一个在线发现的简单程序,以便使用JavaMail发送电子邮件。我正在尝试使用工作电子邮件但是我收到错误"无法连接到SMTP主机:..."和"权限被拒绝:连接"。我已经查看了有关此问题的其他帖子,包括:

JavaMail Exchange Authentication

Sending email using JSP

JavaMail API to iMail -- java.net.SocketException: Permission denied: connect

我认为我已经解决了那些基本上是IPv4问题和身份验证的帖子解决方案中提到的问题。我是尝试使用JavaMail的新手,所以我想知道我是否在制作其他初学者错误。还有其他我忽略的事情吗?我是否有可能以这种方式访问​​服务器?我使用的是通用名称而不是我公司的实际名称。

代码如下:

public static void main(String[] args) 
{   
    System.setProperty("java.net.preferIPv4Stack" , "true");
    String host="mail.company.com";   
    final String user="user@company.com";//change accordingly   
    final String password="XXXXXXXX";//change accordingly   

    String to="user@company.com";//change accordingly   

    //Get the session object   
    Properties props = new Properties();   
    props.put("mail.smtp.host",host);   
    props.put("mail.smtp.auth", "true");   

    Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() 
    {   
        protected PasswordAuthentication getPasswordAuthentication() 
        {   
            return new PasswordAuthentication(user,password);   
        }   
    });   

    //Compose the message   
    try 
    {   
        MimeMessage message = new MimeMessage(session);   
        message.setFrom(new InternetAddress(user));   
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));   
        message.setSubject("javatpoint");   
        message.setText("This is simple program of sending email using JavaMail API");   

        //send the message   
        Transport.send(message);   

        System.out.println("message sent successfully...");   

    } 
    catch (MessagingException e) 
    {
        e.printStackTrace();
    }
}

堆栈追踪:

javax.mail.MessagingException: Could not connect to SMTP host: mail.company.com, port: 25;
nested exception is:
java.net.SocketException: Permission denied: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
at javax.mail.Service.connect(Service.java:313)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at mailtesting.SendMailBySite.main(SendMailBySite.java:45)

Caused by: java.net.SocketException: Permission denied: connect
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)
... 7 more

1 个答案:

答案 0 :(得分:4)

java.net.SocketException: Permission denied: connect

这意味着您已连接到服务器和端口以及服务器主动拒绝您的连接。

如果您尝试telnet到此服务器和端口,您可能会获得更具描述性的消息,无论哪种方式,该端口都无法正常工作。

端口25很可能被阻止作为安全措施,这对于大多数公司来说都是非常标准的设置。

由于您使用Outlook无法在设置中找到端口,我假设您正在连接到Exchange服务器,如果您的整个公司都是Microsoft Outlook,则可能根本不启用SMTP店。

您需要与系统管理员团队联系,以了解您应该使用的端口和协议。