我有一个字节数组,我希望将其添加为我发送的电子邮件的附件。
不幸的是我无法找到如何将其作为字节数组附加,我已经使用磁盘文件的解决方案(我不想要,因为我不想写字节数组,所以我可以附加它)。
我找到了一个解决方案,涉及创建一个扩展DataSource的对象,并将其用作字节数组的包装器,然后将其提供给MimeBodyPart。
任何人都知道更好的解决方案吗?
答案 0 :(得分:17)
创建DataSource
是正确的方法。但是,您不必自己编写。只需使用JavaMail中的ByteArrayDataSource
。
答案 1 :(得分:1)
以下是您的要求的代码...将附件文件存储为DB中的BLOB并获取将其作为邮件中的附件发送...............
import java.io.*;
import java.util.*;
import javax.activation.*;
public class BufferedDataSource implements DataSource {
private byte[] _data;
private java.lang.String _name;
public BufferedDataSource(byte[] data, String name) {
_data = data;
_name = name;
}
public String getContentType() { return "application/octet-stream";}
public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(_data);}
public String getName() { return _name;}
/**
* Returns an OutputStream from the DataSource
* @returns OutputStream Array of bytes converted into an OutputStream
*/
public OutputStream getOutputStream() throws IOException {
OutputStream out = new ByteArrayOutputStream();
out.write(_data);
return out;
}
}
===========================================================
//Getting ByteArray From BLOB
byte[] bytearray;
BLOB blob = ((OracleResultSet) rs).getBLOB("IMAGE_GIF");
if (blob != null) {
BufferedInputStream bis = new BufferedInputStream(blob.getBinaryStream());
ByteArrayOutputStream bao = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int length = 0;
while ((length = bis.read(buffer)) != -1) {
bao.write(buffer, 0, length);
}
bao.close();
bis.close();
bytearray = bao.toByteArray();
}
===============================================================
//Attach File for mail
MimeBodyPart att = new MimeBodyPart();
BufferedDataSource bds = new BufferedDataSource(bytearray, "AttName");
att.setDataHandler(new DataHandler(bds));
att.setFileName(bds.getName());