【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout -1;易邮SMTP服务器无法启动;
问题描述SMTP服务器25端口用不了。java发邮件无法连接。异常信息如下:com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1;nested exception is:java.net.ConnectException: Connection refuse
·
问题描述
- java发邮件无法连接。异常信息如下:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1;
nested exception is:
java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
at javax.mail.Service.connect(Service.java:388)
at javax.mail.Service.connect(Service.java:246)
at javax.mail.Service.connect(Service.java:195)
at javax.mail.Transport.send0(Transport.java:254)
at javax.mail.Transport.send(Transport.java:124)
at Mail.MailUtils2.sendMain(MailUtils2.java:81)
at Mail.MailUtils2.main(MailUtils2.java:88)
Caused by: java.net.ConnectException: Connection refused: connect
at java.base/sun.nio.ch.Net.connect0(Native Method)
at java.base/sun.nio.ch.Net.connect(Net.java:574)
at java.base/sun.nio.ch.Net.connect(Net.java:563)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
at java.base/java.net.Socket.connect(Socket.java:648)
at java.base/java.net.Socket.connect(Socket.java:597)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:359)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
... 8 more
- SMTP服务器25端口用不了。
解决方案
查看网络上博客之后,发现是25端口并没有启动,控制面板-》…-》服务查看不到,即SMTP服务并没有启动。
所以接下来又想怎样下载SMTP服务,但失败。
最后我用Winmail Mail Server替换了易邮服务器,最终java代码运行成功。
第一步,下载&安装Winmail Mail Server
旧版本6.5网址
https://www.winmail.cn/download_old.php
可试用90天。
安装步骤一直next即可,两个都选择。最终安装后得到:
第二步,启动Winmail Mail Server,并使用Mail管理工具。
选择上面,开启Mail服务器。应该会弹窗
可以不用管,这个界面是用email地址和密码生成email的第一种方法。可以用方法二,在登录管理工具之后,添加用户生成email。
点击下面一个管理工具,启动界面
- 本地主机的意思是,将mail服务器运行在自己的电脑上(一般运行在服务器上)。【1】
- 远程主机,可以通过第一种添加用户生成的ip地址登录,端口默认即可。
- 登录用户中的用户名即管理员,不用改。密码是安装时设置的那个。
登录进去第一件事,设置域名管理
进去第二步,添加用户组&用户。
到这个时候,整个Mail服务器上就有了刚刚添加的用户信息,也就是说
- 服务器上分配给用户存储,用于存储mail内容。
- 用户可以通过mail终端软件,登录mail服务器,查看mail内容。【1】
第三步,使用Foxmail终端软件操作Winmail服务器上mail内容
1. 下载官网
https://www.foxmail.com
2. 登录mail用户
a. 选择其他登录方式
b. 用邮箱名和创建时设置的密码登录即可
c. 设置POP服务器和SMTP服务器。即mail服务器运行的机器ip地址。
3. 测试一下能否正常发送接收消息。
第四步,正题,运行java代码实现发送邮件
1. 设置用户一的邮件地址和密码,用户二的邮件地址。正常代码运行。代码如下:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 邮件发送的工具类 使用eyoumailserver,内部账户发邮件
*/
/*
* javax.mail.Session:上下文环境信息,如服务器的主机名、端口号、协议名称等
* javax.mail.Message:邮件模型,发送邮件和接收邮件的媒介,封装了邮件的信息,如发件人、收件人、邮件标题、邮件内容等
* javax.mail.Transport:连接邮件SMTP服务器,发送邮件 javax.mail.Store:连接邮件POP3、IMAP服务器,收取邮件
*/
public class MailUtils2 {
private static String userName = "xiaorui@wm.com";// 发送邮件的人
private static String password = "xiaorui123";// 发送邮件的账户的密码
private static String userName2 = "xiaotang@wm.com";// 接收邮件的人
private static String port = "25";// 465、587,默认25
/**
* 该方法用来发送邮件
*
* @param to:给谁发邮件
**/
public static void sendMain(String to) throws AddressException, MessagingException {
// 1、创建连接对象,连接到邮箱服务器
Properties props = new Properties();
// 开启debug调试
props.setProperty("mail.debug", "true");
// stmp服务器需要进行身份验证,也就是有户名和密码的校验,这样才能通过验证
props.setProperty("mail.smtp.auth", "true");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
// 设置邮件服务器主机名
props.setProperty("mail.host", "127.0.0.1");// 本地"localhost"
// 设端口号(该配置可写可不写)
props.setProperty("mail.smtp.port", port);
// Authenticator:认证信息
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);// 使用它给其他账户发邮件
}
});
// 2、创建邮件对象
Message message = new MimeMessage(session);
// 2.1设置发件人
message.setFrom(new InternetAddress(userName));
// 2、2设置收件人
message.addRecipient(RecipientType.TO, new InternetAddress(to));
// 2.3邮件的主题
message.setSubject("测试发消息");
// 2.4邮件的正文(即邮件的内容)
message.setContent("测试邮件:来自xiaorui@wm.com的邮件", "text/html;charset=utf-8");
// 3.发送邮件
// Transport trans = session.getTransport();
// //连接邮件服务器
// trans.connect(userName, password);
// //发送邮件
// trans.sendMessage(message, message.getAllRecipients());
// //关闭连接
// trans.close();
Transport.send(message);// (两种方式都可以)
System.out.println("发送成功");
}
public static void main(String[] args) {
try {
sendMain(userName2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
查看结果,运行成功。
参考:
更多推荐
已为社区贡献2条内容
所有评论(0)