发送邮件工具类 - EmaiHelper

首先导入jar

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.4.5</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.4.5</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-configuration2</artifactId>
    <version>2.3</version>
</dependency>

邮箱要打开 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

这里以qq邮箱为例:

点击设置:

在这里插入图片描述

点击账户:

在这里插入图片描述

开启:

在这里插入图片描述

application.yml 文件配置

#暂时改为个人邮箱smtp服务器进行测试
spring:
  mail:
    #坑爹的地方:host 通道个人邮箱和企业邮箱通道不同。163的个人邮箱:smtp.163.com ,企业邮箱:smtp.qiye.163.com
    # 腾讯的,个人smtp.qq.com, 企业的:smtp.exmail.qq.com
    host: smtp.qq.com
    username: ****@qq.com
    # 口令是QQ邮箱开通的smtp服务后得到的客户端授权码,不是你的邮箱登录密码
    password: ****
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
            port: 465
        # 开启debug,方便查看邮件发送日志
        debug: true

#这个是自己后续为了方便获取到发送者邮箱的账号
EmaiHelper:
  util:
    username: ****@qq.com

工具类 EmaiHelper

package com.myb.util;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;


@Service
public class EmaiHelper {
    /**
     * JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration 类中配直好的,该类在 Mail
     * 自动配置类 MailSenderAutoConfiguration 中导入 因此这里注入 JavaMailSender 就可以使用了
     */
    @Autowired
    private JavaMailSender mailSender;

    //从配置文件获取的发件人邮箱
    @Value("${EmaiHelper.util.username}")
    private String mailUsername ;

    /**
     *  发送带附件,支持HTML文件发送的的邮件
     * @param mailFrom     发件人
     * @param mailFromNick 发件人昵称
     * @param mailTo       收件人 多个用,分开
     * @param cc           抄送人 多个用,分开
     * @param subject 主题
     * @param content 内容 支持html形似
     * @param files 附件 文件路径数组  多个用,分开
     */
    public void sendMail  (String mailFrom, String mailFromNick, String mailTo, String cc,
                                           String subject, String content, String files) throws Exception {
        mailFromNick = isNullString(mailFromNick);
        mailTo = isNullString(mailTo);
        cc = isNullString(cc);
        subject = isNullString(subject);
        content = isNullString(content);
        files = isNullString(files);
        mailFrom = this.mailUsername;
        MimeMessage mimeMessage = mailSender.createMimeMessage();

        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            /*
            第二个参数true表示构造一个multipart message类型的邮件,multipart message类型的邮件包含多个正文、附件以及内嵌资源,
            邮件的表现形式更丰富
             */
            mimeMessageHelper.setFrom(new InternetAddress(mailFromNick + " <" + mailFrom + ">"));
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content, true);
            // 设置多个收件人
            String[] toAddress = mailTo.split(",");
            mimeMessageHelper.setTo(toAddress);
            //多个抄送
            if (!StringUtils.isEmpty(cc)) {
                String[] toAddcc = cc.split(",");
                mimeMessageHelper.setCc(toAddcc);
            }
            //多个附件
            if (!StringUtils.isEmpty(files)){
                String[] toAddFiles = files.split(",");
                for (String toAddFile : toAddFiles) {
                    File imgFile = new File(toAddFile);
                    mimeMessageHelper.addAttachment(imgFile.getName(), imgFile);
                }
            }
        } catch (Exception e) {
            //运行时异常
            throw new RuntimeException(e.getMessage()); 
        }
        //发送邮件
        mailSender.send(mimeMessage);

    }
    
    //判断如果为null就返回""的方法
    private String isNullString(String str){
        if (null == str){
            return "";
        }
        return str;
    }
}

测试


package com.myb.mailUtil.controller;

import com.myb.util.EmaiHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class TestController {

    @Resource
    EmaiHelper emaiHelper; 

    @RequestMapping("/email")
    public String testSendAttachment() {

        //    // 发件人要跟yml配置文件里填写的邮箱一致
        String mailFrom = "";
        // 收件人
        String mailTo = "****@qq.com,****@qq.com";
        // 抄送
        String cc = "****@qq.com,****@qq.com";

        String fillist = "C:\\Users\\Administrator\\Desktop\\Work\\lock_wallpaper.png," +
                "C:\\Users\\Administrator\\Desktop\\Work\\desk_wallpaper.jpg";

        String content = "<table border=\"1\">\n" +
                "    <tr>\n" +
                "        <td>用户名</td>\n" +
                "        <td >Ma y b</td>\n" +
                "    </tr>\n" +
                "    <tr>\n" +
                "        <td>年龄</td>\n" +
                "        <td>1 8 </td>\n" +
                "    </tr>\n" +
                "</table>";
        String result = "发送邮件成功";
        try {
            emaiHelper.sendMail(mailFrom, "Mayb", mailTo, cc, "TestMail", content,fillist);
        } catch (Exception e) {
            result = "发送邮件失败!";
        }
        return  result;
    }
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值