首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaMail接口到iMail -- java.net.SocketException:权限被拒绝:连接

JavaMail接口到iMail -- java.net.SocketException:权限被拒绝:连接
EN

Stack Overflow用户
提问于 2012-10-16 02:08:50
回答 2查看 53.7K关注 0票数 20

我很难让应用程序使用JavaMail应用程序接口以一种比我们习惯的方式更自动化的方式发送一些文件。我是Java和NetBeans的新手,但是已经用其他语言编写过程序,所以如果我对Java和/或NetBeans有点迷失,请原谅。

我一直收到这个错误

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

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

下面是发送电子邮件的代码。

源代码:

代码语言:javascript
复制
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());
   }
}

两个异常语句的输出:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-16 02:56:36

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

瑞士信贷https://stackoverflow.com/a/7478027/643500

票数 20
EN

Stack Overflow用户

发布于 2017-03-16 23:03:53

为了简化在开始时代码中使用的应用程序调用(例如,从CLI):

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

假设应用程序将与传统的IPv4网络堆栈一起工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12901475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档