spring boot exhange online

时间:2017-09-11 11:20:48

标签: java spring spring-boot exchange-server

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

以下是我的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$$23a8aea1.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$1.call(AsyncExecutionInterceptor.java:115)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at com.xxx.xxx.config.util.ExceptionHandlingAsyncTaskExecutor.lambda$createWrappedRunnable$1(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

1 个答案:

答案 0 :(得分:0)

我可以看到,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