Java Mail writeTo和回读会产生非法分号错误

时间:2014-12-15 15:12:02

标签: java email

我正在使用java来获取邮件消息并将该消息持久保存到文件中。当我再次阅读文件时,我收到了一个javax.mail.internet.AddressException

以下是我用来编写消息的代码

Properties mailProps = System.getProperties();
mailProps.setProperty("mail.store.protocol", "imaps");
Session session = null;
Folder inbox = null;
Store store = null;
Message[] messages = null;

try {
    session = Session.getDefaultInstance(mailProps, null);
    store = session.getStore("imaps");

    store.connect(config.getMailHost(), config.getMailUserId(), config.getMailPasswd());

    inbox = store.getFolder("inbox");
    inbox.open(Folder.READ_WRITE); // Folder.READ_ONLY
    logger.info("Total Messages found on Host: <{}>", inbox.getMessageCount());
    logger.info("Total Unread Messages on Host: <{}>", inbox.getUnreadMessageCount());

    messages = inbox.getMessages();

    for (Message currMessage : messages) {

        File mailFile = buildMailFileName();
        currMessage.writeTo(new FileOutputStream(mailFile));
    }
}

我可以看到文件已创建并包含以下行:

  

收件人:Name@domain.com;

当我再次阅读文件时,我收到以下错误:

javax.mail.internet.AddressException:非法分号,不在字符串'Name @ domain 中的组中。

以下是我用来读取文件的代码:

Session session = Session.getDefaultInstance(mailProps, null);
FileInputStream fis = new FileInputStream(mailFile);
MimeMessage mime = new MimeMessage(null, fis);
Address[] addresses = mime.getRecipients(Message.RecipientType.TO);

2 个答案:

答案 0 :(得分:4)

不允许使用分号作为电子邮件地址的分隔符,而是使用逗号!

答案 1 :(得分:2)

用于解析电子邮件地址的InternetAddress类使用逗号而不是分号 因此,当您使用semicolon写入文件更改comma时,您将Name@domain.com,代替Name@domain.com;