Javamail BCC未设置为可编辑的邮件

时间:2018-03-23 16:19:24

标签: java email javamail outlook-2016

我想发送电子邮件并在.eml文件中提取内容。我不明白为什么以下代码不起作用(至少,不是我想要的):

public String getEML() {
        final Properties properties = new Properties();
        properties.setProperty("mail.transport.protocol", "smtp");
        final Session session = Session.getInstance(properties);

        final MimeMessage message = new MimeMessage(session);
        final MimeMultipart mimeMultipart = new MimeMultipart("related");
        try {
            mimeMultipart.addBodyPart(getHtml());
            for(MimeBodyPart bodyPart : getImgs()) {
                mimeMultipart.addBodyPart(bodyPart);
            }

            //I don't want to send my mail in my code. I would like to extract an eml before.
            message.addHeader("X-Unsent", "1");
            message.setContent(mimeMultipart);
            message.setSubject("the subject");
            message.setRecipient(RecipientType.TO, new InternetAddress("yyy@yyy.com"));
            message.setRecipient(RecipientType.BCC, new InternetAddress("xxx@xxx.com"));
        } catch (final MessagingException e) {
            e.printStackTrace();
        }

        // This function return the content of the mail in a String
        return messageMimeToString(message);
}

生成的.eml对应于我想要的。但是,当我在Outlook 2016中导入此文件时,未设置BCC(Cci)。 但是,.eml的第一行是:

  

密送:xxx@xxx.com

有人可以向我解释这种行为吗?

修改 为了更加精确,当我用RecipientType.TO或RecipientType.CC替换RecipientType.BCC时,它可以工作。

1 个答案:

答案 0 :(得分:0)

您还需要设置to。根据{{​​3}},如果没有to,则不会有RCPT命令,this answer表示如果未发送RCPT,服务器可能会返回错误。

编辑:我不是SMTP专家,但RFC 5321(附录B)说BCC地址不应出现在电子邮件标题中:

  

然后应该从标题部分删除任何BCC标题字段。