springboot入门_发送邮件
日常生活中,我们或多或少的都会用到发送邮件的功能。在spring框架中我们用的是JavaMailSender相关接口来实现发送邮件,springboot对JavaMailSender相关接口做了进一步的封装,今天看看在springboot中如何发送邮件。话不多说,我们看代码。
首先,我们创建一个springboot的项目,并引入相关依赖文件,pom.xml文件如下:
1 <dependencies> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter</artifactId> 5 <version>1.5.10.RELEASE</version> 6 </dependency> 7 8 <dependency> 9 <groupId>org.springframework.boot</groupId> 10 <artifactId>spring-boot-starter-mail</artifactId> 11 <version>1.5.10.RELEASE</version> 12 </dependency> 13 14 <dependency> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-test</artifactId> 17 <scope>test</scope> 18 <version>1.5.10.RELEASE</version> 19 </dependency> 20 21 <dependency> 22 <groupId>junit</groupId> 23 <artifactId>junit</artifactId> 24 <version>4.12</version> 25 <scope>test</scope> 26 </dependency> 27 </dependencies>
其次,我们创建发送邮件的接口,及对应的实现类。发送邮件时有几个必须要的参数如 发件人,收件人,邮件主题,邮件内容,所以代码如下:
1 public interface MailService { 2 3 void sendEmail(String to, String content, String subject); 4 5 }
1 @Service 2 public class MailServiceImpl implements MailService { 3 4 private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class); 5 6 @Autowired 7 private JavaMailSender javaMailSender; 8 9 private String from = "you email address";//[email protected] 10 11 public void sendEmail(String to, String content, String subject) { 12 SimpleMailMessage message = new SimpleMailMessage(); 13 message.setText(content); 14 message.setFrom(from); 15 message.setSubject(subject); 16 message.setTo(to); 17 logger.info("邮件开始发送。。。"); 18 javaMailSender.send(message); 19 logger.info("邮件已发送。。。"); 20 } 21 22 }
然后,发送邮件时我们需要使用的邮件服务器,账号,此处我们使用腾讯邮件服务,需要将邮件服务的信息配置出来,以便在发送邮件时使用,application.properties中的配置代码如下:
spring.mail.host=smtp.qq.com #账号 spring.mail.username=[email protected] #密码 qq邮箱使用第三方客户端发送邮件时,需要将密码改为授权码 spring.mail.password=xxxxxxxxxxxxxx #ssl spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true
至此,我们邮件服务的配置信息及发邮件的方法都已经写好了,我们写个测试方法发送邮件,代码如下:
1 @SpringBootTest 2 @RunWith(SpringRunner.class) 3 public class MailServiceTest { 4 5 @Autowired 6 private MailServiceImpl mailService; 7 8 @Test 9 public void sendeEmail(){ 10 String to = "xxxxxxxxxxx";//收件人邮箱地址 11 String content = "this is for test send mail"; 12 String subject = "test send email"; 13 mailService.sendEmail(to, content, subject); 14 } 15 16 }
控制台输出信息:
接收邮件中也收到了邮件:
有时候纯文本的邮件满足不了我们的需要,我们可能需要对文本内容需要添加一些样式,所以接下来看看怎么发送一个包含html的的邮件,在接口文件和实现类中添加相应的方法,如下:
接口 1 void sendHtmlEmail(String to, String content, String subject);
实现方法
1 public void sendHtmlEmail(String to, String content, String subject) { 2 MimeMessage message = javaMailSender.createMimeMessage(); 3 try { 4 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); 5 messageHelper.setFrom(from); 6 messageHelper.setTo(to); 7 messageHelper.setSubject(subject); 8 messageHelper.setText(content, true);//指定html内容 9 javaMailSender.send(message); 10 logger.info("发送邮件成功。。。"); 11 } catch (MessagingException e) { 12 e.printStackTrace(); 13 logger.info("发送邮件发生异常。。。"); 14 } 15 16 }
下来我们测试发送包含html内容的邮件,为了能看出html效果,加入样式内容来显示效果,测试代码如下:
1 @Test 2 public void sendHtmlEmail(){ 3 String to = "xxxxxxxxxxx";//收件人邮箱地址 4 String subject = "test send html email"; 5 String content = "<html><body><h3 style='color:red'>this is for test send html mail</hr></body></html>"; 6 mailService.sendHtmlEmail(to, content, subject); 7 }
执行测试方法,收到邮件内容,可以看到html起作用了。
有些时候,我们发送邮件时还会发送附件,接口和实现方法代码如下:
接口 1 void sendAttachmentEmail(String to, String content, String subject, String filePath);
实现方法
1 public void sendAttachmentEmail(String to, String content, String subject, String filePath) { 2 MimeMessage message = javaMailSender.createMimeMessage(); 3 try { 4 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); 5 messageHelper.setFrom(from); 6 messageHelper.setTo(to); 7 messageHelper.setSubject(subject); 8 messageHelper.setText(content); 9 10 //添加附件 11 FileSystemResource file = new FileSystemResource(new File(filePath)); 12 String fileName = filePath.substring(filePath.lastIndexOf(File.separator)+1); 13 messageHelper.addAttachment(fileName, file); 14 logger.info("开始发送带附件邮件。。。"); 15 javaMailSender.send(message); 16 logger.info("发送带附件邮件成功。。。"); 17 } catch (MessagingException e) { 18 e.printStackTrace(); 19 logger.info("发送带附件邮件发生异常。。。"); 20 } 21 }
测试方法
1 @Test 2 public void sendAttachmentEmail(){ 3 String to = "xxxxxxxxxxxxxxx";//收件人邮箱地址 4 String subject = "test send attachment email"; 5 String content = "this is for test send attachment mail"; 6 String filePath = "C:\\Users\\admin\\Desktop\\***.txt"; 7 mailService.sendAttachmentEmail(to, content, subject, filePath); 8 }
收到邮件后可以看到,是有附件的