spring 开机交流上线

spring boot exhange online

我想通过 Microsoft Exchange Server 从我的 Spring 启动应用程序发送邮件。

以下是我的 application.yml 文件中的属性:

spring    
    mail:
        host: smtp.office365.com
        port: 587
        username: email
        password: password
        properties:
            mail:
                smtp:
                    ssl:
                        enable: true

server:
    port: 8443
    ssl:
        key-store: keystore.p12
        key-store-password: password
        keyStoreType: PKCS12
        keyAlias: alias

我有一个自行生成的证书。

这是我的代码片段,它应该发送邮件:

MimeMessageHelper message = new MimeMessageHelper("message", false, CharEncoding.UTF_8);
message.setTo(to);
message.setFrom("email");
message.setSubject(subject);
message.setText(content, isHtml);
javaMailSender.send(mimeMessage);

当我在 localhost 上尝试它或在 Heroku 上使用已部署的版本时,我收到以下错误。

 
    org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587;
      nested exception is:
        javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587;
      nested exception is:
        javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
        at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:432)
        at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)
        at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
        at com.xxx.xxx.service.MailService.sendEmail(MailService.java:73)
        at com.xxx.xxx.service.MailService$$FastClassBySpringCGLIB$a8aea1.invoke()
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.aop.interceptor.AsyncExecutionInterceptor.call(AsyncExecutionInterceptor.java:115)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at com.xxx.xxx.config.util.ExceptionHandlingAsyncTaskExecutor.lambda$createWrappedRunnable(ExceptionHandlingAsyncTaskExecutor.java:46)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2120)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:712)
        at javax.mail.Service.connect(Service.java:366)
        at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:501)
        at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:421)
        ... 13 common frames omitted
    Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
        at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)
        at sun.security.ssl.InputRecord.read(InputRecord.java:527)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
        at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:598)
        at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:372)
        at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2084)
        ... 17 common frames omitted</p>

<p></pre>

如我所见,smtp.office365.com 使用 TLS 进行加密,而不是 SSL。尝试按如下方式更改您的 application.yml

spring    
    mail:
        host: smtp.office365.com
        port: 587
        username: email
        password: password
        properties:
            mail:
                smtp:
                    auth: true
                    starttls:
                        enable: true