Add ability to use custom MimeMessage implementation (e.g. to override the default Message-ID generation strategy) by afarra · Pull Request #77 · bbottema/simple-java-mail
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());
}
};
}
};