iMail的JavaMail API--java.net.SocketException:权限被拒绝:连接
我很难让一个应用程序使用JavaMail API以比我们习惯的更自动化的方式发送一些文件。我对Java和NetBeans非常陌生,但已经用其他语言编程,所以如果我对Java和NetBeans有点迷茫,请原谅我 我一直在犯这个错误 java.net.SocketException:权限被拒绝:连接 尝试连接到本地邮件服务器时。我通过gmail的SMTP服务器成功地连接并发送了邮件,代码相同,只是更改了用户名、密码和端口。我还能够成功地远程登录到我们的服务器,并从端口25获得220响应。我还有一个运行的批处理文件,它通过本地服务器成功地发送电子邮件。关于我为什么不能通过iMail的JavaMail API--java.net.SocketException:权限被拒绝:连接,java,jakarta-mail,permission-denied,socketexception,Java,Jakarta Mail,Permission Denied,Socketexception,我很难让一个应用程序使用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());
}
}
将
-Djava.net.preferIPv4Stack=true
添加到VM选项中。另一种确认问题是否相同的方法是,在Netbeans中,右键单击项目>属性>库,然后选择JDK 6 Java平台(如果没有,请安装)。清理、构建然后重试。这将消除这个问题
如果要简化启动时代码中使用的应用程序调用(例如从CLI),请考虑:
System.setProperty(“java.net.preferIPv4Stack”,“true”)
假设应用程序将使用传统IPv4网络堆栈。JDK 7?检查这个家伙,我在我的NetBeans配置文件中添加了-Djava.net.preferIPv4Stack=true,但仍然存在错误。它仍然允许我通过gmail账户发送邮件。感谢您的快速响应。应该转到VM选项。另一种确认问题是否相同的方法是,在Netbeans中,右键单击项目>属性>库,然后选择JDK 6 Java平台(如果没有,请安装)。清理、构建然后重试。这将消除这个问题。非常感谢。这就是问题所在。我只是对NetBeans理解不够。我把“-Djava.net.preferIPv4Stack=true”放错了位置。将它添加到VM选项中,效果非常好。我有同样的例外,但我们使用的是Java8.171。它应该在那里工作吗?我现在已经用尽了所有的资源。
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