diff --git a/README.md b/README.md index a16ef7b..058da6a 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Spring boot使用的各种示例,以最简单、最实用为标准 - [spring-boot-rabbitmq](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-rabbitmq):spring boot和rabbitmq各种消息应用案例 - [spring-boot-scheduler](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-scheduler):spring boot和定时任务案例 - [spring-boot-web](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-web):web开发综合使用案例 +- [spring-boot-mail](https://github.com/ityouknow/spring-boot-starter/tree/master/spring-boot-mail):spring boot和邮件服务 - [Favorites-web](https://github.com/cloudfavorites/favorites-web):云收藏(springboot实战开源软件) @@ -27,4 +28,6 @@ Spring boot使用的各种示例,以最简单、最实用为标准 - [springboot(七):springboot+mybatis多数据源最简解决方案](http://www.ityouknow.com/springboot/2016/11/25/springboot(%E4%B8%83)-springboot+mybatis%E5%A4%9A%E6%95%B0%E6%8D%AE%E6%BA%90%E6%9C%80%E7%AE%80%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.html) - [springboot(八):RabbitMQ详解](http://www.ityouknow.com/springboot/2016/11/30/springboot(%E5%85%AB)-RabbitMQ%E8%AF%A6%E8%A7%A3.html) - [springboot(九):定时任务](http://www.ityouknow.com/springboot/2016/12/02/springboot(%E4%B9%9D)-%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1.html) +- [springboot(十):邮件服务](http://www.ityouknow.com/life/2017/05/06/springboot-mail.html) - [springboot实战:我们的第一款开源软件](http://www.ityouknow.com/springboot/2016/09/26/springboot%E5%AE%9E%E6%88%98-%E6%88%91%E4%BB%AC%E7%9A%84%E7%AC%AC%E4%B8%80%E6%AC%BE%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6.html) + diff --git a/spring-boot-mail/pom.xml b/spring-boot-mail/pom.xml new file mode 100644 index 0000000..3056631 --- /dev/null +++ b/spring-boot-mail/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + com.neo + spring-boot-mail + 1.0.0 + jar + + spring-boot-mail + Demo project for Spring Boot and mail + + + org.springframework.boot + spring-boot-starter-parent + 1.5.3.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-devtools + true + + + org.springframework + spring-context-support + RELEASE + + + com.sun.mail + javax.mail + RELEASE + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + + + diff --git a/spring-boot-mail/src/main/java/com/neo/Application.java b/spring-boot-mail/src/main/java/com/neo/Application.java new file mode 100644 index 0000000..7ce4c64 --- /dev/null +++ b/spring-boot-mail/src/main/java/com/neo/Application.java @@ -0,0 +1,13 @@ +package com.neo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-boot-mail/src/main/java/com/neo/service/MailService.java b/spring-boot-mail/src/main/java/com/neo/service/MailService.java new file mode 100644 index 0000000..a294854 --- /dev/null +++ b/spring-boot-mail/src/main/java/com/neo/service/MailService.java @@ -0,0 +1,16 @@ +package com.neo.service; + +/** + * Created by summer on 2017/5/4. + */ +public interface MailService { + + public void sendSimpleMail(String to, String subject, String content); + + public void sendHtmlMail(String to, String subject, String content); + + public void sendAttachmentsMail(String to, String subject, String content, String filePath); + + public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId); + +} diff --git a/spring-boot-mail/src/main/java/com/neo/service/impl/MailServiceImpl.java b/spring-boot-mail/src/main/java/com/neo/service/impl/MailServiceImpl.java new file mode 100644 index 0000000..9053e6f --- /dev/null +++ b/spring-boot-mail/src/main/java/com/neo/service/impl/MailServiceImpl.java @@ -0,0 +1,138 @@ +package com.neo.service.impl; + +import com.neo.service.MailService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.FileSystemResource; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Component; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.io.File; + +/** + * Created by summer on 2017/5/4. + */ +@Component +public class MailServiceImpl implements MailService{ + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private JavaMailSender mailSender; + + @Value("${mail.fromMail.addr}") + private String from; + + /** + * 发送文本邮件 + * @param to + * @param subject + * @param content + */ + @Override + public void sendSimpleMail(String to, String subject, String content) { + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(from); + message.setTo(to); + message.setSubject(subject); + message.setText(content); + + try { + mailSender.send(message); + logger.info("简单邮件已经发送。"); + } catch (Exception e) { + logger.error("发送简单邮件时发生异常!", e); + } + + } + + /** + * 发送html邮件 + * @param to + * @param subject + * @param content + */ + @Override + public void sendHtmlMail(String to, String subject, String content) { + MimeMessage message = mailSender.createMimeMessage(); + + try { + //true表示需要创建一个multipart message + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(content, true); + + mailSender.send(message); + logger.info("html邮件发送成功"); + } catch (MessagingException e) { + logger.error("发送html邮件时发生异常!", e); + } + } + + + /** + * 发送带附件的邮件 + * @param to + * @param subject + * @param content + * @param filePath + */ + public void sendAttachmentsMail(String to, String subject, String content, String filePath){ + MimeMessage message = mailSender.createMimeMessage(); + + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(content, true); + + FileSystemResource file = new FileSystemResource(new File(filePath)); + String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); + helper.addAttachment(fileName, file); + //helper.addAttachment("test"+fileName, file); + + mailSender.send(message); + logger.info("带附件的邮件已经发送。"); + } catch (MessagingException e) { + logger.error("发送带附件的邮件时发生异常!", e); + } + } + + + /** + * 发送正文中有静态资源(图片)的邮件 + * @param to + * @param subject + * @param content + * @param rscPath + * @param rscId + */ + public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){ + MimeMessage message = mailSender.createMimeMessage(); + + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(content, true); + + FileSystemResource res = new FileSystemResource(new File(rscPath)); + helper.addInline(rscId, res); + + mailSender.send(message); + logger.info("嵌入静态资源的邮件已经发送。"); + } catch (MessagingException e) { + logger.error("发送嵌入静态资源的邮件时发生异常!", e); + } + } +} diff --git a/spring-boot-mail/src/main/resources/application.properties b/spring-boot-mail/src/main/resources/application.properties new file mode 100644 index 0000000..dcbb521 --- /dev/null +++ b/spring-boot-mail/src/main/resources/application.properties @@ -0,0 +1,9 @@ +spring.application.name=spirng-boot-mail + +spring.mail.host=smtp.163.com +spring.mail.username=xxoo@xxoo.com +spring.mail.password=xxoo +spring.mail.default-encoding=UTF-8 + +mail.fromMail.addr=xxoo@xxoo.com + diff --git a/spring-boot-mail/src/main/resources/templates/emailTemplate.html b/spring-boot-mail/src/main/resources/templates/emailTemplate.html new file mode 100644 index 0000000..387a4fb --- /dev/null +++ b/spring-boot-mail/src/main/resources/templates/emailTemplate.html @@ -0,0 +1,11 @@ + + + + + Title + + + 您好,这是验证邮件,请点击下面的链接完成验证,
+ 激活账号 + + \ No newline at end of file diff --git a/spring-boot-mail/src/test/java/com/neo/ApplicationTests.java b/spring-boot-mail/src/test/java/com/neo/ApplicationTests.java new file mode 100644 index 0000000..569db81 --- /dev/null +++ b/spring-boot-mail/src/test/java/com/neo/ApplicationTests.java @@ -0,0 +1,17 @@ +package com.neo; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ApplicationTests { + + @Test + public void contextLoads() { + System.out.println("hello world"); + } + +} diff --git a/spring-boot-mail/src/test/java/com/neo/service/MailServiceTest.java b/spring-boot-mail/src/test/java/com/neo/service/MailServiceTest.java new file mode 100644 index 0000000..91c4bbf --- /dev/null +++ b/spring-boot-mail/src/test/java/com/neo/service/MailServiceTest.java @@ -0,0 +1,65 @@ +package com.neo.service; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.context.Context; + +/** + * Created by summer on 2017/5/4. + */ +@RunWith(SpringRunner.class) +@SpringBootTest +public class MailServiceTest { + + @Autowired + private MailService mailService; + + @Autowired + private TemplateEngine templateEngine; + + @Test + public void testSimpleMail() throws Exception { + mailService.sendSimpleMail("ityouknow@126.com","test simple mail"," hello this is simple mail"); + } + + @Test + public void testHtmlMail() throws Exception { + String content="\n" + + "\n" + + "

hello world ! 这是一封html邮件!

\n" + + "\n" + + ""; + mailService.sendHtmlMail("ityouknow@126.com","test simple mail",content); + } + + @Test + public void sendAttachmentsMail() { + String filePath="e:\\tmp\\application.log"; + mailService.sendAttachmentsMail("ityouknow@126.com", "主题:带附件的邮件", "有附件,请查收!", filePath); + } + + + @Test + public void sendInlineResourceMail() { + String rscId = "neo006"; + String content="这是有图片的邮件:"; + String imgPath = "C:\\Users\\summer\\Pictures\\favicon.png"; + + mailService.sendInlineResourceMail("ityouknow@126.com", "主题:这是有图片的邮件", content, imgPath, rscId); + } + + + @Test + public void sendTemplateMail() { + //创建邮件正文 + Context context = new Context(); + context.setVariable("id", "006"); + String emailContent = templateEngine.process("emailTemplate", context); + + mailService.sendHtmlMail("ityouknow@126.com","主题:这是模板邮件",emailContent); + } +}