发送邮件公共类

1.创建邮件对象

@Data
public class EmailBean implements Serializable {

    /*
    * 发件人邮箱
    */
    private String mailFrom;
    /*
     * 发件人昵称
     */
    private String mailFromNick;

    /*
     * 收件人邮箱
     */
    private List<String> mailToList;

    /*
     * 抄送人邮箱
     */
    private List<String> ccList;
    /*
     * 主题
     */
    private String subject;
    /*
     * 内容
     */
    private String content;
    /*
     * 图片路径
     */
    private List<String> imagePaths;
    /*
     * 图片id
     */
    private List<String> imageId;
    /*
     * 附件
     */
    private List<File> files;
}

2.创建接口

public interface EmailService {

    /**
     * 邮件发送 flag:是否开启thymeleaf模板引擎
     */
    Boolean sendSimpleMail(EmailBean emailBean, boolean flag);

}

3.创建接口实现类

#如下为集成邮件的相关配置

# 腾讯的,个人smtp.qq.com, 企业的:smtp.exmail.qq.com
spring.mail.host=smtp.exmail.qq.com
spring.mail.username=XX
# 口令是QQ邮箱开通的smtp服务后得到的客户端授权码,不是邮箱登录密码
#spring.mail.password=XX
spring.mail.password=XX
spring.mail.default-encoding=utf-8
# 开启debug,方便查看邮件发送日志
spring.mail.properties.mail.debug=true
spring.mail.sender.nickname=测试
spring.mail.properties.mail.smtp.auth=true
#spring.mail.properties.mail.smtp.auth.class=javax.net.ssl.SSLSocketFactory
#spring.mail.properties.mail.smtp.auth.port=465
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

# SSL Config
spring.mail.port=465
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.socketFactory.port=465
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

#配置thymeleaf备用邮件格式
spring.thymeleaf.cache=false
spring.thymeleaf.mode=XX
@Service("emailService")
//@RestController
public class EmailServiceImpl implements EmailService {

    private static final Logger logger = LoggerFactory.getLogger(EmailServiceImpl.class);

    @Value("${spring.mail.username}")
    private String username;
    @Value("${spring.mail.host}")
    private String host;
    @Value("${spring.mail.password}")
    private String password;
    @Value("${spring.mail.sender.nickname}")
    private String nickname;

    @Autowired
    private JavaMailSender javaMailSender;




    @Override
    public Boolean sendSimpleMail(EmailBean emailBean, boolean flag) {
      
        /*
            第二个参数true表示构造一个multipart message类型的邮件,multipart message类型的邮件包含多个正文、附件以及内嵌资源,
            邮件的表现形式更丰富
             */
        try {
        	  MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            //封装发送人邮箱与昵称
            mimeMessageHelper.setFrom(new InternetAddress(nickname + " <" + username + ">"));
            //封装收件人信息,先判断是否为空
            if (!StringUtils.isEmpty(emailBean.getMailToList())) {
                //判断收件人是否为多个
                List<String> mailToList = emailBean.getMailToList();
                String[] toArr = new String[mailToList.size()];
                for (int i = 0; i < mailToList.size(); i++) {
                    toArr[i] = mailToList.get(i);
                }
                //setTo方法指的是传递收件人信息
                mimeMessageHelper.setTo(toArr);
            }
            //封装抄送人信息
            if (!StringUtils.isEmpty(emailBean.getCcList())) {
                //判断抄送人是否为多个
                List<String> ccListList = emailBean.getCcList();
                String[] toCC = new String[ccListList.size()];
                for (int i = 0; i < ccListList.size(); i++) {
                    toCC[i] = ccListList.get(i);
                }
                //setCc方法指的是传递抄送人信息
                mimeMessageHelper.setCc(toCC);
            }
            //封装附件
            if (null != emailBean.getFiles()) {
                //判断当前附件是否为空
                for (File file : emailBean.getFiles()) {
                    mimeMessageHelper.addAttachment(file.getName(), file);
                }
            }
            //封装图片
            if (null != emailBean.getImagePaths() && emailBean.getImagePaths().size() != 0) {
                for (int i = 0; i < emailBean.getImageId().size() - 1; i++) {
                    // 通过FileSystemResource构造静态资源此处传的为图片路径
                    FileSystemResource fileSystemResource = new FileSystemResource(new File(emailBean.getImagePaths().get(i)));
                    // 调用addInline方法将资源加入邮件对象中此处第一个参数为图片id也就是图片名
                    mimeMessageHelper.addInline(emailBean.getImageId().get(i), fileSystemResource);
                }
            }
            //封装邮件主题
            mimeMessageHelper.setSubject(emailBean.getSubject());
            //封装邮件内容
            // setText方法第二个参数为true表示邮件正文是html格式的,默认是false
            mimeMessageHelper.setText(emailBean.getContent(), flag);
                javaMailSender.send(mimeMessage);

        }catch (MailSendException mail){
            logger.error("发送邮件时发生异常!{}", mail.getMessage());
            this.detectInvalidAddress(mail);
            return false;
        }
        catch (Exception e) {
            logger.error("发送邮件时发生异常!{}", e.getMessage());
            return false;
        }
        return true;
    }

    /**
     * 无效的邮件地址
     */
    private void detectInvalidAddress(MailSendException mail){
        Exception[] messageExceptions = mail.getMessageExceptions();
        if (messageExceptions.length > 0) {
            Exception messageException = messageExceptions[0];
            if (messageException instanceof SendFailedException) {
                SendFailedException sfe = (SendFailedException) messageException;
                Address[] invalidAddresses = sfe.getInvalidAddresses();
                if (invalidAddresses != null) {
                    StringBuilder addressStr = new StringBuilder();
                    for (Address address : invalidAddresses) {
                        addressStr.append(address.toString()).append("; ");
                    }

                    logger.error("发送邮件时发生异常!可能有无效的邮箱:{}", addressStr);
                    return;
                }
            }
        }
    }
    public void demo(){
        EmailBean emailBean = new EmailBean();
        emailBean.setContent("测试");
        //封装收件人信息
        List<String> mailToList = new ArrayList<>();
//		mailToList.add("wxh_15596038206@163.com");
        mailToList.add("1289581172@qq.com");
        //封装抄送人信息
		/*List<String> CcList = new ArrayList<>();
		CcList.add("2327545889@qq.com");
		String image01Path = "D:\\sendmailTest\\1.png";
		String image02Path = "D:\\sendmailTest\\2.png";*/
        //封装图片路径
		/*List<String> imagePathList = new ArrayList<>();
		imagePathList.add(image01Path);
		imagePathList.add(image02Path);*/
        //封装图片id
		/*List<String> imageIdList = new ArrayList<>();
		imageIdList.add("1");
		imageIdList.add("1");*/
        //封装附件信息
		/*File imgFile = new File("D:\\sendmailTest\\001.txt");
		File txtFile = new File("D:\\sendmailTest\\002.md");
		List<File> fileList = new ArrayList<>();
		fileList.add(imgFile);
		fileList.add(txtFile);*/
        //确认是否开启thymeleaf模板引擎默认为false 如不需要下方的thymeleaf参数也不需要配置
        boolean flag = false;
        //注意:以下内容如果需要使用thymeleaf引擎则传递不使用可不传递参数
        //传入thymeleaf模板数据
        //注意导入的包是org.thymeleaf.context
		/*Context context = new Context();
		context.setVariable("username", "北京盛世华人");
		context.setVariable("age", "18");
		//如果thymeleaf的模板不存在会报错
		String content = templateEngine.process("mailTemplate01.html", context);*/
        emailBean.setMailToList(mailToList);
        //emailBean.setImageId(imageIdList);
        //emailBean.setImagePaths(imagePathList);
        //emailBean.setFiles(fileList);
        //emailBean.setCcList(CcList);
        emailBean.setContent("测试邮件");
        //主题为必填
        emailBean.setSubject("测试主题");

//        emailService.sendSimpleMail(emailBean,flag);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值