【发布时间】:2016-02-18 21:48:09
【问题描述】:
我编写了一个使用 Java API 发送电子邮件的简单程序。下面是代码。以下是我收到的错误消息。
String host = "172.16.100.185";
final String user = "anand.rajendran@*****.net";
String to = "anand.rajendran@*****.net";
// Get the session object
Properties props = new Properties();
props.put("mail.smtp.host", host);
//props.put("mail.smtp.port", "587");
Session session = Session.getDefaultInstance(props,null);
// Compose the message
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("My subject");
message.setText("This is simple program of sending email using JavaMail API");
// send the message
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
错误:
javax.mail.MessagingException: Could not connect to SMTP host: 172.16.100.185, port: 25;
nested exception is:
java.net.SocketException: Permission denied: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at com.photon.bigdata.heartbeat.service.impl.HeartBeatServiceImpl.sendFailureReportEmail(HeartBeatServiceImpl.java:167)
at com.photon.bigdata.heartbeat.controller.HeartBeatController.sendReport(HeartBeatController.java:62)
at com.photon.bigdata.heartbeat.controller.HeartBeatController.main(HeartBeatController.java:33)
Caused by: java.net.SocketException: Permission denied: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
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:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 9 more
仅供参考,我也尝试了以下方法。
1) 我尝试了端口号:25、465 和 587。
props.put("mail.smtp.port", "465");
props.put("mail.smtp.port", "587");
2) 检查主机中 sendMail 的状态
[root@stormcluster1 ~]# service sendmail status
sendmail (pid 13898) is running...
sm-client (pid 13910) is running...
3) 在主机中,我检查了 SMTP 服务器是否正在侦听端口 25
[root@stormcluster1 ~]# lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sendmail 13898 root 4u IPv4 2172898 0t0 TCP localhost:smtp (LISTEN)
4) 能够从 Linux 终端发送电子邮件
我成功地能够使用以下命令从 SMPT 服务器已启动并正在运行的 linux 框向我的电子邮件地址发送电子邮件。 mail -s "来自 44 的 sudo 访问" anand.rajendran@*****.net
【问题讨论】:
-
“权限被拒绝”表示运行 java 代码的机器上的防火墙阻止您的程序建立网络连接。你是在 Windows 上运行的吗?
-
是的,我在 windows 8.1 pro 上运行 java 代码。
-
@GK27:我已经尝试过这个选项,但也没有用。
-
Okies,但我没有看到任何类似的代码:)
标签: java email jakarta-mail sendmail