Java apache commons smtp更改/删除邮件Id标头
我正在使用apache commons smtp库使用我的gmail帐户发送电子邮件。一切正常,但消息Id标头已发送,我希望将其删除(而不是发送)。挖掘网络我在oracle文档中发现了一些东西: 然而,我不知道如何在ApacheCommons中实现这一点 这是我的密码:Java apache commons smtp更改/删除邮件Id标头,java,smtp,apache-commons,apache-commons-net,Java,Smtp,Apache Commons,Apache Commons Net,我正在使用apache commons smtp库使用我的gmail帐户发送电子邮件。一切正常,但消息Id标头已发送,我希望将其删除(而不是发送)。挖掘网络我在oracle文档中发现了一些东西: 然而,我不知道如何在ApacheCommons中实现这一点 这是我的密码: Email email = new SimpleEmail(); email.setHostName("smtp.googlemail.com"); email.setSmtpPort(465); email.setAuthen
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
)可能的问题是“Email”调用底层MimeMessage
来提交头,这将调用updateHeaders()
方法,该方法依次调用updateMessageID()
,后者将插入消息ID头
为什么不尝试只使用java.mailapi发送电子邮件,因为您可以控制mimessage?代码甚至是Email类有一个工厂方法来创建定制的mimessage,它可以由派生类实现,例如设置消息id 您可以扩展此方法以设置消息id。下一个代码将创建一个带有自定义消息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");
}
};
}
};
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");
}
};
}
};