【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout 您所在的位置:网站首页 qq邮箱无法连接到服务器 【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout

【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout

#【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout | 来源: 网络整理| 查看: 265

问题描述 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 = "[email protected]";// 发送邮件的人 private static String password = "xiaorui123";// 发送邮件的账户的密码 private static String userName2 = "[email protected]";// 接收邮件的人 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("测试邮件:来自[email protected]的邮件", "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(); } } }

查看结果,运行成功。

参考:

Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)javaMail学习(三)——使用javaMail给易邮邮账户发简单邮件使用WinWebMail 简单搭建一个局域网邮件服务 并 测试为什么搭建的winmail邮件服务器不能发送Q.Q邮件?使用 Winmail Server 轻松架设邮件服务器


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有