在数据库表中,我有3个字节的数组字段,其中包含sqlType longblob(jpg,png,gif)。如何使用javaMail作为附件实现发送这些文件的逻辑?我只对使用这些文件而不是其他邮件逻辑的附件感兴趣。我理解如何从文件发送附件,但如何从数据库中发送?
...
byte [] picture1
byte [] picture2
byte [] picture3
...
static mapping = {
picture1 column:"picture1", sqlType: "longblob"
picture2 column:"picture2", sqlType: "longblob"
picture3 column:"picture3", sqlType: "longblob"
}
...
编辑:我试图将图像文件传递给我的sendMail方法。具体来说,我把它传递给了ByteArrayDataSource。什么时候有办法让这个工作为多种格式,或者我需要做一些“黑客”?我想我可以在数据库中创建额外的字段,我将保存文件扩展名,当我想从数据库中检索图像以便在附件中发送它时,我会将它传递给我的sendMail方法,并附带扩展名。在sendMail方法中,我将使用switch语句来确定ByteArrayDataSource的contentType。但我想知道是否有更优雅的方式。这是我的代码:
MimeBodyPart messagePart = new MimeBodyPart();
messagePart.setText(msgText);
MimeBodyPart attachmentPart = new MimeBodyPart();
ByteArrayDataSource attPic1 = new ByteArrayDataSource(p1, "image/jpeg");
attachmentPart.setDataHandler(new DataHandler(attPic1));
attachmentPart.setFileName(attPic1.getName());
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messagePart);
multipart.addBodyPart(attachmentPart);
...
答案 0 :(得分:2)
您应该从数据库中读取一个字节数组数据(图片),然后使用http://javamail.kenai.com/nonav/javadocs/javax/mail/util/ByteArrayDataSource.html使用您的字节数组和设置mime类型为附件创建数据源。