Skip to content

Commit 191a2d3

Browse files
committed
JavaMailSenderImpl calls sendMessage with empty array instead of null
Issue: SPR-17540 (cherry picked from commit 16e9b83)
1 parent a46a437 commit 191a2d3

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2015 the original author or authors.
2+
* Copyright 2002-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@
2424
import java.util.Map;
2525
import java.util.Properties;
2626
import javax.activation.FileTypeMap;
27+
import javax.mail.Address;
2728
import javax.mail.AuthenticationFailedException;
2829
import javax.mail.MessagingException;
2930
import javax.mail.NoSuchProviderException;
@@ -390,7 +391,7 @@ public void testConnection() throws MessagingException {
390391

391392
/**
392393
* Actually send the given array of MimeMessages via JavaMail.
393-
* @param mimeMessages MimeMessage objects to send
394+
* @param mimeMessages the MimeMessage objects to send
394395
* @param originalMessages corresponding original message objects
395396
* that the MimeMessages have been created from (with same array
396397
* length and indices as the "mimeMessages" array), if any
@@ -445,7 +446,8 @@ protected void doSend(MimeMessage[] mimeMessages, Object[] originalMessages) thr
445446
// Preserve explicitly specified message id...
446447
mimeMessage.setHeader(HEADER_MESSAGE_ID, messageId);
447448
}
448-
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
449+
Address[] addresses = mimeMessage.getAllRecipients();
450+
transport.sendMessage(mimeMessage, (addresses != null ? addresses : new Address[0]));
449451
}
450452
catch (Exception ex) {
451453
Object original = (originalMessages != null ? originalMessages[i] : mimeMessage);

spring-context-support/src/test/java/org/springframework/mail/javamail/JavaMailSenderTests.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2015 the original author or authors.
2+
* Copyright 2002-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -56,6 +56,7 @@ public class JavaMailSenderTests {
5656
@Rule
5757
public final ExpectedException thrown = ExpectedException.none();
5858

59+
5960
@Test
6061
public void javaMailSenderWithSimpleMessage() throws MessagingException, IOException {
6162
MockJavaMailSender sender = new MockJavaMailSender();
@@ -105,7 +106,8 @@ public void javaMailSenderWithSimpleMessage() throws MessagingException, IOExcep
105106
assertEquals("my text", sentMessage.getContent());
106107
}
107108

108-
public void testJavaMailSenderWithSimpleMessages() throws MessagingException, IOException {
109+
@Test
110+
public void javaMailSenderWithSimpleMessages() throws MessagingException {
109111
MockJavaMailSender sender = new MockJavaMailSender();
110112
sender.setHost("host");
111113
sender.setUsername("username");
@@ -133,7 +135,8 @@ public void testJavaMailSenderWithSimpleMessages() throws MessagingException, IO
133135
assertEquals("[email protected]", ((InternetAddress) tos2.get(0)).getAddress());
134136
}
135137

136-
public void testJavaMailSenderWithMimeMessage() throws MessagingException {
138+
@Test
139+
public void javaMailSenderWithMimeMessage() throws MessagingException {
137140
MockJavaMailSender sender = new MockJavaMailSender();
138141
sender.setHost("host");
139142
sender.setUsername("username");
@@ -180,7 +183,7 @@ public void javaMailSenderWithMimeMessagePreparator() {
180183
sender.setUsername("username");
181184
sender.setPassword("password");
182185

183-
final List<Message> messages = new ArrayList<Message>();
186+
final List<Message> messages = new ArrayList<>();
184187

185188
MimeMessagePreparator preparator = new MimeMessagePreparator() {
186189
@Override
@@ -206,7 +209,7 @@ public void javaMailSenderWithMimeMessagePreparators() {
206209
sender.setUsername("username");
207210
sender.setPassword("password");
208211

209-
final List<Message> messages = new ArrayList<Message>();
212+
final List<Message> messages = new ArrayList<>();
210213

211214
MimeMessagePreparator preparator1 = new MimeMessagePreparator() {
212215
@Override
@@ -394,7 +397,7 @@ protected Transport getTransport(Session sess) throws NoSuchProviderException {
394397
}
395398

396399
@Test
397-
public void failedMailServerConnect() throws Exception {
400+
public void failedMailServerConnect() {
398401
MockJavaMailSender sender = new MockJavaMailSender();
399402
sender.setHost(null);
400403
sender.setUsername("username");
@@ -415,7 +418,7 @@ public void failedMailServerConnect() throws Exception {
415418
}
416419

417420
@Test
418-
public void failedMailServerClose() throws Exception {
421+
public void failedMailServerClose() {
419422
MockJavaMailSender sender = new MockJavaMailSender();
420423
sender.setHost("");
421424
sender.setUsername("username");
@@ -434,7 +437,7 @@ public void failedMailServerClose() throws Exception {
434437
}
435438

436439
@Test
437-
public void failedSimpleMessage() throws Exception {
440+
public void failedSimpleMessage() throws MessagingException {
438441
MockJavaMailSender sender = new MockJavaMailSender();
439442
sender.setHost("host");
440443
sender.setUsername("username");
@@ -466,7 +469,7 @@ public void failedSimpleMessage() throws Exception {
466469
}
467470

468471
@Test
469-
public void fFailedMimeMessage() throws Exception {
472+
public void failedMimeMessage() throws MessagingException {
470473
MockJavaMailSender sender = new MockJavaMailSender();
471474
sender.setHost("host");
472475
sender.setUsername("username");
@@ -498,14 +501,14 @@ public void fFailedMimeMessage() throws Exception {
498501
}
499502

500503
@Test
501-
public void testConnection() throws Exception {
504+
public void testConnection() throws MessagingException {
502505
MockJavaMailSender sender = new MockJavaMailSender();
503506
sender.setHost("host");
504507
sender.testConnection();
505508
}
506509

507510
@Test
508-
public void testConnectionWithFailure() throws Exception {
511+
public void testConnectionWithFailure() throws MessagingException {
509512
MockJavaMailSender sender = new MockJavaMailSender();
510513
sender.setHost(null);
511514

@@ -533,7 +536,7 @@ private static class MockTransport extends Transport {
533536
private String connectedUsername = null;
534537
private String connectedPassword = null;
535538
private boolean closeCalled = false;
536-
private List<Message> sentMessages = new ArrayList<Message>();
539+
private List<Message> sentMessages = new ArrayList<>();
537540

538541
private MockTransport(Session session, URLName urlName) {
539542
super(session, urlName);
@@ -592,7 +595,8 @@ public void sendMessage(Message message, Address[] addresses) throws MessagingEx
592595
if ("fail".equals(message.getSubject())) {
593596
throw new MessagingException("failed");
594597
}
595-
if (!ObjectUtils.nullSafeEquals(addresses, message.getAllRecipients())) {
598+
if (addresses == null || (message.getAllRecipients() == null ? addresses.length > 0 :
599+
!ObjectUtils.nullSafeEquals(addresses, message.getAllRecipients()))) {
596600
throw new MessagingException("addresses not correct");
597601
}
598602
if (message.getSentDate() == null) {

0 commit comments

Comments
 (0)