用Java发送邮件 带有图片和附件

2023-11-16

package com.baidu.email;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.security.GeneralSecurityException;
import java.util.Properties;

public class SendFileMail {
    public static void main(String[] args) throws MessagingException, GeneralSecurityException {

        //创建一个配置文件保存并读取信息
        Properties properties = new Properties();

        //设置qq邮件服务器
        properties.setProperty("mail.host","smtp.qq.com");
        //设置发送的协议
        properties.setProperty("mail.transport.protocol","smtp");
        //设置用户是否需要验证
        properties.setProperty("mail.smtp.auth","true");


        //=================================只有QQ存在的一个特性,需要建立一个安全的链接
        // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);

        //=================================准备工作完毕

        //1.创建一个session会话对象;
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("1138954180@qq.com", "zuyrcoenqrrfjgff");
            }
        });

        //可以通过session开启Dubug模式,查看所有的过程
        session.setDebug(true);


        //2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;
        Transport tp = session.getTransport();

        //3.连接服务器,需要抛出异常;
        tp.connect("smtp.qq.com","1138954180@qq.com","zuyrcoenqrrfjgff");

        //4.连接上之后我们需要发送邮件;
        MimeMessage mimeMessage = imageMail(session);

        //5.发送邮件
        tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

        //6.关闭连接
        tp.close();

    }


    public static MimeMessage imageMail(Session session) throws MessagingException {

        //消息的固定信息
        MimeMessage mimeMessage = new MimeMessage(session);

        //邮件发送人
        mimeMessage.setFrom(new InternetAddress("1138954180@qq.com"));
        //邮件接收人,可以同时发送给很多人,我们这里只发给自己;
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("1138954180@qq.com"));
        mimeMessage.setSubject("我也不知道是个什么东西就发给你了"); //邮件主题

        /*
        编写邮件内容
        1.图片
        2.附件
        3.文本
         */

        //图片
        MimeBodyPart body1 = new MimeBodyPart();
            body1.setDataHandler(new DataHandler(new FileDataSource("web/src/resources/a.png")));
        body1.setContentID("a.png"); //图片设置ID

        //文本
        MimeBodyPart body2 = new MimeBodyPart();
        body2.setContent("请注意,我不是广告<img src='cid:a.png'>","text/html;charset=utf-8");

        //附件
        MimeBodyPart body3 = new MimeBodyPart();
        body3.setDataHandler(new DataHandler(new FileDataSource("web/src/resources/123.properties")));
        body3.setFileName("123.properties"); //附件设置名字

        MimeBodyPart body4 = new MimeBodyPart();
        body4.setDataHandler(new DataHandler(new FileDataSource("web/src/resources/123.txt")));
        body4.setFileName("123.txt"); //附件设置名字

        //拼装邮件正文内容
        MimeMultipart multipart1 = new MimeMultipart();
        multipart1.addBodyPart(body1);
        multipart1.addBodyPart(body2);
        multipart1.setSubType("related"); //1.文本和图片内嵌成功!

        //new MimeBodyPart().setContent(multipart1); //将拼装好的正文内容设置为主体
        MimeBodyPart contentText =  new MimeBodyPart();
        contentText.setContent(multipart1);

        //拼接附件
        MimeMultipart allFile =new MimeMultipart();
        allFile.addBodyPart(body3); //附件
        allFile.addBodyPart(body4); //附件
        allFile.addBodyPart(contentText);//正文
        allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed;
        
        //放到Message消息中
        mimeMessage.setContent(allFile);
        mimeMessage.saveChanges();//保存修改
        return mimeMessage;
    }
}

最后查看邮箱,就会有一封新的电子邮件。
在这里插入图片描述

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

用Java发送邮件 带有图片和附件 的相关文章

  • tomcat8下启动 jsp报错

    The method getDispatcherType is undefined for the type HttpServletRequest java lang ClassNotFoundException org apache js
  • PLSQL中的FOR循环

    游标的FOR循环 循环体是查询的表 游标的for循环 PL SQL 语言提供了 游标 FOR 循环语句 自动执行游标的 OPEN FETCH CLOSE 语句和 循环 语句的功能 当进入循环时 游标 FOR 循环语句 自动 打开游标 并提取
  • LCD调试流程

    本来想学的更深入一些再来写这些总结 但想想 边学边写 记录成长过程也挺好的 下面自底向上 了解LCD的整个工作流程 一 LCD的组成结构和各结构的功能 1 背光板模组 提供光的来源 2 上下偏光板 TFT Glass Substrate 液
  • 【C/C++学习笔记】c++ 回调函数

    1 介绍 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针 地址 作为参数传递给另一个函数 当这个指针被用来调用其所指向的函数时 我们就说这是回调函数 回调函数不是由该函数的实现方直接调用 而是在特定的事件或条件发生时由另外的一方
  • Maven自动化构建工具详解

    一 Maven概述 1 使用Maven原因 我们先通过企业开发中的实际需求来看一看哪些方面是我们现有技术的不足 1 第三方Jar包添加 在今天的JavaEE开发领域 有大量的第三方框架和工具可以供我们使用 要使用这些jar包最简单的方法就是
  • win7+ubuntu20.04双系统安装,以及pointnet2_pytorch编译记录

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 win7 ubuntu20 04双系统安装 二 Ubuntu安装相关 1 Anaconda 2 Nvidia Driver 3 编译pointnet2 p
  • SSM框架-SpringMVC详解

    springmvc概述 Springmvc是spring框架的一个模块 spring和springmvc无需中间整合层整合 Springmvc是一个基于mvc的web框架 表现层的三大任务 URL到controller的映射 http请求参
  • 【MySQL】20个经典面试题,全部答对月薪10k+

    欢迎加入QQ群讨论更多内容 群号 835870546 原文链接 http bbs 51cto com thread 1470880 1 html Part2 经典题目 1 MySQL的复制原理以及流程 基本原理流程 3个线程以及之间的关联
  • IntelliJ Idea 常用快捷键列表

    IntelliJ Idea 常用快捷键列表 Alt 回车 导入包 自动修正 Ctrl N 查找类 Ctrl Shift N 查找文件 Ctrl Alt L 格式化代码 Ctrl Alt O 优化导入的类和包 Alt Insert 生成代码
  • c++/c混合编程

    一 前言 代码从编写到能执行之前 需要经过编译 链接阶段 通常 编译每一个单元文件会生成目标文件 然后链接器会把各个目标文件链接起来生成可执行性文件 链接器之所以能把目标文件相互之间链接起来 就是通过查找目标文件中的唯一函数符号 即经过编译
  • 飞行管理计算机哪个公司,波音737-700的FMC(飞行管理计算机的讲解) VLN081

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 DEP ARR 进离场页面 第一行是你的起始机场 左1 右1 XXXX ARR gt 右2 HOLD 等待点设置叶面 等待点必须在航路上设置的一个点 并已经如入到LEGS 左1 XX 点的名称
  • 初识设计模式:单例模式

    设计模式 是一种思想 解决一个问题的方法有很多种 编程实现一个解决方法也有很多种 设计模式是一种针对不同问题 设计适合该问题的代码 在保证解决问题的基础上 还要保证能有好的扩展性 再有新需求的时候可以便捷的添加新模块 而非大动干戈的改变整个
  • cocos2d Sprite混合达到水流动效果

    使用Sprite混合setBlendFunc方式达到流动效果 void MainHomeLayer updateWaterFall float dt static float offset 0 if NULL waterFall water
  • Qt获取CPU编号和硬盘序列号

    windows下执行命令除了用cmd之外 还有个东西叫WMIC 非常强大 可以通过他获取很多信息 包括硬件信息 QString frmMain getWMIC const QString cmd 获取cpu名称 wmic cpu get N
  • Pandas中DataFrame数据合并、连接(concat、merge、join)

    最近在工作中 遇到了数据合并 连接的问题 故整理如下 供需要者参考 一 concat 沿着一条轴 将多个对象堆叠到一起 concat方法相当于数据库中的全连接 union all 它不仅可以指定连接的方式 outer join或inner
  • sql注入万能密码总结

    select from admin where username and password 第一种 当你已知管理员账号名为admin时可以直接尝试 admin select from admin where username admin a
  • QT/PyQT/PySide 通过富文本形式实现关键词高亮

    因为本质上都是QT 所以我标题带了QT 这个思路是没问题的 就是用C 得换个语言 最开始想根据之前一篇博客的思路进行高亮 PyQT PySide 文本浏览器跳转到指定行 并高亮指定行 qt 指定行高亮 Toblerone Wind的博客 C
  • 归一化互相关匹配

    设待匹配图像I的像素大小为MxN 模板T的像素大小为mxn 从图像I中任意选取一块像素大小为mxn的子图Ix y 其左上角在图像I中的坐标为 x y 可知坐标范围为 其中 M N分别为待匹配图像像素的行数和列数 m n分别为模板像素的行数和
  • [USF-XSim-62] ‘elaborate‘ step failed with errors.[Vivado 12-4473] Detected error while running sim

    USF XSim 62 elaborate step failed with error s Please check the Tcl console output and Vivado 12 4473 Detected error whi
  • linux中shell变量$#,$@,$0,$1,$2的含义解释/Shell中的${}、##和%%使用范例/export

    linux中shell变量 0 1 2的含义解释 变量说明 Shell本身的PID ProcessID Shell最后运行的后台Process的PID 最后运行的命令的结束代码 返回值 使用Set命令设定的Flag一览 所有参数列表 如 用

随机推荐

  • 【开集识别论文解读】Classification-Reconstruction Learning for Open-Set Recognition——CVPR2019

    论文原文 https arxiv org pdf 1812 04246v2 pdf 本文提出的CROSR利用潜在表示进行重建 并在不损害已知类别分类精度的情况下实现鲁棒未知检测 开集分类器可以检测不属于任何训练类的样本 通常 它们将概率分布
  • 机器翻译的数据预处理

    主要分为三大块 1 数据筛选 去除那些训练集中不对齐 质量差的句对 相关的技巧有很多 去重 重复的数据会使训练过程有偏 可以简单地去除完全相同的句对 也可以计算每两个句子之间的局部哈希值 把相似度小于某个阈值的句对都去除 去空行 空行不能提
  • 微信改昵称提醒服务器调试,修改微信“官方提醒”,最近超火!

    原标题 修改微信 官方提醒 最近超火 最近有一个修改微信 官方提醒 小尾巴的聊天玩法在抖音上火了 利用微信内置一个小功能套路了不少网友 效果就如封面图所示 是不是很神奇呢 具体怎么玩 来看看下面的具体操作吧 其实这个玩法是用到微信聊天里一个
  • hdu 2043 密码

    密码 Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 22640 Accepted Submissi
  • mysql数据库字段名为关键字出现的问题

    真是奇葩年年多 今天又一个 我们都知道 无论是保留字还是关键字或者特殊端口等等 都是系统预留的自用的 但是偏偏有人喜欢用这些 所以就导致其他人在用的时候出现各种错误 今天就记录一个我遇到的 关于mysql字段名的问题 今天在用sql查询时
  • 变量的 4 种存储类型

    存储类型 总共有四种存储类型的变量 分别为自动变量 auto 静态变量 static 外部变量 extern 以及寄存器变量 register auto 函数中所有的非静态局部变量 c语言可以指定类型如auto int a c 编译器不能指
  • Android开发:Eclipse中SqliteManager插件使用

    通常开发Android的时候要使用到数据库操作 会遇到下面小问题 数据库文件在哪 怎样訪问或操作 能够通过 打开DDMS gt File Explorer看到的sqlite数据库在eclipse 然后在文件夹 data data packa
  • facebook文本生成音乐项目-audiocraft 安装教程

    文章目录 所需环境 安装ffmpeg 克隆项目仓库 安装相关依赖库 运行项目 模型下载 自动下载模型失败 pytorch相关模型缓存目录 MusicGen 模型下载地址 所需环境 ffmpeg python gt 3 9 git cuda1
  • Python 通过execjs执行js代码抛出异常IndexError或语法错误

    问题 通过execjs执行JavaScript代码 虽然JavaScript代码没有语法错误 但是python解释器抛出异常IndexError list index out of range 语法错误 抛出异常语法错误的解决步骤 1 根据
  • MFC线程退出方法

    MFC使用AfxBeginThread创建线程退出方法 CWinThread myThread 线程 bool isThreadBegin false 线程退出 执行控制 创建线程 void CDlg OnButtonCreateThrea
  • python启动一个下载服务器

    1 把Desktop目录当成根目录 cd Desktop 2 python2启动下载服务器 python2 m SimpleHttpServer 3 python3启动下载服务器 python3 m http server 4 浏览器访问h
  • 解决dubbo问题:forbid consumer

    原文地址 http www jameswxx com e4 b8 ad e9 97 b4 e4 bb b6 e8 a7 a3 e5 86 b3dubbo e9 97 ae e9 a2 98 ef bc 9aforbid consumer 线
  • 应急响应(日志/流量)

    事件分类 有害程序事件 网络攻击事件 信息破坏事件 事件内容安全事件 设备设施故障事件 灾害性事件 其它事件 应急响应工作流程 准备阶段 应急团队建设 应急方案制定 等级保护测评 检测阶段 判断安全设备告警 判断事件类型 判断事件级别 确定
  • 在SQL Server 中读取 AD 信息

    http www myexception cn sql server 1011477 html EXEC sp addlinkedserver ADSI Active Directory Services 2 5 ADSDSOObject
  • CentOS7升级OpenSSL版本

    1 CentOS7 6默认安装的openssl版本为 openssl version 2 下载最新的openssl wget https www openssl org source openssl 1 1 1c tar gz wget无法
  • Vue中mixins(混入)的介绍和使用

    Vue中mixins 混入 的介绍和使用 一 什么是Mixins 二 何时使用Mixins 三 如何创建Mixins 四 如何使用Mixins 五 Mixins的特点 5 1 方法和参数在各组件中不共享 5 2 Mixins 合并冲突 5
  • 龙书笔记(1)

    1 下载 DirectX 9 0 和 DirectX 9 0 SDK 前者的安装很简单 后者要记住安装的目录 SDK Documentation 有chm的查阅工具 SDK Samples C 有非常多的东西可以学习 SDK Lib x86
  • matlab生成one-hot向量

    对于单标签数据 其 label 可能是用一个整数表示 想转化成 one hot label 注意原 class IDs 可能是 0 base 的 要 1 转成 1 base Code N CLASS 10 labels 1 3 2 5 0
  • 图形验证码输入框限制英文加数字

    当输入法处于中文输入法时 可以一直无限输入 只是将中文转成英文 且设置的长度maxlength不生效 暂时解决方案 使用substring 将字符串截取前四位 使得handleInputVerify方法使用受限 仅适用于该输入框
  • 用Java发送邮件 带有图片和附件

    package com baidu email import com sun mail util MailSSLSocketFactory import javax activation DataHandler import javax a