使用带有Java-Mail的byte 发送电子邮件附件

我有一个字节数组,我希望添加为我发送的电子邮件的附件。

不幸的是我无法找到如何将其作为字节数组附加,我已经使用磁盘文件的解决方案(我不想要,因为我不想写字节数组,所以我可以附加它)。

我找到了一个解决方案,涉及创建一个扩展DataSource的对象,并将其用作字节数组的包装器,然后将其提供给MimeBodyPart。

谁知道更好的解决方案?

创建DataSource是正确的方法。 但是,您不必自己编写。 只需使用JavaMail中的ByteArrayDataSource

以下是您的要求的代码…将附件文件存储为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());