An issue with the JBoss ON server not including setFrom() in the MimeMessage from messages sent through the custom Java mail server caused emails not to be delivered. The only way to workaround the issue was to relax the SMTP policy in the custom mail server in cases when email comes from the JBoss ON server. The fix now sets the From address correctly using setFrom() before the message is sent through the custom Java mail server. Emails can now be correctly sent.
Description of problem:
An email sent from JBoss ON using custom java mail server is not delivered because setFrom() is not set in JON MimeMessage
Version-Release number of selected component (if applicable):
JBoss ON 3.2.x
How reproducible:
Always
Steps to Reproduce:
1. When JBoss ON sends an email, From address is not set [1] and it should be according to the javadoc of javax.mail package [2].
2. Custom SMTP server, will not deliver email where From address is not set.
3.
Actual results:
When custom SMTP server is used, emails from JON server will not be delivered.
Expected results:
Emails from JON server are properly delivered when custom SMTP server is used.
Additional info:
[1]
**************************************************************************
public Collection<String> sendEmail(Collection<String> toAddresses, String messageSubject, String messageBody) {
MimeMessage mimeMessage = new MimeMessage(mailSession);
try {
mimeMessage.setSubject(messageSubject);
mimeMessage.setContent(messageBody, "text/plain");
} catch (MessagingException e) {
e.printStackTrace(); // TODO: Customise this generated block
return toAddresses;
}
Exception error = null;
Collection<String> badAdresses = new ArrayList<String>(toAddresses.size());
// Send to each recipient individually, do not throw exceptions until we try them all
for (String toAddress : toAddresses) {
try {
LOG.debug("Sending email [" + messageSubject + "] to recipient [" + toAddress + "]");
InternetAddress recipient = new InternetAddress(toAddress);
Transport.send(mimeMessage, new InternetAddress[] { recipient });
} catch (Exception e) {
LOG.error("Failed to send email [" + messageSubject + "] to recipient [" + toAddress + "]: "
+ e.getMessage());
badAdresses.add(toAddress);
// Remember the first error - in case its due to a session initialization problem,
// we don't want to lose the first error.
if (error == null) {
error = e;
}
}
}
if (error != null) {
LOG.error("Sending of emails failed for this reason: " + error.getMessage());
}
return badAdresses;
}
**************************************************************************
[2] http://docs.oracle.com/javaee/6/api/javax/mail/package-summary.html
Description of problem: An email sent from JBoss ON using custom java mail server is not delivered because setFrom() is not set in JON MimeMessage Version-Release number of selected component (if applicable): JBoss ON 3.2.x How reproducible: Always Steps to Reproduce: 1. When JBoss ON sends an email, From address is not set [1] and it should be according to the javadoc of javax.mail package [2]. 2. Custom SMTP server, will not deliver email where From address is not set. 3. Actual results: When custom SMTP server is used, emails from JON server will not be delivered. Expected results: Emails from JON server are properly delivered when custom SMTP server is used. Additional info: [1] ************************************************************************** public Collection<String> sendEmail(Collection<String> toAddresses, String messageSubject, String messageBody) { MimeMessage mimeMessage = new MimeMessage(mailSession); try { mimeMessage.setSubject(messageSubject); mimeMessage.setContent(messageBody, "text/plain"); } catch (MessagingException e) { e.printStackTrace(); // TODO: Customise this generated block return toAddresses; } Exception error = null; Collection<String> badAdresses = new ArrayList<String>(toAddresses.size()); // Send to each recipient individually, do not throw exceptions until we try them all for (String toAddress : toAddresses) { try { LOG.debug("Sending email [" + messageSubject + "] to recipient [" + toAddress + "]"); InternetAddress recipient = new InternetAddress(toAddress); Transport.send(mimeMessage, new InternetAddress[] { recipient }); } catch (Exception e) { LOG.error("Failed to send email [" + messageSubject + "] to recipient [" + toAddress + "]: " + e.getMessage()); badAdresses.add(toAddress); // Remember the first error - in case its due to a session initialization problem, // we don't want to lose the first error. if (error == null) { error = e; } } } if (error != null) { LOG.error("Sending of emails failed for this reason: " + error.getMessage()); } return badAdresses; } ************************************************************************** [2] http://docs.oracle.com/javaee/6/api/javax/mail/package-summary.html