JavaMail API到iMail – java.net.SocketException:权限被拒绝:连接
我无法使应用程序使用JavaMail API以比以前更自动化的方式发送一些文件。 我对Java和NetBeans非常陌生,但是已经用其他语言编写了程序,所以请原谅我,如果我觉得Java和NetBeans有点迷路。
我不断收到这个错误
java.net.SocketException:权限被拒绝:连接
当试图连接到本地邮件服务器。 我已经通过gmail的SMTP服务器成功连接并发送了邮件,只是更改了用户名,密码和端口。 我也能够telnet到我们的服务器,并从端口25得到220响应。我也有一个batch file运行,它成功地通过我们的本地服务器发送电子邮件。 任何想法或想法,为什么我不能通过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()); } }
两个Exception语句的输出:
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
将-Djava.net.preferIPv4Stack=true
添加到VM选项。 另一种方法来确认是否是相同的问题,在Netbeans中,右键单击项目>属性>库,然后select一个JDK 6 Java平台(如果没有它,请安装)。 清理,build立然后再试一次。 这将消除这个问题的问题
如果要简化在开始时代码中使用的应用程序调用(例如从CLI):
System.setProperty("java.net.preferIPv4Stack", "true")
假设该应用将使用传统的IPv4networking堆栈。