通过Spring启动发送电子邮件“spring-boot-starter-mail”

我正在尝试使用spring boot发送电子邮件,但我得到:

java.lang.UnsupportedOperationException: Method not yet implemented at javax.mail.internet.MimeMessage.(MimeMessage.java:89) at org.springframework.mail.javamail.SmartMimeMessage.(SmartMimeMessage.java:52) at org.springframework.mail.javamail.JavaMailSenderImpl.createMimeMessage(JavaMailSenderImpl.java:325) 

我使用过这个maven条目:

   org.springframework.boot spring-boot-starter-parent 1.2.6.RELEASE   org.springframework.boot spring-boot-starter-web 1.2.6.RELEASE   org.springframework.boot spring-boot-starter-mail 1.2.6.RELEASE  

application.properties:

 spring.mail.host=smtp.gmail.com spring.mail.port= 25 spring.mail.username= test spring.mail.password= test 

我的代码:

 @Autowired private JavaMailSender javaMailSender; private void send() { MimeMessage mail = javaMailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(mail, true); helper.setTo("mymail@mail.co.uk"); helper.setReplyTo("someone@localhost"); helper.setFrom("someone@localhost"); helper.setSubject("Lorem ipsum"); helper.setText("Lorem ipsum dolor sit amet [...]"); } catch (MessagingException e) { e.printStackTrace(); } finally {} javaMailSender.send(mail); //return helper; } 

这似乎是一个直截了当但不是我错过了什么!

我的建议是使用it.ozimov:spring-boot-email-core库,它将所有这些实现隐藏在名为EmailService的单个组件EmailService – 好吧,我也在开发库:)。

你的例子是:

 @Autowired public EmailService emailService; public void sendEmail(){ final Email email = DefaultEmail.builder() .from(new InternetAddress("mymail@mail.co.uk")) .replyTo(new InternetAddress("someone@localhost")) .to(Lists.newArrayList(new InternetAddress("someone@localhost"))) .subject("Lorem ipsum") .body("Lorem ipsum dolor sit amet [...]") .encoding(Charset.forName("UTF-8")).build(); emailService.send(email); } 

使用以下application.properties

 spring.mail.host=your.smtp.com spring.mail.port=587 spring.mail.username=test spring.mail.password=test spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true 

它还支持一些模板引擎,如FreemarkerMustachePebble ,同时您可以扩展它以使用更多的模板引擎。 此外,它还支持电子邮件安排和优先级(例如,密码恢复的高优先级和简报的低优先级。

LinkedIn上有一篇文章解释了如何使用它。 它就在这里 。

除了通过spring-boot-starter-mail引入的版本之外,您还在类路径上有第二个版本的javax.mail.internet.MimeMessage 。 常见的罪魁祸首是Geronimo的JavaMail spec jar。 无论它是哪个jar,您都需要将它从应用程序的依赖项中排除。 如果你不确定它来自哪里,用-verbose:class运行你的应用程序会告诉你。

不要使用javaMailSender.createMimeMessage(); 尝试使用MimeMessagePreparatorMimeMessageHelper