Java Mail发送带有图片的html格式的邮件
Java Mail发送带有图片的html格式的邮件,针对于显示图片,一般有两种方法。
1. 图片存在于服务器上,我们只需要把图片在服务器的的链接放进去即可。
这种发式比较简单,但是这种方法有些缺陷:
图片不支持离线浏览;
每次浏览邮件需要访问web服务,增加服务器负担;
若图片以二进制的方式存在于数据库或是动态生成的,则无法有效的解决。
2. 把图片以附件的方式发送出去,这种方式非常适用于图片存在于数据库中的情况。
本文也主要讨论这种情况。
对于Java Mail的基础知识,请看http://www.yesky.com/SoftChannel/72348977504190464/20020713/1620276.shtml,
本文不作介绍了。
说到邮件中的附件,我不得不说一说MiniMultipart类,提供了在邮件中加入附加的实现方法。
一个多部分邮件是一个内容类型(content-type)被设置为MiniMultipart的Message对象。
MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象。
我们可以用一个MimeBodyPart包含html源代码,其他的MimeBodyPart包含二进制的图片附件。
但是这里有个意外情况,我们先看MimeBodyPart的初始化代码:
MimeBodyPart mdp = new MimeBodyPart(); //新建一个存放附件的BodyPart
DataHandler dh = new DataHandler(...);
mdp.setDataHandler(dh); //给BodyPart对象设置内容为dh
其中当DataHandler初始化时需要DataSource的子类
/** from JDK Doc */
public DataHandler(DataSource ds)
Create a DataHandler instance referencing the specified DataSource.
The data exists in a byte stream form. The DataSource will provide an InputStream to access the data.
Parameters:ds - the DataSource
在JDK1.4中,DataSource是个Interface,DataSource仅有MimePartDataSource, URLDataSource, FileDataSource三个子类,
而在这三个类中没有一个能直接用二进制流(byte[])创建实例。当然我们可以把内存中的二进制流写到文件中,再让FileDataSource读进来。
但是这样会给服务器带来而外的硬盘读写,若操作频繁,会造成服务器性能下降。幸运的是我再网上发现了这么一个类,可以直接用二进制流直接创建实例。
import java.io.*;
import javax.activation.*;
public class ByteArrayDataSource implements DataSource
{
/*** Data to write. */
private byte[] _data;
/*** Content-Type. */
private String _type;
/* Create a datasource from an
相关文档:
Java学习从入门到精通
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
今天我在听张孝祥老师讲的Java加强视频,张老师说:Java基础加强知识代表了一种java功力,也代表了你的学习能力,能掌握这些知识说明你以前的学习能力不错,具备这些知识,也说明你未来掌握新知识的潜能不错。我觉得张老师说的有道理,我的Java基础不是很好,因此,我要好好学学张老师讲的基础加强视频。
首先张老 ......
今天我学习了反射与多线程的知识
反射:Class cls1=Date.class//字节码1;
Class cls2=Person.class//字节码2;
P1.getClass();//得到字节码
Class.forName(“java.lang.String”) //得到这个类的字节码
后台线程与联合线程
l & ......
把之前项目中写的一个Java通用验证码程序整理了一下,与大家分享,希望能抛砖引玉。
一、主要功能:
1、支持纯数字、大写字母、小写字母,及两两混合或三者混合类型验证码;
2、支持自定义特殊字符排除(如0oOi1jI);
3、支持图片及文字两种类型验证码;
4、支持自定义验证码图片大小;
5、支持自定义干扰线条数;
......