diff --git a/angular-app b/angular-app index 980d1f815..7e80429e7 160000 --- a/angular-app +++ b/angular-app @@ -1 +1 @@ -Subproject commit 980d1f815b291a36a8474d34726512f326ce6135 +Subproject commit 7e80429e7557ad826ced0e9aeee78c24b70de73b diff --git a/modules/outlook-module/src/main/java/org/simplejavamail/internal/outlooksupport/converter/OutlookEmailConverter.java b/modules/outlook-module/src/main/java/org/simplejavamail/internal/outlooksupport/converter/OutlookEmailConverter.java index b27c88275..0d3daecb3 100644 --- a/modules/outlook-module/src/main/java/org/simplejavamail/internal/outlooksupport/converter/OutlookEmailConverter.java +++ b/modules/outlook-module/src/main/java/org/simplejavamail/internal/outlooksupport/converter/OutlookEmailConverter.java @@ -2,6 +2,7 @@ import org.simplejavamail.api.email.EmailPopulatingBuilder; import org.simplejavamail.api.email.EmailStartingBuilder; +import org.simplejavamail.api.email.Recipient; import org.simplejavamail.api.internal.outlooksupport.model.EmailFromOutlookMessage; import org.simplejavamail.internal.modules.OutlookModule; import org.simplejavamail.internal.outlooksupport.internal.model.OutlookMessageProxy; @@ -15,6 +16,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.Map; +import java.util.Objects; import static org.simplejavamail.internal.util.MiscUtil.extractCID; import static org.simplejavamail.internal.util.Preconditions.assumeNonNull; @@ -75,9 +77,6 @@ private static EmailFromOutlookMessage buildEmailFromOutlookMessage( } private static void copyReceiversFromOutlookMessage(@NotNull EmailPopulatingBuilder builder, @NotNull OutlookMessage outlookMessage) { - for (final OutlookRecipient to : outlookMessage.getRecipients()) { - builder.to(to.getName(), to.getAddress()); - } //noinspection QuestionableName for (final OutlookRecipient cc : outlookMessage.getCcRecipients()) { builder.cc(cc.getName(), cc.getAddress()); @@ -85,6 +84,17 @@ private static void copyReceiversFromOutlookMessage(@NotNull EmailPopulatingBuil for (final OutlookRecipient bcc : outlookMessage.getBccRecipients()) { builder.bcc(bcc.getName(), bcc.getAddress()); } + // only add remaining recipients... + outerloop: + for (final OutlookRecipient to : outlookMessage.getRecipients()) { + for (final Recipient recipient : builder.getRecipients()) { + if (Objects.equals(recipient.getName(), to.getName()) && + Objects.equals(recipient.getAddress(), to.getAddress())) { + continue outerloop; + } + } + builder.to(to.getName(), to.getAddress()); + } } @NotNull diff --git a/modules/simple-java-mail/src/main/java/org/simplejavamail/converter/EmailConverter.java b/modules/simple-java-mail/src/main/java/org/simplejavamail/converter/EmailConverter.java index f1520588c..2f54e7af7 100644 --- a/modules/simple-java-mail/src/main/java/org/simplejavamail/converter/EmailConverter.java +++ b/modules/simple-java-mail/src/main/java/org/simplejavamail/converter/EmailConverter.java @@ -107,24 +107,24 @@ public static EmailPopulatingBuilder mimeMessageToEmailBuilder(@NotNull final Mi /** * Delegates to {@link #outlookMsgToEmail(String, Pkcs12Config)}. * - * @param msgFile The content of an Outlook (.msg) message from which to create the {@link Email}. + * @param msgData The content of an Outlook (.msg) message from which to create the {@link Email}. */ @SuppressWarnings("unused") @NotNull - public static Email outlookMsgToEmail(@NotNull final String msgFile) { - return outlookMsgToEmail(msgFile, null); + public static Email outlookMsgToEmail(@NotNull final String msgData) { + return outlookMsgToEmail(msgData, null); } /** - * @param msgFile The content of an Outlook (.msg) message from which to create the {@link Email}. + * @param msgData The content of an Outlook (.msg) message from which to create the {@link Email}. * @param pkcs12Config Private key store for decrypting S/MIME encrypted attachments * (only needed when the message is encrypted rather than just signed). */ @SuppressWarnings("deprecation") @NotNull - public static Email outlookMsgToEmail(@NotNull final String msgFile, @Nullable final Pkcs12Config pkcs12Config) { - checkNonEmptyArgument(msgFile, "msgFile"); - EmailFromOutlookMessage result = ModuleLoader.loadOutlookModule().outlookMsgToEmailBuilder(msgFile, new EmailStartingBuilderImpl()); + public static Email outlookMsgToEmail(@NotNull final String msgData, @Nullable final Pkcs12Config pkcs12Config) { + checkNonEmptyArgument(msgData, "msgFile"); + EmailFromOutlookMessage result = ModuleLoader.loadOutlookModule().outlookMsgToEmailBuilder(msgData, new EmailStartingBuilderImpl()); return decryptAttachments(result.getEmailBuilder(), result.getOutlookMessage(), pkcs12Config) .buildEmail(); } @@ -372,9 +372,9 @@ public static MimeMessage outlookMsgToMimeMessage(@NotNull final String msgFile) * @return Result of {@link #outlookMsgToEmail(String, Pkcs12Config)} and {@link #emailToMimeMessage(Email)}. */ @NotNull - public static MimeMessage outlookMsgToMimeMessage(@NotNull final String msgFile, @Nullable final Pkcs12Config pkcs12Config) { - checkNonEmptyArgument(msgFile, "outlookMsgData"); - return emailToMimeMessage(outlookMsgToEmail(msgFile, pkcs12Config)); + public static MimeMessage outlookMsgToMimeMessage(@NotNull final String msgData, @Nullable final Pkcs12Config pkcs12Config) { + checkNonEmptyArgument(msgData, "outlookMsgData"); + return emailToMimeMessage(outlookMsgToEmail(msgData, pkcs12Config)); } /** @@ -535,9 +535,9 @@ public static String outlookMsgToEML(@NotNull final String msgFile) { * @return Result of {@link #outlookMsgToEmail(String, Pkcs12Config)} and {@link #emailToEML(Email)} */ @NotNull - public static String outlookMsgToEML(@NotNull final String msgFile, @Nullable final Pkcs12Config pkcs12Config) { - checkNonEmptyArgument(msgFile, "outlookMsgData"); - return emailToEML(outlookMsgToEmail(msgFile, pkcs12Config)); + public static String outlookMsgToEML(@NotNull final String msgData, @Nullable final Pkcs12Config pkcs12Config) { + checkNonEmptyArgument(msgData, "outlookMsgData"); + return emailToEML(outlookMsgToEmail(msgData, pkcs12Config)); } /** diff --git a/modules/simple-java-mail/src/test/java/org/simplejavamail/converter/EmailConverterTest.java b/modules/simple-java-mail/src/test/java/org/simplejavamail/converter/EmailConverterTest.java new file mode 100644 index 000000000..e18b13cc8 --- /dev/null +++ b/modules/simple-java-mail/src/test/java/org/simplejavamail/converter/EmailConverterTest.java @@ -0,0 +1,36 @@ +package org.simplejavamail.converter; + +import org.jetbrains.annotations.NotNull; +import org.junit.Test; +import org.simplejavamail.api.email.Email; +import org.simplejavamail.api.email.EmailAssert; +import org.simplejavamail.api.email.Recipient; + +import java.io.File; + +import static demo.ResourceFolderHelper.determineResourceFolder; +import static javax.mail.Message.RecipientType.CC; +import static javax.mail.Message.RecipientType.TO; +import static org.assertj.core.api.Assertions.assertThat; +import static org.simplejavamail.internal.util.MiscUtil.normalizeNewlines; + +public class EmailConverterTest { + + private static final String RESOURCE_FOLDER = determineResourceFolder("simple-java-mail") + "/test/resources/test-messages"; + + @Test + public void testOutlookBasicConversions() { + final Recipient elias = new Recipient("Elias Laugher", "elias.laugher@gmail.com", null); + final Recipient sven = new Recipient("Sven Sielenkemper", "sielenkemper@otris.de", TO); + final Recipient niklas = new Recipient("niklas.lindson@gmail.com", "niklas.lindson@gmail.com", CC); + + @NotNull Email msg = EmailConverter.outlookMsgToEmail(new File(RESOURCE_FOLDER + "/simple email with TO and CC.msg")); + EmailAssert.assertThat(msg).hasFromRecipient(elias); + EmailAssert.assertThat(msg).hasSubject("Test E-Mail"); + EmailAssert.assertThat(msg).hasOnlyRecipients(sven, niklas); + EmailAssert.assertThat(msg).hasNoAttachments(); + assertThat(msg.getPlainText()).isNotEmpty(); + assertThat(normalizeNewlines(msg.getHTMLText())).isEqualTo("
Just a test to get an email with one cc recipient.
\n"); + assertThat(normalizeNewlines(msg.getPlainText())).isEqualTo("Just a test to get an email with one cc recipient.\n"); + } +} \ No newline at end of file diff --git a/modules/simple-java-mail/src/test/resources/test-messages/simple email with TO and CC.msg b/modules/simple-java-mail/src/test/resources/test-messages/simple email with TO and CC.msg new file mode 100644 index 000000000..f374a1b91 Binary files /dev/null and b/modules/simple-java-mail/src/test/resources/test-messages/simple email with TO and CC.msg differ