使用SpringBoot整合邮件服务器发送邮件

使用SpringBoot整合邮件服务器发送邮件

本文主要使用网易163的邮件服务, 首先在https://mail.163.com/上注册一个账号,并且进入设置开启图下两项服务,获取到相关的授权码为后续整合使用

在这里插入图片描述

引入以下依赖使用

 <!--邮件模块依赖-->
 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
  </dependency>

以下为yml文件中的配置

spring:
	mail:
	    host: smtp.163.com
	    #服务协议
	    protocol: smtp
	    username: xxxxxxxxxx@163.com #你注册的网易邮箱
	    password: xxxxxxxxxx #你获取到的授权码
	    test-connection: true
	    from:
	      properties.mail.smtp.starttls.enable: true
	      properties.mail.smtp.starttls.required: true
	      properties.mail.smtp.ssl.enable: true
	      default-encoding: utf-8

发送简单文本邮件

/**
* 邮件VO类
*/
@Data
public class MailVo{
    private String id;//邮件id

    private String from;//邮件发送人

    private String to;//邮件接收人

    private String subject;//邮件主题

    private String text;//邮件内容

    private Date sentDate;//发送时间

    private String cc;//抄送

    private String bcc;//密送

    private String status;//状态

    private String error;//报错信息
    @JsonIgnore
    private MultipartFile[] multipartFiles;//邮件附件
}
@RestController
@RequestMapping("/mail/api/")
public class MailController {

    @Value("${spring.mail.username}")
    private String from;

    @Autowired
    private MailService mailService;

    @PostMapping("sendMessage/info")
    public Result sendMessageInfo(@RequestBody MailVo mailVo){
        mailVo.setFrom(from); // 设置邮件发送方
        MailVo mailVo1 = mailService.sendMail(mailVo);
        return Result.ok(mailVo1);
    }
}
@Service
public class MailServiceImpl implements MailService {

    @Autowired
    private JavaMailSender mailSender;

    @Override
    public MailVo sendMail(MailVo mailVo) {
        //创建简单邮件消息
        SimpleMailMessage message = new SimpleMailMessage();
        //谁发的
        message.setFrom(mailVo.getFrom());
        //谁要接收
        message.setTo(mailVo.getTo());
        //邮件标题
        message.setSubject(mailVo.getSubject());
        //邮件内容
        message.setText(mailVo.getText());
        mailSender.send(message);
        return mailVo;
    }
}    

通过swagger或者postman进行测试就可以在接收信息的邮箱查看相关信息。

在这里插入图片描述

/**
* 附件发送测试
*/
@PostMapping("sendMessage")
public Result sendMessage(MultipartFile multipartFile){
     MailVo mailVo=new MailVo();
     mailVo.setFrom(from);
     mailVo.setSubject("测试文档");
     mailVo.setTo("<1918415339@qq.com>");// <1918415339@qq.com>
     mailVo.setText("测试邮箱发送文件");
     MailVo mailVo1 = mailService.sendMailPng(mailVo,multipartFile);
     return Result.ok(mailVo1);
 }
/**
* 附件发送
*/
@Override
public MailVo sendMailPng(MailVo mailVo,MultipartFile multipartFile) {
     MimeMessage message = mailSender.createMimeMessage();
     try {
         MimeMessageHelper helper = new MimeMessageHelper(message, true);
         // 谁发送的信息
         helper.setFrom(mailVo.getFrom());
         // 谁接收
         helper.setTo(mailVo.getTo());
         // 邮件标题
         helper.setSubject(mailVo.getSubject());
         // 获取到文件全名称包括后缀
         String name = multipartFile.getOriginalFilename();
         // 邮件内容
         helper.setText(mailVo.getText(),true);
		 // 把附件转换为File
         File file = MultipartFileToFile(multipartFile);
         FileSystemResource res = new FileSystemResource(file);
         // 添加附件
         helper.addAttachment(name,res);
        	// 发送相关邮件
          mailSender.send(message);
         if (file.exists()) {
             file.delete();
         }
         return mailVo;
     } catch (MessagingException e) {
         e.printStackTrace();
     }
     return null;
 }
 /**
 * 将multiFile转为File对象
 */
 private File MultipartFileToFile(MultipartFile multiFile) {
        // 获取文件名
        String fileName = multiFile.getOriginalFilename();
        // 获取文件后缀
        String prefix = fileName.substring(fileName.lastIndexOf("."));
        // 若需要防止生成的临时文件重复,可以在文件名后添加随机码
        try {
            // File file = File.createTempFile(fileName, prefix);
            File file=new File(fileName);
            FileUtils.copyInputStreamToFile(multiFile.getInputStream(),file);
            return file;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

最终测试结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦片王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值