Skip to content

Commit 1f11cd7

Browse files
committed
#493: last minute tweak to actually solve the problem
1 parent 0e3720e commit 1f11cd7

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

modules/core-module/src/main/java/org/simplejavamail/internal/modules/SMIMEModule.java

+5
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,9 @@ public interface SMIMEModule {
8181
* {@link org.simplejavamail.api.email.EmailPopulatingBuilder#fixingMessageId(String)}.
8282
*/
8383
boolean isMessageIdFixingMessage(MimeMessage message);
84+
85+
/**
86+
* @return Whether the given attachment is S/MIME signed / encrypted. Defers to {@code SmimeRecognitionUtil.isGeneratedSmimeMessageId(..)}.
87+
*/
88+
<T> boolean isGeneratedSmimeMessageId(String key, T headerValue);
8489
}

modules/simple-java-mail/src/main/java/org/simplejavamail/email/internal/EmailPopulatingBuilderImpl.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@
7878
import static org.simplejavamail.email.internal.EmailException.ERROR_READING_SMIME_FROM_INPUTSTREAM;
7979
import static org.simplejavamail.email.internal.EmailException.ERROR_RESOLVING_IMAGE_DATASOURCE;
8080
import static org.simplejavamail.email.internal.EmailException.NAME_MISSING_FOR_EMBEDDED_IMAGE;
81-
import static org.simplejavamail.internal.smimesupport.SmimeRecognitionUtil.isGeneratedSmimeMessageId;
8281
import static org.simplejavamail.internal.util.MiscUtil.defaultTo;
8382
import static org.simplejavamail.internal.util.MiscUtil.extractEmailAddresses;
8483
import static org.simplejavamail.internal.util.MiscUtil.interpretRecipient;
@@ -1711,7 +1710,9 @@ public <T> EmailPopulatingBuilder withHeaders(@NotNull final Map<String, Collect
17111710
public <T> InternalEmailPopulatingBuilder withHeaders(@NotNull final Map<String, Collection<T>> headers, final boolean ignoreSmimeMessageId) {
17121711
for (Map.Entry<String, Collection<T>> headerEntry : headers.entrySet()) {
17131712
for (final T headerValue : headerEntry.getValue()) {
1714-
if (!ignoreSmimeMessageId || !ModuleLoader.smimeModuleAvailable() || !isGeneratedSmimeMessageId(headerEntry.getKey(), headerValue)) {
1713+
if (!ignoreSmimeMessageId ||
1714+
!ModuleLoader.smimeModuleAvailable() ||
1715+
!ModuleLoader.loadSmimeModule().isGeneratedSmimeMessageId(headerEntry.getKey(), headerValue)) {
17151716
withHeader(headerEntry.getKey(), headerValue);
17161717
}
17171718
}

modules/smime-module/src/main/java/org/simplejavamail/internal/smimesupport/SMIMESupport.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@
6565
import static java.lang.String.format;
6666
import static java.util.Arrays.asList;
6767
import static org.simplejavamail.internal.smimesupport.SmimeException.*;
68-
import static org.simplejavamail.internal.smimesupport.SmimeRecognitionUtil.SMIME_ATTACHMENT_MESSAGE_ID;
69-
import static org.simplejavamail.internal.smimesupport.SmimeRecognitionUtil.isSmimeContentType;
7068

7169

7270
/**
@@ -127,7 +125,7 @@ private void initSmimeMetadata(final SmimeParseResultBuilder smimeBuilder, @NotN
127125
try {
128126
if (mimeMessage.getHeader("Content-Type", null) != null) {
129127
ContentType ct = new ContentType(mimeMessage.getHeader("Content-Type", null));
130-
if (isSmimeContentType(ct)) {
128+
if (SmimeRecognitionUtil.isSmimeContentType(ct)) {
131129
smimeBuilder.getOriginalSmimeDetails()
132130
.completeWith(OriginalSmimeDetailsImpl.builder()
133131
.smimeMime(ct.getBaseType())
@@ -320,7 +318,7 @@ private AttachmentResource handleLiberatedContent(final Object content)
320318
final MimeMessage decryptedMessage = new MimeMessage((Session) null) {
321319
@Override
322320
protected void updateMessageID() throws MessagingException {
323-
setHeader("Message-ID", SMIME_ATTACHMENT_MESSAGE_ID);
321+
setHeader("Message-ID", SmimeRecognitionUtil.SMIME_ATTACHMENT_MESSAGE_ID);
324322
}
325323
};
326324
decryptedMessage.setContent((Multipart) content);
@@ -481,4 +479,9 @@ private SmimeKey produceSmimeKey(final @NotNull Pkcs12Config pkcs12) {
481479
return new SmimeKeyStore(new ByteArrayInputStream(pkcs12.getPkcs12StoreData()), pkcs12.getStorePassword())
482480
.getPrivateKey(pkcs12.getKeyAlias(), pkcs12.getKeyPassword());
483481
}
482+
483+
@Override
484+
public <T> boolean isGeneratedSmimeMessageId(String key, T headerValue) {
485+
return SmimeRecognitionUtil.isGeneratedSmimeMessageId(key, headerValue);
486+
}
484487
}

modules/smime-module/src/main/java/org/simplejavamail/internal/smimesupport/SmimeRecognitionUtil.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public final class SmimeRecognitionUtil {
2020
/**
2121
* Used internally to recognize when we should ignore message ID header when starting a new email as a copy.
2222
*/
23-
public static final String SMIME_ATTACHMENT_MESSAGE_ID = "<generated-for-smime-signed-attachment@simple-java-mail>";
23+
static final String SMIME_ATTACHMENT_MESSAGE_ID = "<generated-for-smime-signed-attachment@simple-java-mail>";
2424

2525
/**
2626
* @return Whether the given attachment is S/MIME signed / encrypted.
@@ -30,7 +30,7 @@ static boolean isSmimeContentType(@NotNull final ContentType ct) {
3030
isSmimeMultiPartSigned(ct.getBaseType(), ct.getParameter("protocol"));
3131
}
3232

33-
public static <T> boolean isGeneratedSmimeMessageId(@NotNull String headerKey, @NotNull T headerValue) {
33+
static <T> boolean isGeneratedSmimeMessageId(@NotNull String headerKey, @NotNull T headerValue) {
3434
return headerKey.equals("Message-ID") && headerValue.equals(SMIME_ATTACHMENT_MESSAGE_ID);
3535
}
3636

0 commit comments

Comments
 (0)