JavaMail连接问题
我正在尝试测试一个简单的程序,该程序可以在线使用JavaMail发送电子邮件。我正在尝试使用工作电子邮件,但出现错误“无法连接到SMTP主机:…”和“权限被拒绝:连接”。我浏览了关于这个问题的其他帖子,包括: 我想我已经解决了这些帖子的解决方案中提到的问题,基本上是IPv4问题和身份验证。我对尝试使用JavaMail还不熟悉,所以我想知道我是否犯了一些其他初学者的错误。还有其他我忽略的东西吗?我是否可能无法以这种方式访问服务器?我使用的是通用名称,而不是公司的实际名称 代码如下:JavaMail连接问题,java,email,jakarta-mail,exchange-server,permission-denied,Java,Email,Jakarta Mail,Exchange Server,Permission Denied,我正在尝试测试一个简单的程序,该程序可以在线使用JavaMail发送电子邮件。我正在尝试使用工作电子邮件,但出现错误“无法连接到SMTP主机:…”和“权限被拒绝:连接”。我浏览了关于这个问题的其他帖子,包括: 我想我已经解决了这些帖子的解决方案中提到的问题,基本上是IPv4问题和身份验证。我对尝试使用JavaMail还不熟悉,所以我想知道我是否犯了一些其他初学者的错误。还有其他我忽略的东西吗?我是否可能无法以这种方式访问服务器?我使用的是通用名称,而不是公司的实际名称 代码如下: publ
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
这意味着您已连接到服务器和端口,并且服务器主动拒绝您的连接
如果您尝试将telnet
发送到此服务器和端口,您可能会收到一条更具描述性的消息,无论哪种方式,该端口都无法工作
端口25
很可能被阻止作为安全措施,这是大多数公司的标准设置
由于您使用的Outlook在设置中找不到端口,因此我假设您正在连接到Exchange服务器,如果您的整个公司都是Microsoft Outlook商店,则可能根本没有启用SMTP
您需要联系您的系统管理员团队,了解您实际应该使用的端口和协议。
这意味着您已连接到服务器和端口,并且服务器主动拒绝您的连接
如果您尝试将telnet
发送到此服务器和端口,您可能会收到一条更具描述性的消息,无论哪种方式,该端口都无法工作
端口25
很可能被阻止作为安全措施,这是大多数公司的标准设置
由于您使用的Outlook在设置中找不到端口,因此我假设您正在连接到Exchange服务器,如果您的整个公司都是Microsoft Outlook商店,则可能根本没有启用SMTP
您需要联系您的系统管理员团队,以了解您实际应该使用的端口和协议。我尝试在DOS提示符下ping mail.company.com命令,看起来电子邮件服务已启动并正在运行。查看消息时,您未提供正确的身份验证,因此不允许您连接。您是否尝试打开会话调试?这应该会提供一些额外的信息。确切的错误是什么?请提供完整的堆栈跟踪。如果您仍然收到SocketException,我猜目标邮件服务器不允许在端口25(未加密SMTP的默认端口)上进行连接。现代服务器加密电子邮件传输。尝试添加
props.put(“mail.smtp.port”,“587”)
和props.put(“mail.smtp.starttls.enable”,“true”)代码>。询问系统管理员可能是个不错的选择,是的。如果您将该服务器用于自己的电子邮件,您可能可以在自己邮件客户端的帐户设置(Thunderbird、Outlook等)中找到该端口。我尝试在DOS提示符下ping mail.company.com命令,看起来电子邮件服务已启动并运行。查看消息时,您未提供正确的身份验证,因此不允许您连接。您是否尝试打开会话调试?这应该会提供一些额外的信息。确切的错误是什么?请提供完整的堆栈跟踪。如果您仍然收到SocketException,我猜目标邮件服务器不允许在端口25(未加密SMTP的默认端口)上进行连接。现代服务器加密电子邮件传输。尝试添加props.put(“mail.smtp.port”,“587”)
和props.put(“mail.smtp.starttls.enable”,“true”)代码>。询问系统管理员可能是个不错的选择,是的。如果您将该服务器用于自己的电子邮件,则可以在您自己的邮件客户端的帐户设置(Thunderbird、Outlook等)中找到该端口。已保存“我的日常助手”。谢谢,救了我的命。谢谢
java.net.SocketException: Permission denied: connect