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

Posted

技术标签:

【中文标题】iMail 的 JavaMail API -- java.net.SocketException: Permission denied: connect【英文标题】:JavaMail API to iMail -- java.net.SocketException: Permission denied: connect 【发布时间】:2012-10-05 18:32:10 【问题描述】:

我无法让应用程序使用 JavaMail API 以比我们以往更自动化的方式发送一些文件。我对 Java 和 NetBeans 还很陌生,但是用过其他语言编程,所以如果我对 Java 和/或 NetBeans 有点迷茫,请原谅我。

我一直收到这个错误

java.net.SocketException:权限被拒绝:连接

尝试连接到本地邮件服务器时。我已经使用相同的代码通过 gmail 的 SMTP 服务器成功连接并发送了邮件,只是更改了用户名、密码和端口。我还能够成功地远程登录到我们的服务器并从端口 25 获得 220 响应。我还有一个正在运行的批处理文件,它成功地通过我们的本地服务器发送电子邮件。关于为什么我无法通过JavaMail 联系的任何想法或想法?

这是发送电子邮件的代码。

源代码:

public void sendEmail(String customerNumber, ArrayList fileList)
   String from = "xxxx";
   String username = "xxxx";
   String to = "xxxx";
   String host = "10.1.1.6";
   String pwd = "xxxx";
   String port = "25";

   Properties props = System.getProperties();
   props.put("mail.smtp.host", host);
   props.put("mail.smtp.port", port);
   props.put("mail.smtp.user", username);
   props.put("mail.smtp.auth", "true");
   props.put("mail.smtp.starttls.enable", "true");
   props.put("mail.smtp.debug", "true");
   props.put("mail.smtp.socketFactory.port", port);
   props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
   props.put("mail.smtp.socketFactory.fallback", "false");

   Session session = Session.getInstance(props, null);
   session.setDebug(true);

   MimeMessage message = new MimeMessage(session);
   try
       message.setFrom(new InternetAddress(from));
       message.setRecipients(Message.RecipientType.TO, to);
       message.setSubject("Electronic Invoices");
       BodyPart messageBodyPart = new MimeBodyPart();
       messageBodyPart.setText("Electronic Invoices");
       Multipart multipart = new MimeMultipart();
       multipart.addBodyPart(messageBodyPart);
       for(int i = 0; i < fileList.size(); i++)
           messageBodyPart = new MimeBodyPart();
           String fileName = (String) fileList.get(i);
           DataSource source = new FileDataSource(fileName);
           messageBodyPart.setDataHandler(new DataHandler(source));
           messageBodyPart.setFileName(fileName);
           multipart.addBodyPart(messageBodyPart);
       
       message.setContent(multipart);

       Transport tr;
       tr = session.getTransport("smtp");
       tr.connect(host, username, pwd);
       tr.sendMessage(message, message.getAllRecipients());
       jTextArea2.append("Mail Sent Successfully");
       tr.close();

    catch(Exception e)
       jTextArea2.append("sendEmail()::" + System.getProperty("line.separator") + e + System.getProperty("line.separator"));
       System.out.println(e.getMessage());
       System.out.println(e.getCause());
   

两个异常语句的输出:

DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "10.1.1.6", port 25, isSSL false
Could not connect to SMTP host: 10.1.1.6, port: 25
java.net.SocketException: Permission denied: connect

【问题讨论】:

JDK 7?检查这个人***.com/a/7478027/643500 我将 -Djava.net.preferIPv4Stack=true 添加到我的 NetBeans 配置文件中,但我仍然有错误。不过,它仍然允许我从 gmail 帐户发送。感谢您的快速回复。 这应该去VM选项。另一种确认是否是相同问题的方法,在 Netbeans 中,右键单击项目 > 属性 > 库并选择 JDK 6 Java 平台(如果没有,请安装)。清理,构建然后重试。这将消除这个问题。 非常感谢。这就是问题所在。我只是不太了解 NetBeans。我把“-Djava.net.preferIPv4Stack=true”放在了错误的位置。将其添加到 VM Options 中,效果很好。 我也有同样的异常,但我们使用的是 java 8.171。它应该在那里工作吗?我现在已经用尽了我所有的资源。 【参考方案1】:

-Djava.net.preferIPv4Stack=true 添加到虚拟机选项。另一种确认是否是相同问题的方法,在 Netbeans 中,右键单击项目 > 属性 > 库并选择 JDK 6 Java 平台(如果没有,请安装)。清理,构建然后重试。这将消除这个问题作为问题

信用https://***.com/a/7478027/643500

【讨论】:

【参考方案2】:

如果在开始时简化代码中使用的应用调用(例如从 CLI):

System.setProperty("java.net.preferIPv4Stack", "true")

假设应用将使用旧版 IPv4 网络堆栈。

【讨论】:

以上是关于iMail 的 JavaMail API -- java.net.SocketException: Permission denied: connect的主要内容,如果未能解决你的问题,请参考以下文章

c#Soap客户端问题 - 找到了合同中的多个端点配置

JavaMail API的应用

用于接收电子邮件的JavaMail API

JavaMail API 发送电子邮件

Spring JavaMail发送邮件

Spring JavaMail发送邮件