日常生活中,我们或多或少的都会用到发送邮件的功能。在spring框架中我们用的是JavaMailSender相关接口来实现发送邮件,springboot对JavaMailSender相关接口做了进一步的封装,今天看看在springboot中如何发送邮件。话不多说,我们看代码。
首先,我们创建一个springboot的项目,并引入相关依赖文件,pom.xml文件如下:
12 3 7 8org.springframework.boot 4spring-boot-starter 51.5.10.RELEASE 69 13 14org.springframework.boot 10spring-boot-starter-mail 111.5.10.RELEASE 1215 20 21org.springframework.boot 16spring-boot-starter-test 17test 181.5.10.RELEASE 1922 27junit 23junit 244.12 25test 26
其次,我们创建发送邮件的接口,及对应的实现类。发送邮件时有几个必须要的参数如 发件人,收件人,邮件主题,邮件内容,所以代码如下:
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";//xxxx@qq.com10 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=xxxx@qq.com#密码 qq邮箱使用第三方客户端发送邮件时,需要将密码改为授权码spring.mail.password=xxxxxxxxxxxxxx#sslspring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.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 @Test2 public void sendHtmlEmail(){3 String to = "xxxxxxxxxxx";//收件人邮箱地址4 String subject = "test send html email";5 String content = "this is for test send html mail";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 @Test2 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 }
收到邮件后可以看到,是有附件的