Java 实现简单邮件发送(带附件)

2023-11-11

目录

前言

一、添加pom依赖

二、完整发邮件代码


前言

最近写发邮件的功能时,需要把excel文件和邮件内容一起发送,简单记录!


一、添加pom依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

二、完整发邮件代码

通过流的方式传入到方法中,然后再把附件加到邮件上

public class javaMail {

    public static String host="smtp";
    public static String port="465";
    public static String username="admin@163.com";
    public static String password="";

    /**
     * 发送带附件的邮件
     * @param receiver 发件人
     * @param title 主题
     * @param content 邮件内容
     * @param fileName 附件名
     * @param inputstream 附件流
     * @throws Exception
     */
    public void sendEmail(String receiver, String title, String content, String fileName, ByteArrayInputStream inputstream) throws Exception {

        // 加载配置文件
        Properties props = new Properties();
        try {
            props.put("mail.smtp.ssl.trust", host);
            props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
            props.setProperty("mail.smtp.host", host);   // 发件人的邮箱的 SMTP 服务器地址
            props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
            // port SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
            //                  需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
            //                  QQ邮箱的SMTP(SLL)端口为465或587)
            props.setProperty("mail.smtp.port", port);
            props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.setProperty("mail.smtp.socketFactory.fallback", "false");
            props.setProperty("mail.smtp.socketFactory.port", port);
            // log.info(props.get("mail.smtp.ssl.trust").toString());
        } catch (Exception e) {
            e.printStackTrace();
            //log.debug(e.getMessage());
        }
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log
        try {
            // 根据 Session 获取邮件传输对象
            Transport transport = session.getTransport();
            MimeMessage message = new MimeMessage(session);
            // 创建 MimeMessageHelper 对象
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message, true, "utf-8");
            // 设置发件人地址
            mimeMessageHelper.setFrom(new InternetAddress(username));
            InternetAddress[] tos=InternetAddress.parse(receiver);
            // 设置收件人地址
            mimeMessageHelper.setTo(tos);
            // 设置主题
            mimeMessageHelper.setSubject(title);
            // 设置 消息内容
            //MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
//            Multipart mainPart = new MimeMultipart();  //HTML 格式
            MimeMultipart contentMultipart=new MimeMultipart("related");
            // 创建一个包含HTML内容的MimeBodyPart
            BodyPart html = new MimeBodyPart();
            // 设置HTML内容
            html.setContent(content, "text/html; charset=utf-8");
            contentMultipart.addBodyPart(html);
            //附件部分
            //可以设置多个附件
            if(StringUtils.isNotBlank(fileName))
            {
                MimeBodyPart excelBodyPart=new MimeBodyPart();
                DataSource dataSource=new ByteArrayDataSource(inputstream, "application/excel");
                DataHandler dataHandler=new DataHandler(dataSource);
                excelBodyPart.setDataHandler(dataHandler);
                excelBodyPart.setFileName(MimeUtility.encodeText(fileName));
                contentMultipart.addBodyPart(excelBodyPart);
            }
            // 将MiniMultipart对象设置为邮件内容
            message.setContent(contentMultipart);
            // 发送消息
            transport.connect(username, password);
            //  发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
            transport.sendMessage(message, message.getAllRecipients());
            // 关闭连接
            transport.close();
        } catch (MessagingException | UnsupportedEncodingException e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 实现简单邮件发送(带附件) 的相关文章

随机推荐

  • IP地址、子网掩码、网关、DNS的关系及sicket的常识

    1 什么是IP地址 32 4 8 255 D 1111 1111 B 28 1 所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址 按照TCP IP协议规定 IP地址用二进制来表示 每个IP地址长32bit 比特换
  • 怎么在java中关闭一个thread

    怎么在java中关闭一个thread 我们经常需要在java中用到thread 我们知道thread有一个start 方法可以开启一个线程 那么怎么关闭这个线程呢 有人会说可以用Thread stop 方法 但是这个方法已经被废弃了 根据O
  • ai画面怎么调大小_AI中怎么把图像等比例扩大或缩小尺寸

    展开全部 AI中么把图像等比例扩大或缩小尺寸步骤如e69da5e6ba903231313335323631343130323136353331333366303830下 1 打开ai的软件 执行菜单栏中文件 新建 或者直接使用快捷键Ctrl
  • 什么是Agent

    一方面 Agent技术为解决新的分布应用问题提供了有效途径 另一方面 Agent技术为全面准确地研究分布计算系统的特点提供了合理的概念模型 在分布计算领域 人们通常把在分布式系统中持续自主发挥作用的 具有以下特征的活着的计算实体称为Agen
  • gh-ost大表DDL工具源码阅读

    gh ost大表DDL工具源码阅读 最终目的 开发环境与测试数据库准备 一个简单的ddl案例 debug分析程序执行过程 vscode debug配置 变量介绍 核心处理逻辑 分析我的需求 最终目的 尝试通过阅读源码 多测试熟悉gh ost
  • 多线程学习

    线程的三种创建方式 1 继承Thread类 创建线程的快捷方式一 继承Thread 重写run方法 调用start开启线程 总结 注意线程开启不一定执行 由cpu调度执行 public class TestThread1 extends T
  • 可迭代对象__iter__(), __next__()

    一 解释 在 Python 中 迭代是指逐个访问容器 如列表 元组 集合 字典等 中的元素 为了实现迭代 我们需要使用可迭代对象和迭代器 可迭代对象 Iterable 具有 iter 方法的对象被称为可迭代对象 这个方法返回一个迭代器 迭代
  • git使用socks5代理提示:Unsupported proxy syntax in 127.0.0.1:1080

    提示说是语法错误 打开 gitconfig文件查看代理 http proxy socks5 127 0 0 1 1080 https proxy socks5 127 0 0 1 1080 去掉前后的单引号 错误消失 http proxy
  • sql server 2008 r2各个版本的区别与选择

    windows server 2012 r2 standard安装sql server 2008 R2 https blog csdn net maoiur article details 78322175https blog csdn n
  • UniCode编码表

    Unicode编码则是采用双字节16位来进行编号 可编65536字符 基本上包含了世界上所有的语言字符 它也就成为了全世界一种通用的编码 而且用十六进制4位表示一个编码 非常简结直观 为大多数开发者所接受 特别是十六进制编码后 可以解决汉字
  • java泛型的简介说明

    转自 java泛型的简介说明 下文笔者讲述java泛型的简介说明 如下所示 在JDK5中 Java语言引入了泛型机制 但是这种泛型机制其实是通过类型擦除来实现 即Java中的泛型只在程序源代码中有效 源代码阶段提供类型检查 在编译后的字节码
  • CentOS7 下的配置FTP服务器增强版~(零基础学会FTP配置)

    ps 原文不知出处 但是原文也不能正常启动 这里做了一些修改 如果能正常配置请在下方留言让更多的人看到 因为之前我本人照着网上的教程安装卸载了十多次也无法正常使用 不希望后面的兄弟继续浪费时间 如果不能使用 也请劳烦贴出相应的错误 参考 h
  • go 环境变量存储在哪里?

    Q golang环境变量存储在哪里 A 保存在go env GOENV所示的文件里 C Users Administrator gt go env GOENV C Users Administrator AppData Roaming go
  • SQL Server 数据库的创建、删除、修改

    1 创建数据库CREATE 创建数据库语句的基本格式 CREATE DATABASE database name ON PRIAMRY
  • 使用Mulesoft建立webservice, simple方式,POJO

    Mulesoft是使用CXF来支持web service 有三种方式 1 JAX WS 2 Simple POJO 3 Proxy pass throught 本文介绍POJO 最简单的方式 1 首先创建接口跟实现类 接口可以不用 pack
  • ORACLE 分组函数COUNT使用

    COUNT 返回表中记录总数 适用于任意数据类型 两种使用方式 1 SELECT COUNT 1 FROM sh mp fksq where create id 50101311 运行效果 2 SELECT COUNT FROM sh mp
  • Python学习 -- 正则表达式(re模块)

    正则表达式是一种强大的模式匹配工具 用于在文本中查找和匹配特定模式的字符串 在Python中 我们可以使用re模块来操作和处理正则表达式 本篇技术博客将介绍正则表达式的基础语法和re模块的详细使用方法 并通过具体的代码案例来帮助初学者快速掌
  • sql server2005的死锁

    select request session id spid OBJECT NAME resource associated entity id tableName from sys dm tran locks where resource
  • 解决cannot resolve symbol “xxxx”的问题(亲测有效)

    今天做项目的时候导入了一个api接口 并且把附带的jar包也拷贝到了Maven项目中 但是有个方法一直报cannot resolve symbol xxxx 百思不得其解 在网上搜了各种各样的方法也没有解决 这个问题其实就是无法解析某方法
  • Java 实现简单邮件发送(带附件)

    目录 前言 一 添加pom依赖 二 完整发邮件代码 前言 最近写发邮件的功能时 需要把excel文件和邮件内容一起发送 简单记录 一 添加pom依赖