简体   繁体   English

springboot发送邮件时出现空格错误如何解决?

[英]How can I solve whitespace error when sending mail in springboot?

I am trying to send an email from spring boot, but I am getting the following error.我正在尝试从 spring 引导发送 email,但出现以下错误。

org.springframework.mail.MailSendException: Failed messages: jakarta.mail.internet.AddressException: Local address contains control or whitespace in string ``; message exception details (1) are:
Failed message 1:
jakarta.mail.internet.AddressException: Local address contains control or whitespace in string ``
    at jakarta.mail.internet.InternetAddress.checkAddress(InternetAddress.java:1345)
    at jakarta.mail.internet.InternetAddress.parse(InternetAddress.java:1193)
    at jakarta.mail.internet.InternetAddress.parseHeader(InternetAddress.java:755)
    at jakarta.mail.internet.MimeMessage.getAddressHeader(MimeMessage.java:746)
    at jakarta.mail.internet.MimeMessage.getFrom(MimeMessage.java:374)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1773)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1317)
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:465)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:361)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:356)
    at email.exist.EmailServiceImpl.sendSimpleMessage(EmailServiceImpl.java:77)
    at email.exist.EmailController.emailConfirm(EmailController.java:29)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1080)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:973)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1010)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:913)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:884)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:859)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1734)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:833)

I checked both the recipient's email address and the sender's email address, but there was no whitespace.我检查了收件人的 email 地址和发件人的 email 地址,但没有空格。

Currently, the files for my email transmission are as follows目前我的email传输的文件如下

  1. properties - I have the following settings in the properties属性 - 我在属性中有以下设置
mail.smtp.auth=true
mail.smtp.starttls.required=true
mail.smtp.starttls.enable=true
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback=false
mail.smtp.port=465
mail.smtp.socketFactory.port=465
 
# admin google account
AdminMail.id = 'account@gmail.com'
AdminMail.password = 'use AppPassword'
  1. EmailConfig - A file that sets the sender email address, this part works fine EmailConfig - 设置发件人 email 地址的文件,这部分工作正常
  2. EmailController - This part also works fine EmailController - 这部分也可以正常工作
  3. EmailService - Interface for EmailServiceImpl EmailService - EmailServiceImpl 的接口
  4. EmailServiceImpl - I'm getting an error at this part EmailServiceImpl - 我在这部分遇到错误
import java.util.Random;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;
import jakarta.mail.internet.MimeMessage.RecipientType;
 
@Service
public class EmailServiceImpl implements EmailService{
    @Autowired
    JavaMailSender emailSender;
 
    public static final String ePw = createKey();
 
    private MimeMessage createMessage(String to)throws Exception{
        System.out.println(to);
        System.out.println(ePw);
        MimeMessage  message = emailSender.createMimeMessage();
        message.addRecipients(RecipientType.TO, to);
        message.setSubject("Email send test");
 
        String msgg="";
        msgg+= "<div style='margin:20px;'>";
        msgg+= "<h1>Hello1</h1>";
        msgg+= "<br>";
        msgg+= "<p>please paste this code<p>";
        msgg+= "<br>";
        msgg+= "<p>thank you<p>";
        msgg+= "<br>";
        msgg+= "<div align='center' style='border:1px solid black; font-family:verdana';>";
        msgg+= "<h3 style='color:blue;'>Sign Up code</h3>";
        msgg+= "<div style='font-size:130%'>";
        msgg+= "CODE : <strong>";
        msgg+= ePw+"</strong><div><br/> ";
        msgg+= "</div>";
  
        return message;
    }
 
    public static String createKey() {
        StringBuffer key = new StringBuffer();
        Random rnd = new Random();
 
        for (int i = 0; i < 8; i++) {
            int index = rnd.nextInt(3);
 
            switch (index) {
                case 0:
                    key.append((char) ((int) (rnd.nextInt(26)) + 97));
                    //  a~z  (ex. 1+97=98 => (char)98 = 'b')
                    break;
                case 1:
                    key.append((char) ((int) (rnd.nextInt(26)) + 65));
                    //  A~Z
                    break;
                case 2:
                    key.append((rnd.nextInt(10)));
                    // 0~9
                    break;
            }
        }
        return key.toString();
    }
    @Override
    public String sendSimpleMessage(String to)throws Exception {
        // TODO Auto-generated method stub
        MimeMessage message = createMessage(to);
        try{
            emailSender.send(message);
        }catch(MailException es){
            es.printStackTrace();
            throw new IllegalArgumentException();
        }
        return ePw;
    }

I confirmed that an error occurs when calling emailSender.send(message) in the sendSimpleMessage method.我确认在 sendSimpleMessage 方法中调用 emailSender.send(message) 时发生错误。

Both the recipient's and sender's e-mail addresses were checked, and the smtp settings of the e-mail were also checked.检查了收件人和发件人的电子邮件地址,还检查了电子邮件的 smtp 设置。 App password for gmail was also applied.应用程序密码 gmail 也被应用。

Update I solved it by adding the code below to the createMessage method.更新我通过将下面的代码添加到 createMessage 方法来解决它。

message.setText(msgg, "utf-8", "html");
message.setFrom(new InternetAddress("sender email in properties","
sender's name"));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何解决TestNG和Springboot的问题 - How can i solve the problem about TestNG and Springboot Springboot如何解决Whitelabel错误页面 - How to solve Whitelabel Error page Springboot 使用 Thymeleaf 运行 SpringBoot 应用程序时,如何解决此 404 错误? - How can I resolve this 404 error when running a SpringBoot app with Thymeleaf? 在spring boot项目中,当我单击Submit按钮时,如何解决Whitelabel Error Page Error, - In spring boot project, When I click submit button, how can I solve Whitelabel Error Page Error, springboot中deleteById怎么解决? - How to solve deleteById in springboot? 如何在 kotlin 上修复 springboot 中的初始化错误? - how can i fix initialized error in springboot on kotlin? 将对象添加到arraylist时,如何在Springboot上创建触发器? - How can I create a trigger on Springboot when an object is added to an arraylist? 与springboot的controller连接时如何解决cors错误 - how to solve cors error while connecting react with controller of springboot 如何解决springboot中的这个错误考虑将其中一个bean标记为@Primary ...? - how to solve this error in springboot Consider marking one of the beans as @Primary…? SpringBoot 简单问题我没有找到如何解决这个问题的解决方案 - SpringBoot Simple Question i don't find the solution how to solve this
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM