Skip to content

Commit

Permalink
#93, #95: parse back the flags from MimeMessages (and also added test…
Browse files Browse the repository at this point in the history
…s and fixed the EqualsHelper)
  • Loading branch information
bbottema committed Aug 15, 2017
1 parent 7e30d23 commit 1f2bb46
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 4 deletions.
23 changes: 21 additions & 2 deletions src/main/java/org/simplejavamail/converter/EmailConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.simplejavamail.converter.internal.mimemessage.MimeMessageParser;
import org.simplejavamail.converter.internal.msgparser.OutlookMessageParser;
import org.simplejavamail.email.Email;
import org.simplejavamail.email.Recipient;
import org.simplejavamail.internal.util.MiscUtil;
import org.simplejavamail.outlookmessageparser.model.OutlookFileAttachment;
import org.simplejavamail.outlookmessageparser.model.OutlookMessage;
Expand All @@ -14,6 +15,7 @@
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.ByteArrayInputStream;
Expand Down Expand Up @@ -240,7 +242,9 @@ private static void fillEmailFromMimeMessage(@Nonnull final Email email, @Nonnul
final InternetAddress replyTo = parser.getReplyTo();
email.setReplyToAddress(replyTo.getPersonal(), replyTo.getAddress());
for (final Map.Entry<String, Object> header : parser.getHeaders().entrySet()) {
email.addHeader(header.getKey(), header.getValue());
if (!fillPredefinedHeader(email, header)) {
email.addHeader(header.getKey(), header.getValue());
}
}
for (final InternetAddress to : parser.getTo()) {
email.addRecipient(to.getPersonal(), to.getAddress(), Message.RecipientType.TO);
Expand All @@ -263,7 +267,22 @@ private static void fillEmailFromMimeMessage(@Nonnull final Email email, @Nonnul
email.addAttachment(extractCID(attachment.getKey()), attachment.getValue());
}
}


private static boolean fillPredefinedHeader(@Nonnull Email email, @Nonnull Map.Entry<String, Object> header) throws AddressException {
if (header.getKey().equals("Disposition-Notification-To")) {
email.setUseDispositionNotificationTo(true);
InternetAddress internetAddress = new InternetAddress((String) header.getValue());
email.setDispositionNotificationTo(new Recipient(internetAddress.getPersonal(), internetAddress.getAddress(), null));
return true;
} else if (header.getKey().equals("Return-Receipt-To")) {
email.setUseReturnReceiptTo(true);
InternetAddress internetAddress = new InternetAddress((String) header.getValue());
email.setReturnReceiptTo(new Recipient(internetAddress.getPersonal(), internetAddress.getAddress(), null));
return true;
}
return false;
}

private static void fillEmailFromOutlookMessage(@Nonnull final Email email, @Nonnull final OutlookMessage outlookMessage) {
checkNonEmptyArgument(email, "email");
checkNonEmptyArgument(outlookMessage, "outlookMessage");
Expand Down
17 changes: 16 additions & 1 deletion src/main/java/org/simplejavamail/email/EqualsHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,22 @@ public static boolean equalsEmail(final Email email1, final Email email2) {
if (!email1.getAttachments().containsAll(email2.getAttachments())) {
return false;
}
return email1.getHeaders().equals(email2.getHeaders());
if (!email1.getHeaders().equals(email2.getHeaders())) {
return false;
}
if (email1.isUseDispositionNotificationTo() != email2.isUseDispositionNotificationTo()) {
return false;
}
if (email1.isUseReturnReceiptTo() != email2.isUseReturnReceiptTo()) {
return false;
}
if (email1.getDispositionNotificationTo() != null ? !email1.getDispositionNotificationTo().equals(email2.getDispositionNotificationTo()) : email2.getDispositionNotificationTo() != null) {
return false;
}
if (email1.getReturnReceiptTo() != null ? !email1.getReturnReceiptTo().equals(email2.getReturnReceiptTo()) : email2.getReturnReceiptTo() != null) {
return false;
}
return true;
}

private static boolean isEqualRecipientList(final List<Recipient> recipients, final List<Recipient> otherRecipients) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public void setup() {
ConfigLoader.loadProperties(new Properties(), false); // clear out defaults
mailer = new Mailer(SERVER_CONFIG);
}

@Test
public void createMailSession_StandardDummyMail()
throws IOException, MessagingException {
Expand Down
7 changes: 7 additions & 0 deletions src/test/java/testutil/EmailHelper.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package testutil;

import org.simplejavamail.email.Email;
import org.simplejavamail.email.Recipient;

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

emailNormal.addHeader("dummyHeader", "dummyHeaderValue");
emailNormal.setUseDispositionNotificationTo(true);
emailNormal.setDispositionNotificationTo(new Recipient(null, "simple@address.com", null));
emailNormal.setUseReturnReceiptTo(true);
emailNormal.setReturnReceiptTo(new Recipient("Complex Email", "simple@address.com", null));

// add two text files in different ways and a black thumbs up embedded image ->
ByteArrayDataSource namedAttachment = new ByteArrayDataSource("Black Tie Optional", "text/plain");
namedAttachment.setName("dresscode.txt"); // normally not needed, but otherwise the equals will fail
Expand Down

0 comments on commit 1f2bb46

Please sign in to comment.