Skip to content

Conversation

@afarra
Copy link

@afarra afarra commented May 18, 2017

Problem:
By default, JavaMail generates a Message-ID that contains the machine's name. This is done in MimeMessage.updateMessageID(). I would like to be able to set my own Message-ID.

Normally, you would override this method. According to the javadoc for MimeMessage.updateMessageID():

Update the Message-ID header. [...] allows a subclass to override only the algorithm for choosing a Message-ID.

There is no way to do this however through Simple Java Mail, as the construction of the MimeMessage and the saving of it is done in Mailer and cannot be overridden.

One solution Apache Commons Mail provides for this, is it has a factory method for the creation of the MimeMessage which you can override. I really love the fluent API Simple Java Mail provides; the only issue preventing me using it instead of Apache Commons Mail is the ability to set a different Message-ID generation strategy

Solution:
Add a method to org.simplejavamail.email.Email:

public MimeMessage createMimeMessage(final Session session) {
    return new MimeMessage(session);
}

Use this method in MimeMessageHelper:L67:

- final MimeMessage message = new MimeMessage(session);
+ final MimeMessage message = email.createMimeMessage(session);

This way, users of the library can use their own custom implementations of MimeMessage:

Email htmlEmail = new Email() {
    @Override
    public MimeMessage createMimeMessage(Session session) {
        return new MimeMessage(session) {
            @Override
            protected void updateMessageID() throws MessagingException {
                setHeader("Message-ID", myMessageIdGenerationStrategy());
            }
        };
    }
};

…e the default Message-ID generation strategy)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants