SpringBoot 整合单个、多个邮箱发送邮件

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

单个发送者

spring:
  mail:
    host: smtp.feishu.cn
    username: username
    password: password
    port: 587
    default-encodeing: UTF-8
    properties:
      mail:
        smtp:
          auth: true
        starttls:
          enable: true
          required: true
@Service
public class EmailService{
	@Autowired
	private JavaMailSender mailSender;

	@Autowired
	private MailProperties mailProperties;

	public void sendHtmlMail(String to, String subject, String content, String replyTo, String... cc) {
		try{
			MimeMessage message = mailSender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(message, true);
			// 发送人
			helper.setFrom(mailProperties.getUsername());
			// 接收人 可以是多个 String[] to
			helper.setTo(to);
			// 主题
			helper.setSubject(subject);
			// 内容 true = HTML格式
			helper.setText(content, true);
			// 设置回复的邮箱
			if (replyTo != null && !replyTo.trim().isEmpty()) {
				helper.setReplyTo(replyTo);
			}
			// 设置抄送人
			if (!ObjectUtils.isEmpty(cc)) {
				helper.setCc(cc);
			}

			// 附件、附件名: File/InputStreamSource/dataSource
			// helper.addAttachment("attachmentName",new File())
			// 发送邮件
			mailSender.send(message);
			log.info("send email successfully , to:{}",to);
		}catch(Exception e){
			log.error("send email error,reason:",e);
		}
	}

}

多个邮件发送者

spring:
  mail:
    # 默认:飞书邮箱配置
    df:
      host: smtp.feishu.cn
      username: 
      password: 
      port: 587
      properties:
        mail:
          smtp:
            auth: true
            starttls:
              enable: true
              required: true
      default-encoding: utf-8
    # 第二个:阿里云邮箱
    buschange:
      host: smtp.aliyun.com
      username: 
      password: 
      port: 25
      properties:
        mail:
          smtp:
            auth: true
            starttls:
              enable: true
              required: true
      default-encoding: utf-8
@Configuration
public class MailConfigure {

    @Bean
    @ConfigurationProperties(prefix = "spring.mail.df")
    public MailProperties defaultMailProperties() {
        return new MailProperties();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.mail.buschange")
    public MailProperties busChangeMailProperties() {
        return new MailProperties();
    }

    @Bean
    @Primary
    public JavaMailSenderImpl defaultSender(MailProperties defaultMailProperties) {
        return createJavaMailSender(defaultMailProperties);
    }

    @Bean(name = "busChangeSender")
    public JavaMailSenderImpl busChangeSender(MailProperties busChangeMailProperties) {
        return createJavaMailSender(busChangeMailProperties);
    }


    private JavaMailSenderImpl createJavaMailSender(MailProperties properties) {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(properties.getHost());
        mailSender.setPort(properties.getPort());
        mailSender.setUsername(properties.getUsername());
        mailSender.setPassword(properties.getPassword());
        mailSender.setDefaultEncoding(properties.getDefaultEncoding().name());

        Properties props = mailSender.getJavaMailProperties();
        props.putAll(properties.getProperties());

        return mailSender;
    }

}
@Component
@Slf4j
public class EmailService {

	@Autowired
	private JavaMailSenderImpl defaultSender;

	@Autowired
	@Qualifier("busChangeSender")
	private JavaMailSenderImpl busChangeSender;

	public void sendHtmlEmail(SendEmailVO emailVO, String... cc) {
		String to = emailVO.getTo();
		JavaMailSenderImpl emailSender = defaultSender;
		try {
			if ("bus".equalsIgnoreCase(emailVO.getSender())) {
				emailSender = busChangeSender;
			}
			MimeMessage message = emailSender.createMimeMessage();
			buildHelper(emailSender.getUsername(),emailVO, message, cc);
			emailSender.send(message);
			log.info("send email successfully , to:{}",to);
		} catch (Exception e) {
			log.error("send email error to:{}, reason:",to,e);
		}
	}


	private void buildHelper(String from, SendEmailVO emailVO, MimeMessage message, String... cc) throws MessagingException {
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
		helper.setFrom(from);
		helper.setTo(emailVO.getTo());
		helper.setSubject(emailVO.getSubject());
		if (StrUtil.isNotBlank(emailVO.getReplyTo())) {
			helper.setReplyTo(emailVO.getReplyTo());
		}
		// 内容 html
		helper.setText(emailVO.getContent(), true);
		// 抄送人
		if (!ObjectUtils.isEmpty(cc)) {
			helper.setCc(cc);
		}

		// 附件处理
		Map<String, String> attachments = emailVO.getAttachments();
		if (attachments != null && !attachments.isEmpty()) {
			for (Map.Entry<String, String> entry : attachments.entrySet()) {
				String fileName = entry.getKey();
				String filePath = entry.getValue();
				helper.addAttachment(fileName, new File(filePath));
			}
		}
	}


}
@Data
@Builder
public class SendEmailVO {

    /**
     * 接收人邮箱
     */
    private String to;

    /**
     * 主题
     */
    private String subject;

    /**
     * 内容
     */
    private String content;

    /**
     * 回复者
     */
    private String replyTo;

    /**
     * 为空 则默认邮件发送者
     * bus 则班车发送者
     */
    private String sender;

    /**
     * 附件文件存放地址
     * 文件名/文件地址
     */
    private Map<String, String> attachments;


    /**
     * 发送人邮箱
     */
    private String from;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值