发送JavaMail时发生MailConnectException

发送JavaMail时发生MailConnectException,java,jsp,maven,servlets,jakarta-mail,Java,Jsp,Maven,Servlets,Jakarta Mail,我正在尝试从servlet发送JavaMail。servlet的代码如下所示: package com.lsp.web; import com.lsp.service.Mailer; import org.springframework.beans.factory.annotation.Autowired; import javax.mail.MessagingException; import javax.servlet.ServletException; import javax.ser

我正在尝试从servlet发送JavaMail。servlet的代码如下所示:

package com.lsp.web;

import com.lsp.service.Mailer;
import org.springframework.beans.factory.annotation.Autowired;

import javax.mail.MessagingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "contact", urlPatterns = {"/contact"})
public class ContactServlet extends SpringInjectedServlet {
    @Autowired
    private Mailer mailer;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("contact.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String customerEmail = req.getParameter("email");
        String subject = req.getParameter("subject");
        String body = req.getParameter("message");

        String error = null;
        String succMess = null;

        try {
            javax.mail.internet.InternetAddress ia = new javax.mail.internet.InternetAddress(customerEmail);
            ia.validate();
            mailer.send(customerEmail, subject, body); //Maler class send method
            req.setAttribute("succMessage", succMess);
            req.getRequestDispatcher("sent.jsp").forward(req, resp);

        } catch (javax.mail.internet.AddressException ae) {
            error = "您指出的邮箱地址不存在";
            req.setAttribute("errorMessage", error);
            req.getRequestDispatcher("contact.jsp").forward(req, resp);
        }
        catch (MessagingException mex) {
            error = "发送失败";
            req.setAttribute("errorMessage", error);
            req.getRequestDispatcher("contact.jsp").forward(req, resp);
        }
    }
}
那么我的邮件类是:

package com.lsp.service;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

@Component
public class Mailer {
    private static final Logger log = Logger.getLogger(Mailer.class);

    public Mailer() {
        log.info("I'm newed.");
    }

    public void send(String from, String subject, String body) {
        String to = "jshao745@gmail.com";
        String host = "localhost";

        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", host);

        Session session = Session.getDefaultInstance(properties);

        try{
            // Create a default MimeMessage object.
            MimeMessage message = new MimeMessage(session);

            // Set From: header field of the header.
            message.setFrom(new InternetAddress(from));

            // Set To: header field of the header.
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

            // Set Subject: header field
            message.setSubject(subject);

            // Send the actual HTML message, as big as you like
            message.setText(body);

            // Send message
            Transport.send(message);
            System.out.println("Sent message successfully....");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}
在点击jsp页面的提交表单上的提交(或发送)按钮后,我得到一个异常,说:

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1;
nested exception is:java.net.SocketException: Network is unreachable: connect
25号端口是从哪里来的?为什么我会遇到这个异常,如何解决它

如果有人能帮助我,我将不胜感激。
谢谢。

解决这个问题的方法是:

1.)设置smtp服务,以便会话可以连接到某些内容并将smtp邮件排队。在Windows上很容易使用,只需下载、解压缩并执行run.bat。将有一个服务在localhost:25上运行

2.)使用
getDefaultInstance
设置一些默认属性,而
getInstance
会敦促您创建一组属性,以便客户端可以连接到SMTP服务。看看哪一个更适合你


3.)阅读有关SMTP的信息。如果您希望您的代码只使用客户端发送消息,那么您确实需要提高这方面的知识。

我将getDefaultInstance(属性)更改为getInstance(属性),但仍然给了我相同的异常。1)您的问题的答案是:您没有在代码中设置端口,如链接的问题所示。2.)您确定在localhost:25中运行sendmail/apache james/其他smtp服务吗???如何检查第二部分?检查清单:1.)是否安装了smtp服务?2)您使用的是什么操作系统?--如果使用Windows,几乎可以肯定您不会这样做,您的测试将永远无法工作;如果是Unix/Linux,请在终端中键入“sendmail-h”以检查它是否可用。不过,我正在运行Tomcat。Tomcat是一个web容器。它不提供smtp中继服务。谢谢。我将继续下载ApacheJames,但我也想要我的TomcatRuuning。