java 发送邮件添加附件_java邮件自动发送时添加网络附件

查了很多资料都是使用本地资源作为附件发送。但是数据和程序分开时,还需要先下载数据,保存到本地再发送邮件。查了很多资料后,发现apach提供了很好的一个commons-mail.jar包,做了很好的封装,简单易用。下载地址是http://commons.apache.org/proper/commons-email/download_email.cgi

public void sendHtmlEmailWithImg() throws Exception {

String htmlEmailContent = "这是一张用于测试的图片,请查收。

1.png%5C%22 "

+ "

commons-logo.png%5C%22";

ImageHtmlEmail email = new ImageHtmlEmail();//用ImageHtmlEmail来发送

email.setDebug(true);//可以看到执行过程的debug信息

email.setCharset("UTF-8");//防止乱码

email.setSSLCheckServerIdentity(true);

email.setSslSmtpPort("465"); // 设定SSL端口

//解析本地图片和网络图片都有的html文件重点就是下面这两行;

//ImageHtmlEmail通过setDataSourceResolver来识别并嵌入图片

//查看DataSourceResolver的继承结构发现有几个好用的子类

DataSourceResolver[] dataSourceResolvers =

new DataSourceResolver[]{new DataSourceFileResolver(),//添加DataSourceFileResolver用于解析本地图片

new DataSourceUrlResolver(new URL("http://"))};//添加DataSourceUrlResolver用于解析网络图片,注意:new URL("http://")

//DataSourceCompositeResolver类可以加入多个DataSourceResolver,

//把需要的DataSourceResolver放到一个数组里传进去就可以了;

email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers));

// 邮箱登陆信息

email.setHostName("smtp.qq.com");

email.addTo("*@qq.com", "Jo");

email.setFrom("*@qq.com", "Me"); // 必须和登陆邮箱名一致,否则会报错

email.setAuthenticator(new DefaultAuthenticator("*@qq.com", "********")); // 邮箱名和登陆密码

email.setSubject("发送一张图片,看看是否可以收到。");

email.setHtmlMsg(htmlEmailContent);

//如果客户端不去持HTML格式会显示这句话,不过应该很少有不支持HTML格式的客户端了吧

email.setTextMsg("你的邮箱客户端不支持HTML格式邮件");

email.send();

}

如果使用QQ邮箱做测试需要注意,QQ邮箱对图片显示不太友好,需要点击显示图片才能显示。

ImageHtmlEmail也可以直接添加网络资源作为附件

/**

* 为邮件添加附件

* @param email 邮件

* @param urls 附件链接

* @param names 附件名称,最好有后缀名才能预览文件

*/

public void addAttachment(ImageHtmlEmailemail, Listurls, Listnames) {

// 保证附件名的长度和链接一一对应

while(urls.size() > names.size()) {

names.add("");

}

for(int i = 0; i < urls.size(); i++) {

EmailAttachment attachment = new EmailAttachment();

try {

attachment.setURL(new URL(urls.get(i)));

attachment.setDisposition(EmailAttachment.ATTACHMENT);

//attachment.setDescription("Apache logo");

attachment.setName(names.get(i));

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

email.attach(attachment); // 将附件添加到邮件中

} catch (EmailException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel 取消Internet及网络路径自动替换为超链接

Excel 取消Internet及网络路径自动替换为超链接&#xff1a; 1.文件 》选项 》校对 点击自动更正选项 2. 自动更正 配置修改 点击“键入时自动套用格式”tab页&#xff0c;取消勾选 internet及网络路径替换为超链接 转载于:https://www.cnblogs.com/byronliu029/p/9408468.htm…

那些喝吐的酒~

酒逢知己千杯少我喝不了酒&#xff0c;但是高兴的时候也能喝两杯。入职腾讯&#xff0c;参加了两次部门聚会&#xff0c;都离不开喝酒&#xff0c;吃饭喝酒这事&#xff0c;大家都很开心&#xff0c;那种眼前朦胧&#xff0c;胆子很肥的感觉特别好。领导们也很给面子&#xff0…

实时内核(Core)和实时操作系统(RTOS)有何不同?

大家都知道什么是实时操作系统&#xff0c;但是&#xff0c;大家熟知的实时操作系统&#xff0c;站在更广的角度来看&#xff0c;其实它就是一个实时内核。一、实时内核和实时操作系统一个实时内核是管理微处理器&#xff08;MPU&#xff09;、微控制器&#xff08;MCU&#xf…

linux java远程调试_idea远程linux代码调试

如果线上代码出现问题&#xff0c;如何用本地idea排查问题查找问题&#xff1f;第一步&#xff1a;保证本地代码与线上代码一致&#xff1b;第二步&#xff1a;在线上tomcat文件中/tomcat/bin/catalina.sh文件中添加如下配置找到下面一行信息#----- Execute The Requested Comm…

[文档]. Xilinx - 编写有效的Testbenches

This application note is written for logic designers who are new to HDL verification flows, and who do not have extensive testbench-writing experience. 下载

mysql inner join where_详解mysql 使用left join添加where条件的问题分析

当前需求&#xff1a;有group和factor两张表&#xff0c;一个group对应多个factor&#xff0c;现在想查询有效的group和对应的有效的factor&#xff0c;两个表都有isDel逻辑删除标志。最开始的错误写法一&#xff1a;SELECT g.*,f.* FROM groups g LEFT JOIN factor f ON f.gro…

误打误撞的模板字符串

前情回顾&#xff1a;之所以用到模板字符串呢&#xff0c;是在这样一个场景中用到一个类似微信发朋友圈时选择图片时的一个场景&#xff0c;如图所示 当时脑抽是怎么想的呢&#xff0c;其实也很简单&#xff0c;当时想的就是新建div嘛&#xff0c;然后append到父容器就ok啦&…

java类型转换方法_Java中基本数据类型转换的方法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼一、自动类型转换(隐式类型转换)整型、实型(常量)、字符型数据可以混合运算。运算中&#xff0c;不同类型的数据先转化为同一类型&#xff0c;然后进行运算。转换从低级到高级。自动转换有以下规律&#xff1a;小的类型自动转化为大…

你知道GNU C 对C语言的扩展吗?

为了方便使用&#xff0c;GNU C在标准C语言的基础上进行了部分方便开发的扩展。这里讲解一些开发中可能会用到的&#xff0c;或者使用频率比较高的内容。零长度数组和变量长度数组GNU C 允许使用零长度数组&#xff0c;比如&#xff1a;char data[0];GNU C 允许使用一个变量定义…

java 反射 内存_Java内存到反射入门

Java内存到反射入门(一)初识Java内存平常我们最常提到的的JAVA分区是这三个分区其中方法区是一个特殊的堆&#xff0c;功能如图上所示。初识反射&#xff1a;框架设计的灵魂反射的功能&#xff1a;将类的各个组成部分封装为对象&#xff0c;并在程序运行的过程中可以调用它们。…

stopping hbasecat: /tmp/hbase-elastic-master.pid: 没有那个文件或目录

stop-hbase.sh 挂了。。。 原因其实也简单&#xff0c;默认情况下hbase的pid文件保存在/tmp目录下&#xff0c;/tmp目录下的文件很容易丢失&#xff0c;不知道为什么他不会自动创建一个非临时目录&#xff0c;大概是因为权限不好控制&#xff0c;需要手动来&#xff1f; 修改为…

服务容错模式

0.背景 随着服务框架和服务治理体系的逐步成熟&#xff0c;服务化已成为系统设计的趋势。随着业务复杂度的增加&#xff0c;依赖的服务也逐步增加&#xff0c;出现了不少由于服务调用出现异常问题而导致的重大事故&#xff0c;如&#xff1a; 1&#xff09;系统依赖的某个服务发…

从大学到结婚,我和小云的这13年

看了龙哥的文章&#xff0c;感触很深&#xff0c;我有好几次想写一篇我和小云的文章&#xff0c;记录下自己和小云这些年一起经历的很多事情&#xff0c;但是每每都停下来去做了觉得更重要的其他事情&#xff0c;这次真的决定要写了。我和小云是大学同学&#xff0c;我们大一认…

xshell如何运行java_利用Xshell往应用服务器上部署项目

1.首先查询中间件的进程Idps -ef|grep ./startapusic2.然后杀掉进程kill -9 16833.再次查询进程&#xff0c;查看是否关闭成功&#xff0c;如果没有/bin目录下的东西了说明关闭成功4.利用ls查看当前路径下的文件5.启动中间件./startapusic6.如果显示地址已在使用&#xff0c;则…

详解Linux内核在arm上的启动过程

Linux内核加载过程通常&#xff0c;Linux内核都是经过gzip加载过之后的映像文件。bootloader复制压缩内核到内存空间。内核自解压。运行内核。编译完成的Linux内核存放在哪里&#xff1f;./vmlinux elf格式未压缩内核。arch/arm/boot/compressed/vmlinux 压缩以后的elf格…

java 数据库 properties_原生Java读取properties连接数据库

将数据库的驱动、url、用户名、密码等信息以键值对的形式存放在properties文件中&#xff0c;工具类初始化时从配置文件中读取所要连接数据库的信息。当需要更改连接的数据库时&#xff0c;只需要更改配置文件即可&#xff0c;而不必改写工具类的代码。1.在项目中创建一个prope…

【谱聚类算法总结】

前言&#xff1a;以前只是调用过谱聚类算法&#xff0c;我也不懂为什么各家公司都问我一做文字检测的这个算法具体咋整的&#xff0c;没整明白还给我挂了哇擦嘞&#xff1f;讯飞还以这个理由刷本宝&#xff0c;今天一怒把它给整吧清楚了&#xff0c;下次谁再问来&#xff01;说…

嵌入式的汉字原来是这样显示的?

摘要&#xff1a;LCD是嵌入式常见设备&#xff0c;如何在LCD上显示汉字和英文&#xff1f;矢量字体和点阵字体有何不同&#xff1f;同一个字符为何有多种编码&#xff1f;GB2312、GB18030指什么&#xff1f;他们之间有关系吗&#xff1f;嵌入式设备如何支持多国语言&#xff1f…

查看数据库、表、索引的物理存储情况

在管理、维护数据库时&#xff0c;经常需要查看数据库文件、日志文件所占用的磁盘空间&#xff0c;以及磁盘还剩下的磁盘空间&#xff0c;你可以通过下面几种方面查看数据库文件详细情况&#xff1a;1&#xff1a; 是通过远程连接(或VPN)连接到数据库服务器&#xff0c;直接去查…

Spring简化Java开发_spring如何简化java开发

1、spring简介Spring的主要目的是用来替代更加重量级的企业级的java技术2、spring如何简化java开发1)基于POJO的轻量级和最小侵入性编程&#xff1b;2)通过依赖注入和面向接口实现松耦合&#xff1b;3)基于切面和惯例进行声明式编程&#xff1b;4)通过切面和模板减少样版式代码…