如何使用javax将byte[]转换为消息.邮件库



现在我有电子邮件存储在数据库中,我需要能够检索它们和下载附件,如果他们有。目前,我在将字节[]转换为MailMessage或MimeMessage的方法上遇到了困难。我相信我已经得到了字节[]到mime部分,但我不确定我将如何解析它并拉出附件。

final byte[] mailMessageString = resultSet.getBytes(mailMessageIndex);
File file = new File("C:\Users\khurt\Downloads\op.txt");
List<File> attachments = new ArrayList<File>();
@SuppressWarnings("deprecation")
String mimeType = file.toURL().openConnection().getContentType();
MimeBodyPart att = new MimeBodyPart(); 
ByteArrayDataSource efe = new ByteArrayDataSource(mailMessageString, mimeType); 
DataHandler dh = new DataHandler(efe);
att.setDataHandler(dh);
att.setFileName(bds.getName());
Multipart multipart = (Multipart) att.getContent();
multipart.addBodyPart(att);
for (int i = 0; i < multipart.getCount(); i++) 
{
    BodyPart bodyPart = multipart.getBodyPart(i);
    if(!Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition())
        && !StringUtils.isNotBlank(bodyPart.getFileName())) 
    {
        InputStream is = bodyPart.getInputStream();
        File f = new File("C:\Users\khurt\Downloads\"
            + bodyPart.getFileName());
        FileOutputStream fos = new FileOutputStream(f);
        byte[] buf = new byte[4096];
        int bytesRead;
        while ((bytesRead = is.read(buf)) != -1) 
        {
            fos.write(buf, 0, bytesRead);
        }
        fos.close();
        attachments.add(f);
    }
    else
    {
        System.out.println("there is nata");
    }
}   

当它到达for循环时没有实际的错误,但我还没有解析电子邮件以获得任何文件。是否有可能通过MimeBodyPart进行解析?

作为参考,电子邮件将有关于它的数据,然后电子邮件附件以空行开始,然后:(电子邮件inst java, Stack Overflow不会让我在没有格式化的情况下发布它,虽然。还有一些邮件没有包含附件信息的标题。

--_002_2733D716DEFD0D49BF462DE618263C07019302260BCVGEXCEMAIL01_
Content-Type: image/gif; name="image001.gif"
Content-Description: image001.gif
Content-Disposition: inline; filename="image001.gif"; size=1669;
    creation-date="Tue, 14 Jun 2011 14:42:12 GMT";
    modification-date="Tue, 14 Jun 2011 14:42:12 GMT"
Content-ID: <image001.gif@01CC2204.E828E6F0>
Content-Transfer-Encoding: base64
R0lGODlhiwA9ANUAAAAzZv/4+lvKwABVBzlstgY+q/wCBNebwwNN/l7H+ZsrHB0NuPkc/Z4kBm
jLEQFW+MqZ+yxQ8/b8wAANLb5NV/gu/y9eWwsl9/nzBZg8ZQU6+/z+/P0MFARPrv79BvcuCfobYg
JICZs+/39/Xf4NDZ47/M2ZGnvXCNqWGBoNaAgt6UlNBwcxFBcM7e5gAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAACLAD0AAAb/wIBw
SCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNtnoMcFBlTq9c4O189s2oaDoDgYKD
hIIPHR8XHnqMSgYMHx0PhYIhHZeYl5SDGiSNjRwMBQiElgUqIHhPcCoak4Ign2sGFYCCHacGHF0X
tg+esmS0tiEaKgbAYwWBDMFgJAyuxQwGi2kekyrOXBcfliqKjIAG21ceIAUFDLvBkuVV5+vvASEF
8/dVHAPJ+P1OBSz8CWxC4oG1gQiPnErIsEjBgw0ZAiQIp2K1iHpIDAg4hMOjWh1IbRKEoIMdjGhA
BDo0csChTJlErryAsoxKQ7hUULvYxEOv/0D8aoLxyM4cqRCphAr0oCLEoA6xlOLjU2ASAqkCOUzC
KjBECK6y3oAcRCoq2DbnNLjswELFsUcsNJxFWwEBiwtB5zK6wKLoPRMKMCgQkMBCAoYkIM5rcODA
AiELMgAQoZdRgxYAShQhQLlyngMAUhixECFABAcOFEhwIEBIAgwOBCsg0GCIhRYOhIhIDcEBAQUQ
WnhWYgIAgNJJjAvBAACF7slCTJgYEgHzYQEWAhTPHaBzCgDDi4gwPj05+AACAHAf37lICwWhiWwn

使用接受InputStream的MimeMessage构造函数。然后以正常方式访问消息中的附件。示例代码请参见msgshow.java示例程序。

最新更新