How can I set the SMTP message-id while sending mails with javax.mail
. My mail server is reporting something like this:
1 <= me@domain.com H=mail (host) [192.168.1.4] P=esmtp S=142014
id=2043289758.9.1322829290422.JavaMail.thor@developer.local
2 => sombodey@else R=dnslookup T=remote_smtp H=mx00.t-online.de [194.25.134.8]
3 Completed
I want to set the id=2043289758.9.1322829290422.JavaMail.thor@developer.local
before sending it. Is this possible? The email it created like this:
Properties props = System.getProperties();
props.put("mail.smtp.host", "192.168.1.4");
Session session = Session.getDefaultInstance(props, null);
session.setDebug(false);
Message msg = createMsg();
Transport.send(msg);
According to Oracle's FAQ, when you send the message or call saveChanges, the Message-Id header set by the updateMessageID() method, which overrides any value you might have already set.
To set your own value, you will need to create a sub-class of MimeMessage and implement your own updateMessageID() function:
I was able to use this technique to suppress or eliminate the Message-Id header like this:
This was useful for Mailgun, which sets the Message-Id themselves if you don't set one.
this is the complete code for implementing the custom id in the message
You can also save message changes and set a custom Message-ID before sending. Steps:
MimeMessage message
and Set its data.message.saveChanges();
message.setHeader("Message-ID", yourCustomMessageId);
This is useful with Spring's
JavaMailSender
or in other situations where it is difficult to overrideMimeMessage
.I believe this section of the JavaMail FAQ answers your question: