我正在尝试测试一个在线发现的简单程序,以便使用JavaMail发送电子邮件。我正在尝试使用工作电子邮件但是我收到错误"无法连接到SMTP主机:..."和"权限被拒绝:连接"。我已经查看了有关此问题的其他帖子,包括:
JavaMail Exchange Authentication
JavaMail API to iMail -- java.net.SocketException: Permission denied: connect
我认为我已经解决了那些基本上是IPv4问题和身份验证的帖子解决方案中提到的问题。我是尝试使用JavaMail的新手,所以我想知道我是否在制作其他初学者错误。还有其他我忽略的事情吗?我是否有可能以这种方式访问服务器?我使用的是通用名称而不是我公司的实际名称。
代码如下:
public static void main(String[] args)
{
System.setProperty("java.net.preferIPv4Stack" , "true");
String host="mail.company.com";
final String user="user@company.com";//change accordingly
final String password="XXXXXXXX";//change accordingly
String to="user@company.com";//change accordingly
//Get the session object
Properties props = new Properties();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(user,password);
}
});
//Compose the message
try
{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject("javatpoint");
message.setText("This is simple program of sending email using JavaMail API");
//send the message
Transport.send(message);
System.out.println("message sent successfully...");
}
catch (MessagingException e)
{
e.printStackTrace();
}
}
堆栈追踪:
javax.mail.MessagingException: Could not connect to SMTP host: mail.company.com, port: 25;
nested exception is:
java.net.SocketException: Permission denied: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
at javax.mail.Service.connect(Service.java:313)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at mailtesting.SendMailBySite.main(SendMailBySite.java:45)
Caused by: java.net.SocketException: Permission denied: connect
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
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:284)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)
... 7 more
答案 0 :(得分:4)
java.net.SocketException: Permission denied: connect
这意味着您已连接到服务器和端口以及服务器主动拒绝您的连接。
如果您尝试telnet
到此服务器和端口,您可能会获得更具描述性的消息,无论哪种方式,该端口都无法正常工作。
端口25
很可能被阻止作为安全措施,这对于大多数公司来说都是非常标准的设置。
由于您使用Outlook无法在设置中找到端口,我假设您正在连接到Exchange服务器,如果您的整个公司都是Microsoft Outlook,则可能根本不启用SMTP
店。