前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springBoot整合发送邮件功能

springBoot整合发送邮件功能

作者头像
贪挽懒月
发布2020-05-18 14:54:12
4720
发布2020-05-18 14:54:12
举报
文章被收录于专栏:JavaEEJavaEE

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

一、开启邮件服务

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

开启邮件服务

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

二、springBoot整合邮件服务

1、pom.xml:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、application.yml:

代码语言:javascript
复制
# 端口&根路径
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:

代码语言:javascript
复制
@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、返回信息&返回码枚举类:

代码语言:javascript
复制
@Getter
@AllArgsConstructor
public enum ResultEnum {
    SUCCESS(200,"成功"),
    SERVER_ERROR(500,"内部异常"),
    BAD_REQUEST(400,"参数错误"),
    ;

    private Integer code;
    private String msg;
}

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

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@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,就可以愉快地发邮件了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、开启邮件服务
  • 二、springBoot整合邮件服务
  • 三、测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档