【问题标题】:apache commons smtp change/remove Message-Id headerapache commons smtp 更改/删除 Message-Id 标头
【发布时间】:2013-03-19 03:31:30
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    Email 类有一个 Factory 方法来创建一个自定义的 MimeMessage,它可以由派生类实现,例如设置消息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");
                                            }
                                        };
                            }
                        };
    

    【讨论】:

      【解决方案2】:

      可能的问题是“电子邮件”在底层MimeMessage 上调用saveChanges() 以提交标头,该方法调用updateHeaders() 方法,该方法又调用updateMessageID(),该方法将插入一个Message-ID 标头。

      您为什么不尝试仅使用 java.mail API 发送电子邮件,您可以控制 MimeMessage ?代码竟然是already available

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        • 2019-09-17
        • 2011-07-09
        • 1970-01-01
        • 2016-05-23
        相关资源
        最近更新 更多