Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to use custom MimeMessage implementation (e.g. to override the default Message-ID generation strategy) #77

Closed
wants to merge 1 commit into from

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