打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
springBoot整合发邮件

本文将介绍spring官方提供的集成了邮件服务的JavaMailSenderImpl,开箱即用,十分方便。

配置邮箱开启邮件服务

开启POP3/SMTP/IMAP服务。以QQ邮箱为例,登录QQ邮箱,然后设置 ---> 账户:

开启邮件服务

开启后点击“生成授权码”,记住授权码。

springboot整合邮件服务

1、pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

          2、application.yml:

# 端口&根路径
server:
  port: 8888
  servlet:
    context-path: /

spring:
  application:
    # 服务名
    name: java-mail-sender
  mail:
    #邮箱的SMTP服务器地址
    host: smtp.qq.com
    #登录账号
    username: 你QQ邮箱登录账号
    #授权码或者密码
    password: 刚才获取的授权码
    properties:
      #真实邮箱
      from: 你的QQ邮箱

  #限制上传和请求文件的大小  
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 50MB

          3、封装的返回对象JsonResult:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class JsonResult {
    private Integer code;
    private String msg;
    private Object data;

    public JsonResult(Integer code, String msg) {
        super();
        this.code = code;
        this.msg = msg;
    }
}

          4、返回信息&返回码枚举类:

@Getter
@AllArgsConstructor
public enum ResultEnum {
    SUCCESS(200,"成功"),
    SERVER_ERROR(500,"内部异常"),
    BAD_REQUEST(400,"参数错误"),
    ;

    private Integer code;
    private String msg;
}

         5、用来接收邮件内容的表单对象:

@Data
public class MailForm {
    private String id;
    // 发件人
    private String from;
    // 收件人
    @NotBlank(message = "收件人不能为空!")
    @Pattern(regexp = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?", message = "邮箱格式不正确!")
    private String to;
    // 主题
    @NotEmpty(message = "邮件主题不能为空!")
    private String subject;
    // 内容
    @NotEmpty(message = "邮件内容不能为空!")
    private String text;
    // 抄送
    private String cc;
    // 暗抄送
    private String bcc;
    // 时间
    private Date date;
    // 附件
    @JsonIgnore
    private MultipartFile[] multipartFiles;
}

         6、发送邮件的service:

@Service
@Slf4j
public class MailServiceImpl implements MailService {

    @Autowired
    private JavaMailSenderImpl mailSender;

    @Override
    public void sendMail(MailForm mailForm) {
        try {
            MimeMessageHelper messageHelper = new MimeMessageHelper(mailSender.createMimeMessage(), true);

            // 从配置文件读取发件人
            getMailSendFrom(mailForm);

            // 设置发件人
            messageHelper.setFrom(mailForm.getFrom());
            // 设置收件人
            messageHelper.setTo(mailForm.getTo().split(","));
            // 设置主题
            messageHelper.setSubject(mailForm.getSubject());
            // 设置内容
            messageHelper.setText(mailForm.getText());
            // 设置抄送
            if (!StringUtils.isEmpty(mailForm.getCc())) {
                messageHelper.setCc(mailForm.getCc().split(","));
            }
            // 设置暗抄送
            if (!StringUtils.isEmpty(mailForm.getBcc())) {
                messageHelper.setCc(mailForm.getBcc().split(","));
            }
            // 设置附件
            if (mailForm.getMultipartFiles() != null) {
                for (MultipartFile multipartFile : mailForm.getMultipartFiles()) {
                    messageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile);
                }
            }
            // 设置日期
            if (mailForm.getDate() == null) {
                mailForm.setDate(new Date());
                messageHelper.setSentDate(mailForm.getDate());
            }
            // 发送邮件
            mailSender.send(messageHelper.getMimeMessage());

            log.info("发送邮件成功:{} ---> {}", mailForm.getFrom(), mailForm.getTo());
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }
    }


    /**
     * 从配置文件中获取发件人
     * @return
     */

    private String getMailSendFrom(MailForm mailVo) {
        String from = mailSender.getJavaMailProperties().getProperty("from");
        mailVo.setFrom(from);
        return from;
    }
}

          7、发送邮件的controller:

@RestController
@RequestMapping("/java-mail")
@Slf4j
public class MailController {

    @Autowired
    private MailService mailService;

    @PostMapping("/mail")
    public JsonResult sendMail(@Valid MailForm mailForm, BindingResult bindingResult) {
        try {
            if (bindingResult.hasErrors()){
                log.error("【sendMail】" + ResultEnum.BAD_REQUEST.getMsg() + ",msg={}",bindingResult.getFieldErrors());
                return new JsonResult(ResultEnum.BAD_REQUEST.getCode(),bindingResult.getFieldError().getDefaultMessage());
            } else {
                mailService.sendMail(mailForm);
                return new JsonResult(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMsg());
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            return new JsonResult(ResultEnum.SERVER_ERROR.getCode(), ResultEnum.SERVER_ERROR.getMsg());
        }
    }
}

打开postman,设置相关参数,访问上面这个controller,就可以愉快地发邮件了。

-java开发那些事-
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
基于springboot的邮箱配置封装与使用
Spring Boot (十二): Spring Boot 邮件服务
编程语言通用JsonResult,返回格式化json字符串,使用简单
一份 Spring Boot 项目搭建模板
spring boot 全局异常处理及自定义异常类
Spring Boot 发邮件和附件,超实用!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服