Java 使用spring发送邮件时发生异常

Java 使用spring发送邮件时发生异常,java,spring,jakarta-ee,Java,Spring,Jakarta Ee,我正在尝试用Java发送邮件,我在谷歌上搜索了一下,发现了一些代码,并尝试运行它,但它给了我一个例外: 我在项目上使用SpringHibernate集成。在这项工作中,我有xml文件来获取bean,jsp页面包含一个按钮、控制器和一个java类 Exception in MAILMAIL.JAVA:org.springframework.mail.MailSendException; nested exceptions (0) are: 10:11:28,979 ERROR [STDERR] o

我正在尝试用Java发送邮件,我在谷歌上搜索了一下,发现了一些代码,并尝试运行它,但它给了我一个例外: 我在项目上使用SpringHibernate集成。在这项工作中,我有xml文件来获取bean,jsp页面包含一个按钮、控制器和一个java类

Exception in MAILMAIL.JAVA:org.springframework.mail.MailSendException; nested exceptions (0) are:
10:11:28,979 ERROR [STDERR] org.springframework.mail.MailSendException; nested exceptions (0) are:
10:11:28,979 ERROR [STDERR]     at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.j    ava:419)
10:11:28,979 ERROR [STDERR]     at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.jav    a:308)
10:11:28,979 ERROR [STDERR]     at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.jav    a:297)
10:11:28,979 ERROR [STDERR]     at com.sample.other.MailMail.sendMail(MailMail.java:24)
10:11:28,979 ERROR [STDERR]     at com.sample.web.MailController.handleRequestInternal(MailController.java:61)
10:11:28,979 ERROR [STDERR]     at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractCon    troller.java:153)
10:11:28,979 ERROR [STDERR]     at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(Simple    ControllerHandlerAdapter.java:48)
10:11:28,979 ERROR [STDERR]     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.j    ava:861)
10:11:28,979 ERROR [STDERR]     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.ja    va:795)
10:11:28,979 ERROR [STDERR]     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet    .java:476)
10:11:28,979 ERROR [STDERR]     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:44    1)
10:11:28,980 ERROR [STDERR]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
10:11:28,980 ERROR [STDERR]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt    erChain.java:290)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.    java:206)
10:11:28,980 ERROR [STDERR]     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:9    6)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt    erChain.java:235)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.    java:206)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:2    35)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:1    91)
10:11:28,980 ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociatio    nValve.java:190)
10:11:28,980 ERROR [STDERR]     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
10:11:28,980 ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(Security    ContextEstablishmentValve.java:126)
10:11:28,980 ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityC    ontextEstablishmentValve.java:70)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
10:11:28,980 ERROR [STDERR]     at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionVa    lve.java:158)
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109    )
10:11:28,980 ERROR [STDERR]     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
10:11:28,980 ERROR [STDERR]     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
10:11:28,980 ERROR [STDERR]     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Pr    otocol.java:601)
10:11:28,980 ERROR [STDERR]     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
10:11:28,980 ERROR [STDERR]     at java.lang.Thread.run(Thread.java:745)
10:11:28,980 ERROR [STDERR] Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
  nested exception is:
java.net.SocketException: Permission denied: connect
10:11:28,980 ERROR [STDERR]     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
10:11:28,981 ERROR [STDERR]     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
10:11:28,981 ERROR [STDERR]     at javax.mail.Service.connect(Service.java:275)
10:11:28,981 ERROR [STDERR]     at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.j    ava:389)
10:11:28,981 ERROR [STDERR]     ... 32 more
10:11:28,981 ERROR [STDERR] Caused by: java.net.SocketException: Permission denied: connect
10:11:28,981 ERROR [STDERR]     at java.net.DualStackPlainSocketImpl.connect0(Native Method)
10:11:28,981 ERROR [STDERR]     at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79    )
10:11:28,981 ERROR [STDERR]     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
10:11:28,981 ERROR [STDERR]     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:2    00)
10:11:28,981 ERROR [STDERR]     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
10:11:28,981 ERROR [STDERR]     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
10:11:28,981 ERROR [STDERR]     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
10:11:28,981 ERROR [STDERR]     at java.net.Socket.connect(Socket.java:579)
10:11:28,981 ERROR [STDERR]     at java.net.Socket.connect(Socket.java:528)
10:11:28,981 ERROR [STDERR]     at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
10:11:28,981 ERROR [STDERR]     at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
10:11:28,981 ERROR [STDERR]     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
10:11:28,981 ERROR [STDERR]     ... 35 more
Index.jsp:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Mail A Link</h1>
<form name="mailsend" method="post" action="mailsend.do" id="employeeCreation">
<input type="submit" name="mailbutton" value="SEND LINK" id="mailbutton">
</form>
</body>
</html>
MailMail.java:

public void sendMail(String from, String to, String subject, String msg) {
    try{
    SimpleMailMessage message = new SimpleMailMessage(); 
    message.setFrom(from);
    message.setTo(to);
    message.setSubject(subject);
    message.setText(msg);
    mailSender.send(message);   
    }catch(Exception e){
        System.out.println("Exception in MAILMAIL.JAVA:"+e);
        e.printStackTrace();
    }
}
请帮我解决这个问题。我试了很多谷歌的代码。最后 得到了相同的异常:

10:11:28,980 ERROR [STDERR] Caused by: javax.mail.MessagingException: Could  not connect to SMTP host: smtp.gmail.com, port: 587;
nested exception is:
java.net.SocketException: Permission denied: connect
10:11:28,980 ERROR [STDERR]     at  com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
10:11:28,981 ERROR [STDERR]     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
10:11:28,981 ERROR [STDERR]     at javax.mail.Service.connect(Service.java:275)
10:11:28,981 ERROR [STDERR]     at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.j    ava:389)
10:11:28,981 ERROR [STDERR]     ... 32 more
如何解决?如果您有任何其他方法可以使用spring向有效的mailid发送消息,请提供代码。
谢谢你

没有身份验证,你不能使用GMail。您需要使用端口
465
而不是
587

请看一看

从任何电子邮件程序通过Gmail发送邮件的Gmail SMTP服务器设置如下:

Gmail SMTP server address: smtp.gmail.com
Gmail SMTP user name: Your full Gmail address (e.g. example@gmail.com)
Gmail SMTP password: Your Gmail password
    With Gmail 2-step authentication enabled, use an application-specific Gmail password.
Gmail SMTP port (TLS): 587
    Gmail SMTP port (SSL): 465 
Gmail SMTP TLS/SSL required: yes 
编辑:-

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class JavaEmail {

    Properties emailProperties;
    Session mailSession;
    MimeMessage emailMessage;

    public static void main(String args[]) throws AddressException,
            MessagingException {

        JavaEmail javaEmail = new JavaEmail();

        javaEmail.setMailServerProperties();
        javaEmail.createEmailMessage();
        javaEmail.sendEmail();
    }

    public void setMailServerProperties() {

        String emailPort = "587";//gmail's smtp port

        emailProperties = System.getProperties();
        emailProperties.put("mail.smtp.port", emailPort);
        emailProperties.put("mail.smtp.auth", "true");
        emailProperties.put("mail.smtp.starttls.enable", "true");

    }

    public void createEmailMessage() throws AddressException,
            MessagingException {
        String[] toEmails = { "some@emailid.com" };
        String emailSubject = "Java Email";
        String emailBody = "This is an email sent by JavaMail api.";

        mailSession = Session.getDefaultInstance(emailProperties, null);
        emailMessage = new MimeMessage(mailSession);

        for (int i = 0; i < toEmails.length; i++) {
            emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
        }

        emailMessage.setSubject(emailSubject);
        emailMessage.setContent(emailBody, "text/html");//for a html email
        //emailMessage.setText(emailBody);// for a text email

    }

    public void sendEmail() throws AddressException, MessagingException {

        String emailHost = "smtp.gmail.com";
        String fromUser = "your emailid here";//just the id alone without @gmail.com
        String fromUserEmailPassword = "your email password here";

        Transport transport = mailSession.getTransport("smtp");

        transport.connect(emailHost, fromUser, fromUserEmailPassword);
        transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
        transport.close();
        System.out.println("Email sent successfully.");
    }

}
import java.util.Properties;
导入javax.mail.Message;
导入javax.mail.MessaginException;
导入javax.mail.Session;
导入javax.mail.Transport;
导入javax.mail.internet.AddressException;
导入javax.mail.internet.InternetAddress;
导入javax.mail.internet.mimessage;
公共类JavaEmail{
财产和财产;
会议邮递会议;
mimessage电子邮件;
公共静态void main(字符串args[])引发AddressException,
消息异常{
JavaEmail JavaEmail=新的JavaEmail();
javaEmail.setMailServerProperties();
javaEmail.createEmailMessage();
javaEmail.sendmail();
}
public void setMailServerProperties(){
字符串emailPort=“587”;//gmail的smtp端口
emailProperties=System.getProperties();
emailProperties.put(“mail.smtp.port”,emailPort);
emailProperties.put(“mail.smtp.auth”,“true”);
emailProperties.put(“mail.smtp.starttls.enable”、“true”);
}
public void createEmailMessage()引发AddressException,
消息异常{
字符串[]toEmails={”some@emailid.com" };
字符串emailSubject=“Java电子邮件”;
String emailBody=“这是一封由JavaMail api发送的电子邮件。”;
mailSession=Session.getDefaultInstance(emailProperties,null);
emailMessage=新的mimessage(mailSession);
for(int i=0;i
非常感谢您周到的礼物。我成功地收到了邮件…我的网络中出现了端口号465的连接问题。今天就解决了

我只是尝试使用java应用程序 使用javamail-1.4.5.jar

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class MailSender
{
 final String senderEmailID = "typesendermailid@gmail.com";
 final String senderPassword = "typesenderpassword";
 final String emailSMTPserver = "smtp.gmail.com";
 final String emailServerPort = "465";
 String receiverEmailID = null;
 static String emailSubject = "Test Mail";
 static String emailBody = ":)";
 public MailSender(String receiverEmailID, String emailSubject, String emailBody)
 {
this.receiverEmailID=receiverEmailID;
this.emailSubject=emailSubject;
 this.emailBody=emailBody;
 Properties props = new Properties();
 props.put("mail.smtp.user",senderEmailID);
 props.put("mail.smtp.host", emailSMTPserver);
 props.put("mail.smtp.port", emailServerPort);
 props.put("mail.smtp.starttls.enable", "true");
 props.put("mail.smtp.auth", "true");
 props.put("mail.smtp.socketFactory.port", emailServerPort);
 props.put("mail.smtp.socketFactory.class",
 "javax.net.ssl.SSLSocketFactory");
 props.put("mail.smtp.socketFactory.fallback", "false");
 SecurityManager security = System.getSecurityManager();
 try
 {
 Authenticator auth = new SMTPAuthenticator();
 Session session = Session.getInstance(props, auth);
 MimeMessage msg = new MimeMessage(session);
 msg.setText(emailBody);
 msg.setSubject(emailSubject);
 msg.setFrom(new InternetAddress(senderEmailID));
 msg.addRecipient(Message.RecipientType.TO,
 new InternetAddress(receiverEmailID));
 Transport.send(msg);
 System.out.println("Message send Successfully:)");
 }
 catch (Exception mex)
 {
 mex.printStackTrace();
 }
 }
 public class SMTPAuthenticator extends javax.mail.Authenticator
 {
 public PasswordAuthentication getPasswordAuthentication()
 {
 return new PasswordAuthentication(senderEmailID, senderPassword);
 }
 }
 public static void main(String[] args)
 {     
 MailSender mailSender=new
 MailSender("typereceivermailid@gmail.com",emailSubject,emailBody);
 }
 }

你能把587号端口换成25号端口吗?你能试着准确地跟踪吗?您的配置与本教程使用的配置略有不同。如果您在端口587上运行,则需要tls,因此我猜,你必须添加你的配置。我试过了。但同样的问题。我将端口更改为465。同样的问题issue@GayathriRajan您添加了两个端口,您更改了这两个位置?您还有双向身份验证吗?:是的。我更改了两个端口字段。请运行添加的Java代码,并告诉我添加的结果Gmail/password此代码已成功运行…请尝试此代码。现在我尝试此代码以启动。
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class JavaEmail {

    Properties emailProperties;
    Session mailSession;
    MimeMessage emailMessage;

    public static void main(String args[]) throws AddressException,
            MessagingException {

        JavaEmail javaEmail = new JavaEmail();

        javaEmail.setMailServerProperties();
        javaEmail.createEmailMessage();
        javaEmail.sendEmail();
    }

    public void setMailServerProperties() {

        String emailPort = "587";//gmail's smtp port

        emailProperties = System.getProperties();
        emailProperties.put("mail.smtp.port", emailPort);
        emailProperties.put("mail.smtp.auth", "true");
        emailProperties.put("mail.smtp.starttls.enable", "true");

    }

    public void createEmailMessage() throws AddressException,
            MessagingException {
        String[] toEmails = { "some@emailid.com" };
        String emailSubject = "Java Email";
        String emailBody = "This is an email sent by JavaMail api.";

        mailSession = Session.getDefaultInstance(emailProperties, null);
        emailMessage = new MimeMessage(mailSession);

        for (int i = 0; i < toEmails.length; i++) {
            emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
        }

        emailMessage.setSubject(emailSubject);
        emailMessage.setContent(emailBody, "text/html");//for a html email
        //emailMessage.setText(emailBody);// for a text email

    }

    public void sendEmail() throws AddressException, MessagingException {

        String emailHost = "smtp.gmail.com";
        String fromUser = "your emailid here";//just the id alone without @gmail.com
        String fromUserEmailPassword = "your email password here";

        Transport transport = mailSession.getTransport("smtp");

        transport.connect(emailHost, fromUser, fromUserEmailPassword);
        transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
        transport.close();
        System.out.println("Email sent successfully.");
    }

}
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class MailSender
{
 final String senderEmailID = "typesendermailid@gmail.com";
 final String senderPassword = "typesenderpassword";
 final String emailSMTPserver = "smtp.gmail.com";
 final String emailServerPort = "465";
 String receiverEmailID = null;
 static String emailSubject = "Test Mail";
 static String emailBody = ":)";
 public MailSender(String receiverEmailID, String emailSubject, String emailBody)
 {
this.receiverEmailID=receiverEmailID;
this.emailSubject=emailSubject;
 this.emailBody=emailBody;
 Properties props = new Properties();
 props.put("mail.smtp.user",senderEmailID);
 props.put("mail.smtp.host", emailSMTPserver);
 props.put("mail.smtp.port", emailServerPort);
 props.put("mail.smtp.starttls.enable", "true");
 props.put("mail.smtp.auth", "true");
 props.put("mail.smtp.socketFactory.port", emailServerPort);
 props.put("mail.smtp.socketFactory.class",
 "javax.net.ssl.SSLSocketFactory");
 props.put("mail.smtp.socketFactory.fallback", "false");
 SecurityManager security = System.getSecurityManager();
 try
 {
 Authenticator auth = new SMTPAuthenticator();
 Session session = Session.getInstance(props, auth);
 MimeMessage msg = new MimeMessage(session);
 msg.setText(emailBody);
 msg.setSubject(emailSubject);
 msg.setFrom(new InternetAddress(senderEmailID));
 msg.addRecipient(Message.RecipientType.TO,
 new InternetAddress(receiverEmailID));
 Transport.send(msg);
 System.out.println("Message send Successfully:)");
 }
 catch (Exception mex)
 {
 mex.printStackTrace();
 }
 }
 public class SMTPAuthenticator extends javax.mail.Authenticator
 {
 public PasswordAuthentication getPasswordAuthentication()
 {
 return new PasswordAuthentication(senderEmailID, senderPassword);
 }
 }
 public static void main(String[] args)
 {     
 MailSender mailSender=new
 MailSender("typereceivermailid@gmail.com",emailSubject,emailBody);
 }
 }