我正在使用apache commons smtp库使用我的Gmail帐户发送电子邮件。一切正常,但Message-Id标头已发送,我正在寻找删除它(未发送)。挖掘网络我在oracle文档中找到了一些东西:http://www.oracle.com/technetwork/java/faq-135477.html#msgid
class MyMessage extends MimeMessage {
...
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", "my-message-id");
}
...
}
但是我不知道如何在apache commons中实现它。
这是我的代码:
Email email = new SimpleEmail();
email.setHostName("smtp.googlemail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator("username", "password"));
email.setSSLOnConnect(true);
email.setFrom("user@gmail.com");
email.setSubject("TestMail");
email.setMsg("This is a test mail ... :-)");
email.addTo("foo@bar.com");
email.send();
基本上我需要像email.setMimeMessage(...)
这样的东西,但是没有这样的方法,只有email.getMimeMessage()
更新 - 解决方案
public class MyEmail extends SimpleEmail{
protected MimeMessage createMimeMessage(Session aSession)
{
return new MyMessage(aSession);
}
}
您只需覆盖createMimeMessage
方法,并确保它返回您自己的MimeMessage
实现(在本例中为MyMessage
)
答案 0 :(得分:2)
可能的问题是,“电子邮件”会在基础MimeMessage
上调用saveChanges()
来提交标头,这会调用updateHeaders()
方法,而updateMessageID()
方法会调用{{1}}将插入一个Message-ID标头。
为什么不尝试仅使用java.mail API发送电子邮件,您可以控制MimeMessage?代码甚至是already available
答案 1 :(得分:2)
电子邮件类具有Factory方法来创建自定义MimeMessage,该MimeMessage可以由派生类实现,例如,设置消息ID。
您可以扩展此方法以设置消息ID。下一个代码创建一个带有自定义message-id的htmlEmail消息。
HtmlEmail email = new HtmlEmail()
{
protected MimeMessage createMimeMessage(Session aSession)
{
return new MimeMessage(aSession)
{
protected void updateHeaders () throws MessagingException
{
super.updateHeaders ();
super.setHeader ("Message-ID", "my-message-id");
}
};
}
};