我想发送电子邮件并在.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时,它可以工作。
答案 0 :(得分:0)
您还需要设置to
。根据{{3}},如果没有to
,则不会有RCPT命令,this answer表示如果未发送RCPT,服务器可能会返回错误。
编辑:我不是SMTP专家,但RFC 5321(附录B)说BCC地址不应出现在电子邮件标题中:
然后应该从标题部分删除任何BCC标题字段。