部分代码:

/**
 * 创建邮件中的附件
 * @param filepath 附件的路径
 * @return         生成附件的对象
 * @throws Exception
 *
 * 测试: filepath = e:\测试\tomcat.png
 * e盘下的tomcat图片
 *
 */
public static MimeBodyPart createAttachmentImg(String filepath) throws Exception{
    /*创建一个表示附件的MimeBodyPart对象,并加入附件内容以及相应的信息*/
    MimeBodyPart attachPart=new MimeBodyPart();
    //FileDataSource用于读取文件数据,并返回代表数据的输入输出和数据的MIME类型
    FileDataSource fileDataSource=new FileDataSource(filepath);

    //DataHandler类用于封装FileDataSource对象,并为应用程序提供访问数据的接口
    attachPart.setDataHandler(new DataHandler(fileDataSource));

    //设置附件名称,MimeUtility.encodeText可以处理乱码问题
    // 加上这句话意味着是作为附件存在的,图片或是文件
    //   fileDataSource.getName() -->   tomcat.png
    attachPart.setFileName(MimeUtility.encodeText(fileDataSource.getName()));
    // 如需要在相关的html代码中显示
    // 此方法添加则意味着是于html中的具备某种关系,表示附件图片的相对路径,图片直接出现在文本里
    attachPart.setHeader("Content-ID", fileDataSource.getName());

    return attachPart;
}

html 代码所做处理:

注意src 写法 表示为图片的相对路径

<img src="cid:tomcat.png" alt="[tomcat logo]" />

完整

import cn.hutool.core.io.FileUtil;
import org.junit.Test;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;

public class TestSendMail {
    @Test
    public void test() throws Exception {
        String send = "发送给谁" ;
        String userName = "发送者的用户名" ;
        String pwd = "密码" ;

        String subject = "java_mail 邮件发送测试" ;
        String img = "E:\\src\\测试数据\\jsp\\tomcat.png" ;
        String path = "E:\\src\\测试数据\\jsp\\index.jsp" ;

        Message message = null ;

        // 定义邮箱服务器配置
        Properties props=new Properties();
        // 163 邮件服务器地址
        props.put("mail.smtp.host", "smtp.163.com");
        // 163 邮件服务器端口
        props.put("mail.smtp.port", "25");
        // 163 邮件服务器认证属性
        props.put("mail.smtp.auth", true);

        //获取session 并传入用户名,密码
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(userName, pwd);
            }
        });

        message=new MimeMessage(session);
        // 设置发送人地址
        message.setFrom(new InternetAddress(userName));
        //目标用户邮箱地址
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(send));
        // 设置发送日期
        message.setSentDate(new Date());
        //设置主题
        message.setSubject(subject);

        Multipart multipart=new MimeMultipart();

        //获取html 页面代码
        BodyPart bodyPart=new MimeBodyPart();
        StringBuffer sb=readLine1(path);
        bodyPart.setContent(sb.toString(), "text/html;charset=utf-8");

        multipart.addBodyPart(bodyPart);
        //图片附近
        multipart.addBodyPart(createAttachmentImg(img));
        //页面附件
        multipart.addBodyPart(createAttachment(path));
        message.setContent(multipart);
        // 发送
        Transport.send(message);

        System.out.println("完成-------------");

    }

    /**
     * 创建邮件中的附件
     * @param filepath 附件的路径
     * @return         生成附件的对象
     * @throws Exception
     */
    public static MimeBodyPart createAttachment(String filepath) throws Exception{
        //创建一个表示附件的MimeBodyPart对象,并加入附件内容以及相应的信息
        MimeBodyPart attachPart=new MimeBodyPart();

        //FileDataSource用于读取文件数据,并返回代表数据的输入输出和数据的MIME类型
        FileDataSource fileDataSource=new FileDataSource(filepath);

        //DataHandler类用于封装FileDataSource对象,并为应用程序提供访问数据的接口
        attachPart.setDataHandler(new DataHandler(fileDataSource));

        //设置附件名称,MimeUtility.encodeText可以处理乱码问题
        // 加上这句话意味着是作为附件存在的,图片或是文件
        attachPart.setFileName(MimeUtility.encodeText(fileDataSource.getName()));

        return attachPart;
    }
    /**
     * 创建邮件中的附件
     * @param filepath 附件的路径
     * @return         生成附件的对象
     * @throws Exception
     *
     * 测试: filepath = e:\测试\tomcat.png
     * e盘下的tomcat图片
     *
     */
    public static MimeBodyPart createAttachmentImg(String filepath) throws Exception{
        MimeBodyPart attachPart = createAttachment(filepath);
        // 如需要在相关的html代码中显示
        // 此方法添加则意味着是于html中的具备某种关系,表示附件图片的相对路径,图片直接出现在文本里
        attachPart.setHeader("Content-ID", new File(filepath).getName());
        return attachPart;
    }

    public StringBuffer readLine1(String path)throws  Exception{
        StringBuffer sb=new StringBuffer();
        List<String> list = FileUtil.readLines(path, "utf-8");
        for(String str : list){
            sb.append(str);
        }
        return  sb ;
    }
}