apache commons smtp更改/删除Message-Id标头

时间:2013-03-28 15:43:28

标签: java smtp apache-commons apache-commons-net

我正在使用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

2 个答案:

答案 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");
                                        }
                                    };
                        }
                    };