手机图片发邮件成html格式,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值