代码之家  ›  专栏  ›  技术社区  ›  Alexei

可以通过Spring Boot从gmail.com发送电子邮件

  •  0
  • Alexei  · 技术社区  · 6 年前

    在我的spring boot应用程序中:

    implementation 'org.springframework.boot:spring-boot-starter'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.boot:spring-boot-starter-mail'
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.stereotype.Component;
    
    @Component
    public class EmailService {
    
    @Autowired
        private JavaMailSender javaMailSender;
    
    
        public void sendEmail(String emailTo, NotifyActionEnum actionEnum, String orderId)
                throws AddressException, MessagingException, IOException {
            String subject = "Order with number " + orderId + " was success";           
            SimpleMailMessage msg = new SimpleMailMessage();
            msg.setTo(emailTo);
            msg.setSubject("Order notification: " + appName + " ver." + appVersion);
            msg.setText(subject);
            javaMailSender.send(msg);
        }
    

    在application.yml中:

    server:
      port: 8091
      servlet:
        contextPath: /api/v1
    
    spring:
      application:
        name: My app name
      http:
        converters:
          preferred-json-mapper: gson
      mail:
        host: smtp.gmail.com
        port: 587
        username: some_my_account@gmail.com
        password: some_my_account_pass
        tls: true
        properties.mail.smtp:
          auth: true
          starttls.enable: true
          ssl.trust: smtp.gmail.com
    

    2020-03-08 18:18:17.753  INFO 16092 --- [nio-8091-exec-1] r.o.s.e.controllers.NotifyController     : notifyByEmail: email = a_subscriber@mail.ru, notifyActionEnum = ORDER_DELETE, orderId = 10
    2020-03-08 18:18:23.189 ERROR 16092 --- [nio-8091-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet]      : Servlet.service() for servlet [dispatcherServlet] in context with path [/api/v1] threw exception [Request processing failed; nested exception is org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
    535 5.7.8  https://support.google.com/mail/?p=BadCredentials l3sm57702489wrq.62 - gsmtp
    ] with root cause
    
    javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
    535 5.7.8  https://support.google.com/mail/?p=BadCredentials l3sm57702489wrq.62 - gsmtp
    
        at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:947) ~[jakarta.mail-1.6.4.jar:1.6.4]
        at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:858) ~[jakarta.mail-1.6.4.jar:1.6.4]
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:762) ~[jakarta.mail-1.6.4.jar:1.6.4]
        at javax.mail.Service.connect(Service.java:342) ~[jakarta.mail-1.6.4.jar:1.6.4]
        at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:518) ~[spring-context-support-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:437) ~[spring-context-support-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:323) ~[spring-context-support-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:312) ~[spring-context-support-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at com.myprojectservice.EmailService.sendEmail(EmailService.java:47) ~[main/:na]
        at com.myprojectcontrollers.NotifyController.notifyByEmail(NotifyController.java:33) ~[main/:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
    

    P、 但是如果我在gmail.com上打开浏览器,我就可以通过我的证书成功登录gmail.com。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Petar Bivolarski    6 年前

    你必须使用 App password

    另外,请打开 less secure app access

        2
  •  0
  •   rieckpil    6 年前

    您不应该使用您的个人密码登录您的Spring Boot应用程序。考虑创建应用程序密码。

    有一个 good tutorial