Java发送邮件(图片、附件、HTML)

简介: Java发送邮件(图片、附件、HTML)

使用邮件的一个小项目:定时邮件服务(发送考研词汇)


@[toc]


一、简介

要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

SMTP服务器地址:

一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。

SMTP协议:

通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
163邮箱

POP3协议

通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
QQ邮箱

二、邮箱服务授权配置

163邮箱在:设置—POP3中,打开相应的配置属性;

QQ邮箱:设置—账户安全中,打开相应的配置信息;

二、pom.xml依赖

   <!--邮件服务-->
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-mail</artifactId>
   </dependency>

   <dependency>
       <groupId>commons-net</groupId>
       <artifactId>commons-net</artifactId>
       <version>3.3</version>
   </dependency>
AI 代码解读

三、properties配置文件

#邮箱的账号(163邮箱)
spring.mail.host= smtp.163.com
spring.mail.username=comlydms@163.com
spring.mail.password=158143484fs
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.starttls.enable=true
spring.mail.properties.mail.starttls.required=true
AI 代码解读

四、发送普通邮件

1、web层代码

    /**
     * 测试普通邮件调用
     */
    @RequestMapping(value = "/simpleEmail", method = {RequestMethod.POST})
    public ApiResult sendSimpleEmail() {

        mailService.sendSimpleMail("395096666@qq.com", "这是一个测试邮件", "这是一个测试邮件");
        return ApiResult.succ("调用成功");
    }
AI 代码解读

2、Service代码

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender sender;

    @Value("${spring.mail.username}")
    private String fromMail;

    /**
     * 发送普通邮件
     *
     * @param toMail  收件方
     * @param subject 标题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String toMail, String subject, String content) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(fromMail);
        simpleMailMessage.setTo(toMail);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        try {
            sender.send(simpleMailMessage);
            logger.info("发送给:{}简单邮件已经发送。 subject:{}", toMail, subject);
        } catch (Exception e) {
            logger.info("发送给:{}send mail error subject:{}", toMail, subject);
            e.printStackTrace();
        }
    }
AI 代码解读

二、发送Html格式邮件

1、Web层代码

   /**
     * 测试Html格式调用
     */
    @RequestMapping(value = "/htmlEmail", method = {RequestMethod.POST})
    public ApiResult sendHtmlEmail() {

//        1、拼接模拟的数据
        English english = new English();
        english.setEnglish("my");
        english.setChinese("我的");
        english.setCodechinese("自己的东西");
        ArrayList<English> en = new ArrayList<>();
        en.add(english);
        en.add(english);

//        2.1、写html开始内容
        String start = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title></title></head><body><font color=\"red\">定时发送</font><table border=\"1\"><tr><th>英文</th><th>标准注解</th><th>代码中注解</th></tr>";
//        2-2、表html中间内容
        String prime = "";
        for (int i = 0; i < en.size(); i++) {
            English english1 = en.get(i);
            String center = "<tr><td>English</td><td>Chinese</td><td>CodeChinese</td></tr>";
            String one = center.replaceFirst("English", english1.getEnglish());
            String two = one.replaceFirst("Chinese", english1.getChinese());
            String result = two.replaceFirst("CodeChinese", english1.getCodechinese());
            prime = prime + result;

        }
//        2-3、写html结尾内容
        String end = "</table></body></html>";
//        3、拼接html
        String html = start + prime + end;
//        4、发送邮件
        mailService.sendHtmlMail("395096666@qq.com", "定时邮件发送", html);

        return ApiResult.succ("调用成功");
    }
AI 代码解读

2、Service代码

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender sender;

    @Value("${spring.mail.username}")
    private String fromMail;

    /**
     * 发送带Html格式邮件
     *
     * @param toMail  收件方
     * @param subject 标题
     * @param content 邮件内容
     */
    public void sendHtmlMail(String toMail, String subject, String content) {
//        1、封装数据
        MimeMessage mimeMessage = sender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            mimeMessageHelper.setTo(toMail);
            mimeMessageHelper.setFrom(fromMail);
            mimeMessageHelper.setText(content, true);
            mimeMessageHelper.setSubject(subject);

//            2、发送邮件
            sender.send(mimeMessage);
            logger.info("发送给:{}html邮件已经发送。 subject:{}", toMail, subject);
        } catch (Exception e) {
            logger.info("发送给:{}html send mail error subject:{}", toMail, subject);
            e.printStackTrace();
        }
    }
AI 代码解读

三、发送Html带图片邮件

1、Web层代码

   /**
     * 测试Html带图片
     */
    @RequestMapping(value = "/htmlPotoEmail", method = {RequestMethod.POST})
    public ApiResult sendHtmlPoto() {
//        1、创建html格式的数据
        String html = "<!DOCTYPE html>\r\n" +
                "<html>\r\n" +
                "<head>\r\n" +
                "<meta charset=\"UTF-8\">\r\n" +
                "<title>Insert title here</title>" +
                "\r\n" +
                "</head>\r\n" +
                "<body>\r\n" +
                "<img src=\"cid:image1\"/> " +
                "<img src=\"cid:image2\"/> " +
                "    <font color=\"red\">发送html</font>\r\n" +
                "</body>\r\n" +
                "</html>";
//        2、封装html中的图片数据
        List<InlineResource> list = new ArrayList<>();
//        2-1获取图片的地址
        String path = WordSmsController.class.getClassLoader().getResource("image.jpg").getPath();
//        2-2、将图片的地址封装到实体类中
        InlineResource resource = new InlineResource("image1", path);
        InlineResource resource2 = new InlineResource("image2", path);
        list.add(resource2);
        list.add(resource);

//        3、发送邮件
        mailService.sendHtmlPhotoMail("395096666@qq.com", "这是一个测试邮件", html, list);

        return ApiResult.succ("调用成功");
    }
AI 代码解读

2、Service层代码

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender sender;

    @Value("${spring.mail.username}")
    private String fromMail;

   /**
     * 发送静态资源(一般是图片)的邮件
     *
     * @param
     * @param subject
     * @param content 邮件内容,需要包括一个静态资源的id,比如:<img src=\"cid:image\" >
     * @param
     */
    public void sendHtmlPhotoMail(String to, String subject, String content, List<InlineResource> resourceist) {

//            1、编写发送的数据
        MimeMessage message = sender.createMimeMessage();
//            1-1、添加html数据
        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
//                1-2、添加图片数据
            for (InlineResource inlineResource : resourceist) {
//                    图片的路径
                FileSystemResource res = new FileSystemResource(new File(inlineResource.getPath()));
//                    将html中的图片名称替换为相应的图片路径
                helper.addInline(inlineResource.getCid(), res);
            }

//                2、发送邮件
            sender.send(message);
            logger.info("嵌入静态资源的邮件已经发送。");
        } catch (Exception e) {
            logger.error("发送嵌入静态资源的邮件时发生异常!", e);
        }
    }
AI 代码解读

3、封装图片路径的实体类

避免代码看的太多,实体类只保留了使用。

public class InlineResource {

    private String cid;
    private String path;

    public InlineResource(String cid, String path) {
        this.cid = cid;
        this.path = path;
    }
}
AI 代码解读

四、发送带附件邮件

1、Web层代码

   /**
     * 测试附件调用
     */
    @RequestMapping(value = "/fileEmail", method = {RequestMethod.POST})
    public ApiResult sendFileEmail() {
//        1、写html格式内容
        String html = "<!DOCTYPE html>\r\n" +
                "<html>\r\n" +
                "<head>\r\n" +
                "<meta charset=\"UTF-8\">\r\n" +
                "<title>Insert title here</title>\r\n" +
                "</head>\r\n" +
                "<body>\r\n" +
                "    <font color=\"red\">发送html</font>\r\n" +
                "</body>\r\n" +
                "</html>";
//        2、获取图片所在的路径
        String path = WordSmsController.class.getClassLoader().getResource("image.jpg").getPath();
//        3、发送邮件
        mailService.sendFileMail("395096666@qq.com", "这是一个测试邮件", html, path);

        return ApiResult.succ("调用成功");
    }
AI 代码解读

2、Service层代码

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender sender;

    @Value("${spring.mail.username}")
    private String fromMail;

  /**
     * 发送带附件邮件
     *
     * @param toMail
     * @param subject
     * @param content
     */
    public void sendFileMail(String toMail, String subject, String content, String filePath) {
//        1、编写发送的数据
        MimeMessage message = sender.createMimeMessage();
//        1-1、添加html数据
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(toMail);
            helper.setSubject(subject);
            helper.setText(content, true);
//            1-2、添加图片数据
//            获取图片数据
            FileSystemResource file = new FileSystemResource(new File(filePath));
//            获取图片的名称
            String fileName = filePath.substring(filePath.lastIndexOf("/"));
//            添加数据
            helper.addAttachment(fileName, file);

//            2、发送邮件
            sender.send(message);
            logger.info("发送给:{}带附件的邮件已经发送。",toMail);
        } catch (Exception e) {
            logger.error("发送给:{}带附件的邮件时发生异常!", toMail);
            e.printStackTrace();
        }
    }
AI 代码解读

八、完整代码

为了方便使用,把使用的代码都贴在下面

1、Web层代码

import com.lydms.common.ApiResult;
import com.lydms.pojo.English;
import com.lydms.pojo.InlineResource;
import com.lydms.utils.MailService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;

@RestController
@RequestMapping("/email")
public class WordEmailController {
    private static final Logger logger = LogManager.getLogger(WordSmsController.class);

    @Autowired
    private MailService mailService;



    /**
     * 测试普通邮件调用
     */
    @RequestMapping(value = "/simpleEmail", method = {RequestMethod.POST})
    public ApiResult sendSimpleEmail() {

        mailService.sendSimpleMail("395096666@qq.com", "这是一个测试邮件", "这是一个测试邮件");

        return ApiResult.succ("调用成功");
    }

    /**
     * 测试Html格式调用
     */
    @RequestMapping(value = "/htmlEmail", method = {RequestMethod.POST})
    public ApiResult sendHtmlEmail() {

//        1、拼接模拟的数据
        English english = new English();
        english.setEnglish("my");
        english.setChinese("我的");
        english.setCodechinese("自己的东西");
        ArrayList<English> en = new ArrayList<>();
        en.add(english);
        en.add(english);

//        2.1、写html开始内容
        String start = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title></title></head><body><font color=\"red\">定时发送</font><table border=\"1\"><tr><th>英文</th><th>标准注解</th><th>代码中注解</th></tr>";
//        2-2、表html中间内容
        String prime = "";
        for (int i = 0; i < en.size(); i++) {
            English english1 = en.get(i);
            String center = "<tr><td>English</td><td>Chinese</td><td>CodeChinese</td></tr>";
            String one = center.replaceFirst("English", english1.getEnglish());
            String two = one.replaceFirst("Chinese", english1.getChinese());
            String result = two.replaceFirst("CodeChinese", english1.getCodechinese());
            prime = prime + result;

        }
//        2-3、写html结尾内容
        String end = "</table></body></html>";
//        3、拼接html
        String html = start + prime + end;
//        4、发送邮件
        mailService.sendHtmlMail("395096666@qq.com", "定时邮件发送", html);

        return ApiResult.succ("调用成功");
    }


    /**
     * 测试Html带图片
     */
    @RequestMapping(value = "/htmlPotoEmail", method = {RequestMethod.POST})
    public ApiResult sendHtmlPotoEmail() {
//        1、创建html格式的数据
        String html = "<!DOCTYPE html>\r\n" +
                "<html>\r\n" +
                "<head>\r\n" +
                "<meta charset=\"UTF-8\">\r\n" +
                "<title>Insert title here</title>" +
                "\r\n" +
                "</head>\r\n" +
                "<body>\r\n" +
                "<img src=\"cid:image1\"/> " +
                "<img src=\"cid:image2\"/> " +
                "    <font color=\"red\">发送html</font>\r\n" +
                "</body>\r\n" +
                "</html>";
//        2、封装html中的图片数据
        List<InlineResource> list = new ArrayList<>();
//        2-1获取图片的地址
        String path = WordSmsController.class.getClassLoader().getResource("image.jpg").getPath();
//        2-2、将图片的地址封装到实体类中
        InlineResource resource = new InlineResource("image1", path);
        InlineResource resource2 = new InlineResource("image2", path);
        list.add(resource2);
        list.add(resource);

//        3、发送邮件
        mailService.sendHtmlPhotoMail("395096666@qq.com", "这是一个测试邮件", html, list);

        return ApiResult.succ("调用成功");
    }


    /**
     * 测试附件调用
     */
    @RequestMapping(value = "/fileEmail", method = {RequestMethod.POST})
    public ApiResult sendFileEmail() {
//        1、写html格式内容
        String html = "<!DOCTYPE html>\r\n" +
                "<html>\r\n" +
                "<head>\r\n" +
                "<meta charset=\"UTF-8\">\r\n" +
                "<title>Insert title here</title>\r\n" +
                "</head>\r\n" +
                "<body>\r\n" +
                "    <font color=\"red\">发送html</font>\r\n" +
                "</body>\r\n" +
                "</html>";
//        2、获取图片所在的路径
        String path = WordSmsController.class.getClassLoader().getResource("image.jpg").getPath();
//        3、发送邮件
        mailService.sendFileMail("395096666@qq.com", "这是一个测试邮件", html, path);

        return ApiResult.succ("调用成功");
    }
}
AI 代码解读

2、Service层代码

import com.lydms.pojo.InlineResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.List;

@Service
public class MailService {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender sender;

    @Value("${spring.mail.username}")
    private String fromMail;

    /**
     * 发送普通邮件
     *
     * @param toMail  收件方
     * @param subject 标题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String toMail, String subject, String content) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(fromMail);
        simpleMailMessage.setTo(toMail);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        try {
            sender.send(simpleMailMessage);
            logger.info("发送给:{}简单邮件已经发送。 subject:{}", toMail, subject);
        } catch (Exception e) {
            logger.info("发送给:{}send mail error subject:{}", toMail, subject);
            e.printStackTrace();
        }
    }


    /**
     * 发送带Html格式邮件
     *
     * @param toMail  收件方
     * @param subject 标题
     * @param content 邮件内容
     */
    public void sendHtmlMail(String toMail, String subject, String content) {
//        1、封装数据
        MimeMessage mimeMessage = sender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            mimeMessageHelper.setTo(toMail);
            mimeMessageHelper.setFrom(fromMail);
            mimeMessageHelper.setText(content, true);
            mimeMessageHelper.setSubject(subject);

//            2、发送邮件
            sender.send(mimeMessage);
            logger.info("发送给:{}html邮件已经发送。 subject:{}", toMail, subject);
        } catch (Exception e) {
            logger.info("发送给:{}html send mail error subject:{}", toMail, subject);
            e.printStackTrace();
        }
    }


    /**
     * 发送静态资源(一般是图片)的邮件
     *
     * @param
     * @param subject
     * @param content 邮件内容,需要包括一个静态资源的id,比如:<img src=\"cid:image\" >
     * @param
     */
    public void sendHtmlPhotoMail(String to, String subject, String content, List<InlineResource> resourceist) {

//            1、编写发送的数据
        MimeMessage message = sender.createMimeMessage();
//            1-1、添加html数据
        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
//                1-2、添加图片数据
            for (InlineResource inlineResource : resourceist) {
//                    图片的路径
                FileSystemResource res = new FileSystemResource(new File(inlineResource.getPath()));
//                    将html中的图片名称替换为相应的图片路径
                helper.addInline(inlineResource.getCid(), res);
            }

//                2、发送邮件
            sender.send(message);
            logger.info("嵌入静态资源的邮件已经发送。");
        } catch (Exception e) {
            logger.error("发送嵌入静态资源的邮件时发生异常!", e);
        }
    }


    /**
     * 发送带附件邮件
     *
     * @param toMail
     * @param subject
     * @param content
     */
    public void sendFileMail(String toMail, String subject, String content, String filePath) {
//        1、编写发送的数据
        MimeMessage message = sender.createMimeMessage();
//        1-1、添加html数据
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(toMail);
            helper.setSubject(subject);
            helper.setText(content, true);
//            1-2、添加图片数据
//            获取图片数据
            FileSystemResource file = new FileSystemResource(new File(filePath));
//            获取图片的名称
            String fileName = filePath.substring(filePath.lastIndexOf("/"));
//            添加数据
            helper.addAttachment(fileName, file);

//            2、发送邮件
            sender.send(message);
            logger.info("发送给:{}带附件的邮件已经发送。",toMail);
        } catch (Exception e) {
            logger.error("发送给:{}带附件的邮件时发生异常!", toMail);
            e.printStackTrace();
        }
    }
}
AI 代码解读
目录
打赏
0
0
0
0
36
分享
相关文章
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
用html+javascript打造公文一键排版系统12:删除附件说明中“附件:”里的空格
用html+javascript打造公文一键排版系统12:删除附件说明中“附件:”里的空格
基于 HTML5 和 Canvas 开发的在线图片编辑器
基于 HTML5 和 Canvas 开发的在线图片编辑器
256 0
【Html.js——图片折叠效果】折叠手风琴(蓝桥杯真题-1763)【合集】
本项目实现了一个图片折叠手风琴效果,使用jQuery完成。主要包括以下部分: - **介绍**:任务是通过点击图片实现折叠和展开的效果。 - **准备**:内置初始代码,包含 `css/style.css`、`images/` 文件夹、`js/` 文件夹及 `index.html` 等文件。启动 Web Server 服务可运行项目。 - **目标**:完善 `index.js` 文件,使页面达到预期的折叠效果。 - **规定**:严格按步骤操作,保持默认文件结构不变,并在完成后保持 Web 服务正常访问状态。 - **通关代码**:使用 jQuery 实现点击事件,为选中元素添加 `act
94 19
|
9月前
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
144 1
利用html2canvas插件自定义生成名片信息并保存图片
|
10月前
HTML图片
【10月更文挑战第4天】HTML图片。
81 2
Java 发送邮件示例
本示例展示了如何使用Java编程语言发送电子邮件。通过利用JavaMail API,这段代码实现了从配置SMTP服务器,设置邮件属性,到发送邮件的全过程,为开发者提供了实用的参考。
728 12
|
11月前
|
Twaver-HTML5基础学习(37)network导出图片并下载
本文介绍了如何在Twaver-HTML5中将network导出为图片并提供下载,主要通过将network转换为canvas对象,然后转换为base64编码的图片进行展示和下载。
99 5
NekoHTML 是一个基于Java的HTML扫描器和标签补全器
**NekoHTML** 是一个基于Java的HTML扫描器和标签补全器(tag balancer),由J. Andrew Clark开发。它主要用于解析HTML文档,并能够“修正”许多在编写HTML文档过程中常犯的错误,如增补缺失的父元素、自动用结束标签关闭相应的元素,以及处理不匹配的内嵌元素标签等。这使得程序能够以标准的XML接口来访问HTML文档中的信息。 ### NekoHTML的主要特点包括: 1. **错误修正**:能够自动修正HTML中的常见错误,如未闭合的标签等。 2. **DOM树生成**:将HTML源代码转化为DOM(Document Object Model)结构,便
148 1
【前端web入门第一天】02 HTML图片标签 超链接标签 音频标签 视频标签
本文档详细介绍了HTML中的图片、超链接、音频和视频标签的使用方法。首先讲解了`&lt;img&gt;`标签的基本用法及其属性,包括如何使用相对路径和绝对路径。接着介绍了`&lt;a&gt;`标签,用于创建超链接,并展示了如何设置目标页面打开方式。最后,文档还涵盖了如何在网页中嵌入音频和视频文件,包括简化写法及常用属性。
206 13

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问