直接上代码,copy就可以用
1.yml
config:配置的时发件人,也可以这样配置多个发件人,邮箱为企业邮箱时,password为邮箱密码
为新浪或者QQ时,pssword为授权码
receivers:为收件人,同样可以配置多个
spring:
mail:
institutionList:
send-corn: 0 30 8 * * ?
configs:
# 账号A
- username: 11111@bizatmobile.com
password: 123456
host: smtp.partner.outlook.cn
port: 587
protocol: smtp
default-encoding: UTF-8
properties:
mail:
smtp:
starttls:
required: true
receivers:
- username: 111111qq.com
- username: 1@bizatmobile.com
2.config
package com.softium.xsk.salesflow.collect.mail;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@ConfigurationProperties(prefix = "spring.mail")
public class MailConfig {
private List<MailSender> configs;
private List<MailReceiver> receivers;
public List<MailSender> getConfigs() {
return configs;
}
public void setConfigs(List<MailSender> configs) {
this.configs = configs;
}
public List<MailReceiver> getReceivers() {
return receivers;
}
public void setReceivers(List<MailReceiver> receivers) {
this.receivers = receivers;
}
}
3.Receiver
package com.softium.xsk.salesflow.collect.mail;
import lombok.Data;
@Data
public class MailReceiver {
/**
* 收件人
*/
private String username;
}
4.MailSender
package com.softium.xsk.salesflow.collect.mail;
import lombok.Data;
import java.util.Properties;
@Data
public class MailSender {
/**
* 发件人
*/
private String username;
/**
* 密码
*/
private String password;
/**
* host
*/
private String host;
/**
* 端口
*/
private Integer port;
/**
* 协议
*/
private String protocol;
/**
* 默认编码
*/
private String defaultEncoding;
/**
* 验证方式
*/
private Properties properties;
}
5.util
package com.softium.xsk.salesflow.collect.mail;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Component
public class MailUtil {
@Autowired
private MailConfig mailConfig;
private List<JavaMailSenderImpl> senderList = new ArrayList<>();
/**
* 初始化 sender
*/
public void buildMailSender(){
List<MailSender> mailConfigs = mailConfig.getConfigs();
log.info("初始化mailSender");
senderList.clear();
mailConfigs.forEach(mailSender -> {
// 发件人
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setDefaultEncoding(mailSender.getDefaultEncoding());
javaMailSender.setHost(mailSender.getHost());
javaMailSender.setPort(mailSender.getPort());
javaMailSender.setProtocol(mailSender.getProtocol());
javaMailSender.setUsername(mailSender.getUsername());
javaMailSender.setPassword(mailSender.getPassword());
javaMailSender.setJavaMailProperties(mailSender.getProperties());
// 添加数据
senderList.add(javaMailSender);
});
}
/**
* 获取MailSender
* @return CustomMailSender
*/
public List<JavaMailSenderImpl> getSenders(){
buildMailSender();
return senderList;
}
/**
* 清理 sender
*/
public void clear(){
senderList.clear();
}
/**
* 获取MailReceiver
* @return CustomMailSender
*/
public String[] getReceivers(){
List<MailReceiver> receivers = mailConfig.getReceivers();
//所有收件人
List<String> receiversUser = new ArrayList<>();
receivers.forEach( receiver -> {
receiversUser.add(receiver.getUsername());
});
String[] receiversArr = receiversUser.toArray(new String[0]);
return receiversArr;
}
}
6.service
package com.softium.xsk.salesflow.collect.mail;
public interface MailService {
/**
* 发送邮件
* @return 返回 true 或者 false
* subject 邮件主题
* content 邮件内容
*/
boolean sendMailText(String subject,String content);
boolean sendMailHtml(String subject,String content);
}
7.impl
package com.softium.xsk.salesflow.collect.mail;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.List;
@Service
@AllArgsConstructor
@Slf4j
public class MailServiceImpl implements MailService {
private final MailUtil mailUtil;
@Override
public boolean sendMailText(String subject,String content) {
List<JavaMailSenderImpl> list = mailUtil.getSenders();
//创建SimpleMailMessage对象
list.forEach( sender -> {
SimpleMailMessage message = new SimpleMailMessage();
//邮件发送人
message.setFrom(sender.getUsername());
//邮件接收人
message.setTo(mailUtil.getReceivers());
//邮件主题
message.setSubject(subject);
//邮件内容
message.setText(content);
//发送邮件
sender.send(message);
});
return true;
}
@Override
public boolean sendMailHtml(String subject, String content) {
List<JavaMailSenderImpl> list = mailUtil.getSenders();
//创建SimpleMailMessage对象
list.forEach( sender -> {
MimeMessage message = sender.createMimeMessage();
//邮件内容
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//邮件发送人
helper.setFrom(sender.getUsername());
//邮件接收人
helper.setTo(mailUtil.getReceivers());
//邮件主题
helper.setSubject(subject);
//第二个参数:格式是否为html
helper.setText(content, true);
} catch (MessagingException e) {
log.error("发送html格式邮件时发生异常!", e);
}
//发送邮件
sender.send(message);
});
return true;
}
}
9.test
package com.softium.xsk.salesflow.collect.mail;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceImplTest {
@Autowired
private MailServiceImpl mailService;
@Test
public void sendMail() {
//mailService.sendMailText("主题text","啊哈哈哈哈哈哈");
mailService.sendMailHtml("主题Html","啊哈哈哈哈哈哈");
}
}
10.依赖为 spring-mail