Skip to content

Commit 1f2bb46

Browse files
committed
#93, #95: parse back the flags from MimeMessages (and also added tests and fixed the EqualsHelper)
1 parent 7e30d23 commit 1f2bb46

File tree

4 files changed

+45
-4
lines changed

4 files changed

+45
-4
lines changed

Diff for: src/main/java/org/simplejavamail/converter/EmailConverter.java

+21-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.simplejavamail.converter.internal.mimemessage.MimeMessageParser;
55
import org.simplejavamail.converter.internal.msgparser.OutlookMessageParser;
66
import org.simplejavamail.email.Email;
7+
import org.simplejavamail.email.Recipient;
78
import org.simplejavamail.internal.util.MiscUtil;
89
import org.simplejavamail.outlookmessageparser.model.OutlookFileAttachment;
910
import org.simplejavamail.outlookmessageparser.model.OutlookMessage;
@@ -14,6 +15,7 @@
1415
import javax.mail.Message;
1516
import javax.mail.MessagingException;
1617
import javax.mail.Session;
18+
import javax.mail.internet.AddressException;
1719
import javax.mail.internet.InternetAddress;
1820
import javax.mail.internet.MimeMessage;
1921
import java.io.ByteArrayInputStream;
@@ -240,7 +242,9 @@ private static void fillEmailFromMimeMessage(@Nonnull final Email email, @Nonnul
240242
final InternetAddress replyTo = parser.getReplyTo();
241243
email.setReplyToAddress(replyTo.getPersonal(), replyTo.getAddress());
242244
for (final Map.Entry<String, Object> header : parser.getHeaders().entrySet()) {
243-
email.addHeader(header.getKey(), header.getValue());
245+
if (!fillPredefinedHeader(email, header)) {
246+
email.addHeader(header.getKey(), header.getValue());
247+
}
244248
}
245249
for (final InternetAddress to : parser.getTo()) {
246250
email.addRecipient(to.getPersonal(), to.getAddress(), Message.RecipientType.TO);
@@ -263,7 +267,22 @@ private static void fillEmailFromMimeMessage(@Nonnull final Email email, @Nonnul
263267
email.addAttachment(extractCID(attachment.getKey()), attachment.getValue());
264268
}
265269
}
266-
270+
271+
private static boolean fillPredefinedHeader(@Nonnull Email email, @Nonnull Map.Entry<String, Object> header) throws AddressException {
272+
if (header.getKey().equals("Disposition-Notification-To")) {
273+
email.setUseDispositionNotificationTo(true);
274+
InternetAddress internetAddress = new InternetAddress((String) header.getValue());
275+
email.setDispositionNotificationTo(new Recipient(internetAddress.getPersonal(), internetAddress.getAddress(), null));
276+
return true;
277+
} else if (header.getKey().equals("Return-Receipt-To")) {
278+
email.setUseReturnReceiptTo(true);
279+
InternetAddress internetAddress = new InternetAddress((String) header.getValue());
280+
email.setReturnReceiptTo(new Recipient(internetAddress.getPersonal(), internetAddress.getAddress(), null));
281+
return true;
282+
}
283+
return false;
284+
}
285+
267286
private static void fillEmailFromOutlookMessage(@Nonnull final Email email, @Nonnull final OutlookMessage outlookMessage) {
268287
checkNonEmptyArgument(email, "email");
269288
checkNonEmptyArgument(outlookMessage, "outlookMessage");

Diff for: src/main/java/org/simplejavamail/email/EqualsHelper.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,22 @@ public static boolean equalsEmail(final Email email1, final Email email2) {
3939
if (!email1.getAttachments().containsAll(email2.getAttachments())) {
4040
return false;
4141
}
42-
return email1.getHeaders().equals(email2.getHeaders());
42+
if (!email1.getHeaders().equals(email2.getHeaders())) {
43+
return false;
44+
}
45+
if (email1.isUseDispositionNotificationTo() != email2.isUseDispositionNotificationTo()) {
46+
return false;
47+
}
48+
if (email1.isUseReturnReceiptTo() != email2.isUseReturnReceiptTo()) {
49+
return false;
50+
}
51+
if (email1.getDispositionNotificationTo() != null ? !email1.getDispositionNotificationTo().equals(email2.getDispositionNotificationTo()) : email2.getDispositionNotificationTo() != null) {
52+
return false;
53+
}
54+
if (email1.getReturnReceiptTo() != null ? !email1.getReturnReceiptTo().equals(email2.getReturnReceiptTo()) : email2.getReturnReceiptTo() != null) {
55+
return false;
56+
}
57+
return true;
4358
}
4459

4560
private static boolean isEqualRecipientList(final List<Recipient> recipients, final List<Recipient> otherRecipients) {

Diff for: src/test/java/org/simplejavamail/mailer/MailerLiveTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void setup() {
4141
ConfigLoader.loadProperties(new Properties(), false); // clear out defaults
4242
mailer = new Mailer(SERVER_CONFIG);
4343
}
44-
44+
4545
@Test
4646
public void createMailSession_StandardDummyMail()
4747
throws IOException, MessagingException {

Diff for: src/test/java/testutil/EmailHelper.java

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package testutil;
22

33
import org.simplejavamail.email.Email;
4+
import org.simplejavamail.email.Recipient;
45

56
import javax.annotation.Nullable;
67
import javax.mail.util.ByteArrayDataSource;
@@ -32,6 +33,12 @@ public static Email createDummyEmail(@Nullable String id)
3233
emailNormal.setTextHTML("<b>We should meet up!</b><img src='cid:thumbsup'>");
3334
emailNormal.setSubject("hey");
3435

36+
emailNormal.addHeader("dummyHeader", "dummyHeaderValue");
37+
emailNormal.setUseDispositionNotificationTo(true);
38+
emailNormal.setDispositionNotificationTo(new Recipient(null, "[email protected]", null));
39+
emailNormal.setUseReturnReceiptTo(true);
40+
emailNormal.setReturnReceiptTo(new Recipient("Complex Email", "[email protected]", null));
41+
3542
// add two text files in different ways and a black thumbs up embedded image ->
3643
ByteArrayDataSource namedAttachment = new ByteArrayDataSource("Black Tie Optional", "text/plain");
3744
namedAttachment.setName("dresscode.txt"); // normally not needed, but otherwise the equals will fail

0 commit comments

Comments
 (0)