From 191a2d3f2555c58a82bbe14ea7d1ec627a7a3e38 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 3 Dec 2018 19:49:21 +0100 Subject: [PATCH] JavaMailSenderImpl calls sendMessage with empty array instead of null Issue: SPR-17540 (cherry picked from commit 16e9b83d4358fd55e075a6ad0bdc0cdd97bedc81) --- .../mail/javamail/JavaMailSenderImpl.java | 8 +++-- .../mail/javamail/JavaMailSenderTests.java | 30 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java index 7d642be001..a01e62ada1 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; import javax.activation.FileTypeMap; +import javax.mail.Address; import javax.mail.AuthenticationFailedException; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; @@ -390,7 +391,7 @@ public class JavaMailSenderImpl implements JavaMailSender { /** * Actually send the given array of MimeMessages via JavaMail. - * @param mimeMessages MimeMessage objects to send + * @param mimeMessages the MimeMessage objects to send * @param originalMessages corresponding original message objects * that the MimeMessages have been created from (with same array * length and indices as the "mimeMessages" array), if any @@ -445,7 +446,8 @@ public class JavaMailSenderImpl implements JavaMailSender { // Preserve explicitly specified message id... mimeMessage.setHeader(HEADER_MESSAGE_ID, messageId); } - transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); + Address[] addresses = mimeMessage.getAllRecipients(); + transport.sendMessage(mimeMessage, (addresses != null ? addresses : new Address[0])); } catch (Exception ex) { Object original = (originalMessages != null ? originalMessages[i] : mimeMessage); diff --git a/spring-context-support/src/test/java/org/springframework/mail/javamail/JavaMailSenderTests.java b/spring-context-support/src/test/java/org/springframework/mail/javamail/JavaMailSenderTests.java index 4c0d2a5da0..6f9b77db0e 100644 --- a/spring-context-support/src/test/java/org/springframework/mail/javamail/JavaMailSenderTests.java +++ b/spring-context-support/src/test/java/org/springframework/mail/javamail/JavaMailSenderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,6 +56,7 @@ public class JavaMailSenderTests { @Rule public final ExpectedException thrown = ExpectedException.none(); + @Test public void javaMailSenderWithSimpleMessage() throws MessagingException, IOException { MockJavaMailSender sender = new MockJavaMailSender(); @@ -105,7 +106,8 @@ public class JavaMailSenderTests { assertEquals("my text", sentMessage.getContent()); } - public void testJavaMailSenderWithSimpleMessages() throws MessagingException, IOException { + @Test + public void javaMailSenderWithSimpleMessages() throws MessagingException { MockJavaMailSender sender = new MockJavaMailSender(); sender.setHost("host"); sender.setUsername("username"); @@ -133,7 +135,8 @@ public class JavaMailSenderTests { assertEquals("she@mail.org", ((InternetAddress) tos2.get(0)).getAddress()); } - public void testJavaMailSenderWithMimeMessage() throws MessagingException { + @Test + public void javaMailSenderWithMimeMessage() throws MessagingException { MockJavaMailSender sender = new MockJavaMailSender(); sender.setHost("host"); sender.setUsername("username"); @@ -180,7 +183,7 @@ public class JavaMailSenderTests { sender.setUsername("username"); sender.setPassword("password"); - final List messages = new ArrayList(); + final List messages = new ArrayList<>(); MimeMessagePreparator preparator = new MimeMessagePreparator() { @Override @@ -206,7 +209,7 @@ public class JavaMailSenderTests { sender.setUsername("username"); sender.setPassword("password"); - final List messages = new ArrayList(); + final List messages = new ArrayList<>(); MimeMessagePreparator preparator1 = new MimeMessagePreparator() { @Override @@ -394,7 +397,7 @@ public class JavaMailSenderTests { } @Test - public void failedMailServerConnect() throws Exception { + public void failedMailServerConnect() { MockJavaMailSender sender = new MockJavaMailSender(); sender.setHost(null); sender.setUsername("username"); @@ -415,7 +418,7 @@ public class JavaMailSenderTests { } @Test - public void failedMailServerClose() throws Exception { + public void failedMailServerClose() { MockJavaMailSender sender = new MockJavaMailSender(); sender.setHost(""); sender.setUsername("username"); @@ -434,7 +437,7 @@ public class JavaMailSenderTests { } @Test - public void failedSimpleMessage() throws Exception { + public void failedSimpleMessage() throws MessagingException { MockJavaMailSender sender = new MockJavaMailSender(); sender.setHost("host"); sender.setUsername("username"); @@ -466,7 +469,7 @@ public class JavaMailSenderTests { } @Test - public void fFailedMimeMessage() throws Exception { + public void failedMimeMessage() throws MessagingException { MockJavaMailSender sender = new MockJavaMailSender(); sender.setHost("host"); sender.setUsername("username"); @@ -498,14 +501,14 @@ public class JavaMailSenderTests { } @Test - public void testConnection() throws Exception { + public void testConnection() throws MessagingException { MockJavaMailSender sender = new MockJavaMailSender(); sender.setHost("host"); sender.testConnection(); } @Test - public void testConnectionWithFailure() throws Exception { + public void testConnectionWithFailure() throws MessagingException { MockJavaMailSender sender = new MockJavaMailSender(); sender.setHost(null); @@ -533,7 +536,7 @@ public class JavaMailSenderTests { private String connectedUsername = null; private String connectedPassword = null; private boolean closeCalled = false; - private List sentMessages = new ArrayList(); + private List sentMessages = new ArrayList<>(); private MockTransport(Session session, URLName urlName) { super(session, urlName); @@ -592,7 +595,8 @@ public class JavaMailSenderTests { if ("fail".equals(message.getSubject())) { throw new MessagingException("failed"); } - if (!ObjectUtils.nullSafeEquals(addresses, message.getAllRecipients())) { + if (addresses == null || (message.getAllRecipients() == null ? addresses.length > 0 : + !ObjectUtils.nullSafeEquals(addresses, message.getAllRecipients()))) { throw new MessagingException("addresses not correct"); } if (message.getSentDate() == null) { -- GitLab