一.邮件发送介绍
邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。在现代的Web应用程序中,邮件发送功能是非常常见且重要的一部分,Spring Boot框架提供了简单且强大的方式来实现邮件发送功能。Spring中提供了 JavaMailsender 用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfguration 对邮件的发送做了进一步简化。下面就分步骤来看一下Spring Boot如何进行邮件发送。
二.发送前准备
1.首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP全程为Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信协议。**SpringBoot提供了对邮件发送的集成支持,使得发送邮件变得更加简单。**以下是实现步骤:
(1)通过QQ邮箱或者163邮箱开启POP3/SMTP服务,成功开启后会获取到一个授权码,保存好,之后会使用到。
**(2)**添加依赖
需要在项目的**pom.xml
**文件中添加Spring Boot的邮件发送依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
**(3)**配置邮件服务器
在**application.properties
或application.yml
**中配置邮件服务器的相关信息,例如:
(4)创建控制器:创建一个服务类来发送邮件,使用Spring Boot提供的**JavaMailSender
**接口
@Component
public class MailService(
@Autowired
JavaMailSender javaMailSender;
public void sendSimpleMail (String from, String to, string cc,String subject, String content)SimpleMailMessage simpMsg = new simpleMailMessage ();simpMsg new SimpleMailMessage ( )simpMsg.setFrom(from);simpMsg.setTo(to):simpMsg.setCc(cc);simpMsg.setSubject(subject);simpMsg.setText (content);javaMailSender.send(simpMsg);}
} ![qwqw](https://i-blog.csdnimg.cn/direct/28c3f979e67f4abab03bc2ab850b2837.png#pic_center)
代码解释:
- JavaMailSender是Spring Boot在 MailSenderPropertiesConfiguration类中配置好的,该类在Mail自动配置类 MailSenderAutoConfiguration 中导入,因此这里注入JavaMailSende就可以使用了。
- sendSimpleMail 方法的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容。
- 简单邮件可以直接构建一个 SimpleMailMessage 对象进行配置,配置完成后,通过JavaMailSender 将邮件发送出去。
配置完成后,在单元测试中写一个测试方法进行测试,代码如下 :
@RunWith(SpringRunner.class)
@Spring BootTest
public class SendmailApplicationTests{@AutowiredMailService mailService;@Testpublic void sendsimpleMail(){mailService.sendSimpleMail("youremail@qq.com","测试邮件主题","测试邮件内容);}
}
三.发送
(1)发送带附件的邮件:要发送一个带附件的邮件也非常容易,通过调用Atachment方法即可添加附件,该方法调用多次即可添加多个附件。在MailService 中添加如下方法:
public void sendAttachFileMail(String from, String to,String subject,String content,File file)(
try(MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper (message,true) ;helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content);helper.addAttachment(file.getName(),file);javaMailSender.send(message);} catch (MessagingException e){e.printStackTrace();}
}
这里使用 MimeMessageHelper 简化了邮件配置,它的构造方法的第二个参数true 表示构造impant mesage类型的邮件,mulipar message类型的邮件包含多个正文、附件以及内嵌资源件的表现形式更加丰富。最后通过addAtachment方法添加附件。在单元测试中添加如下方法进行测试:
@Test
public void sendAttachFileMail(){maiiService.sendAttachFileMail("youremail@qq.com","测试邮件主题","测试邮件内容",new File("文件路径"));
}
(2)发送带图片资源的邮件:有的邮件正文中可能要插入图片,使用FileSystemResource可以实现这一功能,代码如下:
public void sendMailwithImg(String from,String to,String subject,String content,String[] srcPath,String[] resIds){if(srcPath.length !=resIds.length){System.out.println("发送失败");return;}try {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper (message,true);helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content,true);for(int i = 0; i < srcPath.length; i++) {
FileSystemResource res = new FileSystemResource(new File(srcPath[i]));helper.addInline(resIds[i], res);}javaMailSender.send (message);} catch (MessagingException e){System.out.println("发送失败”);}
}
在发送邮件时分别传入图片资源路径和资源id,通过FileSystemResource 构造静态资源,然后调用 addInline 方法将资源加入邮件对象中。注意,在调用MimeMessageHelper中的setText方法时,第二个参数true表示邮件正文是HTML格式的,该参数不传默认为false。接下来在测试类中添加如下方法进行测试:
@Test
public void sendMailwithImg(){mai1Service,sendMailwithImg("1510161612@qq.com""5849918430gq.com""测试邮件主题(图片)","<div>he110,这是一封带图片资源的邮件:"+"这是图片1:<div><img src='cid:p0l'/></div>" +"这是图片2:<dv><img src='cid:p02'/></div>" +"</d±v>",new strigl("C:\Users\sang\Pictures\pl .png",C:\Users\sang\Pictures\p2 ,png" },new String{]("p01","p02"});
}
邮件的正文是一段HTML文本,用cid标注出两个静态资源,分别为p01和p02。
四.总结
Spring Boot支持异步邮件发送,可以通过@Async
注解在服务类中异步发送邮件,这样可以避免在处理用户请求时被邮件发送操作阻塞。在邮件发送过程中,应该妥善处理可能出现的异常,比如网络问题、认证失败等,以确保应用的稳定性。由于邮件发送涉及到用户名和密码,确保这些敏感信息的安全是非常重要的。可以使用Spring Boot的配置属性替换功能来隐藏这些敏感信息,或者使用环境变量和秘密管理工具来管理。Spring Boot提供了一套完整的解决方案来集成邮件发送功能,使得开发者可以轻松地在应用中实现邮件通信。