You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2020/12/21 12:48:34 UTC
[sling-org-apache-sling-commons-messaging-mail] branch jakarta
created (now 9e71aa3)
This is an automated email from the ASF dual-hosted git repository.
olli pushed a change to branch jakarta
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-messaging-mail.git.
at 9e71aa3 SLING-10017 Switch to Jakarta Mail and Activation APIs
This branch includes the following new commits:
new dbee5a0 collect Google Truth and dependencies at the bottom
new 9e71aa3 SLING-10017 Switch to Jakarta Mail and Activation APIs
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[sling-org-apache-sling-commons-messaging-mail] 01/01: SLING-10017
Switch to Jakarta Mail and Activation APIs
Posted by ol...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
olli pushed a commit to branch jakarta
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-messaging-mail.git
commit 9e71aa3b1d0dfa7107286b3bd71ad32d528e334a
Author: Oliver Lietz <ol...@apache.org>
AuthorDate: Mon Dec 21 13:45:32 2020 +0100
SLING-10017 Switch to Jakarta Mail and Activation APIs
* Switch to Jakarta Mail and Activation APIs
* Increase package and bundle versions
* Add MimeMessageParser from Commons Email with adjusted API imports
* Switch to GreenMail 2.0.0-SNAPSHOT (branch issue-317-jakarta-mail-2-0)
---
pom.xml | 14 +-
.../sling/commons/messaging/mail/MailService.java | 2 +-
.../commons/messaging/mail/MessageBuilder.java | 12 +-
.../commons/messaging/mail/MessageIdProvider.java | 4 +-
.../messaging/mail/internal/SimpleMailService.java | 12 +-
.../mail/internal/SimpleMessageBuilder.java | 30 +-
.../mail/internal/SimpleMessageIdProvider.java | 4 +-
.../sling/commons/messaging/mail/package-info.java | 2 +-
.../commons/mail/util/MimeMessageParser.java | 455 +++++++++++++++++++++
.../messaging/mail/it/tests/MailTestSupport.java | 3 +-
.../mail/it/tests/SimpleMailServiceIT.java | 16 +-
11 files changed, 504 insertions(+), 50 deletions(-)
diff --git a/pom.xml b/pom.xml
index 0b94d81..8ba7714 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
</parent>
<artifactId>org.apache.sling.commons.messaging.mail</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<name>Apache Sling Commons Messaging Mail</name>
<description>Send mails via SMTPS</description>
@@ -131,20 +131,20 @@
<dependency>
<groupId>jakarta.mail</groupId>
<artifactId>jakarta.mail-api</artifactId>
- <version>1.6.5</version>
+ <version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.specs</groupId>
- <artifactId>org.apache.servicemix.specs.activation-api-1.1</artifactId>
- <version>2.9.0</version>
+ <groupId>jakarta.activation</groupId>
+ <artifactId>jakarta.activation-api</artifactId>
+ <version>2.0.0</version>
<scope>provided</scope>
</dependency>
<!-- Sun -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
- <version>1.6.5</version>
+ <version>2.0.0</version>
<scope>provided</scope>
</dependency>
<!-- OSGi -->
@@ -264,7 +264,7 @@
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
- <version>1.5.14</version>
+ <version>2.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/MailService.java b/src/main/java/org/apache/sling/commons/messaging/mail/MailService.java
index f203d8d..854731e 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/MailService.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/MailService.java
@@ -20,7 +20,7 @@ package org.apache.sling.commons.messaging.mail;
import java.util.concurrent.CompletableFuture;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimeMessage;
import org.apache.sling.commons.messaging.MessageService;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/MessageBuilder.java b/src/main/java/org/apache/sling/commons/messaging/mail/MessageBuilder.java
index a8f4af3..13533bb 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/MessageBuilder.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/MessageBuilder.java
@@ -18,12 +18,12 @@
*/
package org.apache.sling.commons.messaging.mail;
-import javax.mail.Header;
-import javax.mail.MessagingException;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.InternetHeaders;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.Header;
+import jakarta.mail.MessagingException;
+import jakarta.mail.internet.AddressException;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.InternetHeaders;
+import jakarta.mail.internet.MimeMessage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/MessageIdProvider.java b/src/main/java/org/apache/sling/commons/messaging/mail/MessageIdProvider.java
index 4b0eb5b..a8288c9 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/MessageIdProvider.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/MessageIdProvider.java
@@ -18,8 +18,8 @@
*/
package org.apache.sling.commons.messaging.mail;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.MessagingException;
+import jakarta.mail.internet.MimeMessage;
import org.jetbrains.annotations.NotNull;
import org.osgi.annotation.versioning.ProviderType;
diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
index bc459f1..39c8157 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
@@ -23,12 +23,12 @@ import java.util.Properties;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.event.ConnectionListener;
-import javax.mail.event.TransportListener;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.MessagingException;
+import jakarta.mail.Session;
+import jakarta.mail.Transport;
+import jakarta.mail.event.ConnectionListener;
+import jakarta.mail.event.TransportListener;
+import jakarta.mail.internet.MimeMessage;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.commons.crypto.CryptoService;
diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilder.java b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilder.java
index 79d09d3..76bdebb 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilder.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilder.java
@@ -26,21 +26,21 @@ import java.nio.charset.StandardCharsets;
import java.util.LinkedList;
import java.util.List;
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-import javax.mail.Address;
-import javax.mail.Header;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Part;
-import javax.mail.Session;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.InternetHeaders;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.util.ByteArrayDataSource;
+import jakarta.activation.DataHandler;
+import jakarta.activation.DataSource;
+import jakarta.mail.Address;
+import jakarta.mail.Header;
+import jakarta.mail.Message;
+import jakarta.mail.MessagingException;
+import jakarta.mail.Part;
+import jakarta.mail.Session;
+import jakarta.mail.internet.AddressException;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.InternetHeaders;
+import jakarta.mail.internet.MimeBodyPart;
+import jakarta.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimeMultipart;
+import jakarta.mail.util.ByteArrayDataSource;
import org.apache.sling.commons.messaging.mail.MessageBuilder;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageIdProvider.java b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageIdProvider.java
index e8c231c..eaf2bb2 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageIdProvider.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageIdProvider.java
@@ -20,8 +20,8 @@ package org.apache.sling.commons.messaging.mail.internal;
import java.util.UUID;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.MessagingException;
+import jakarta.mail.internet.MimeMessage;
import org.apache.sling.commons.messaging.mail.MessageIdProvider;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/package-info.java b/src/main/java/org/apache/sling/commons/messaging/mail/package-info.java
index b72b0c3..bae6ec4 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/package-info.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/package-info.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-@Version("1.0.0")
+@Version("2.0.0")
package org.apache.sling.commons.messaging.mail;
import org.osgi.annotation.versioning.Version;
diff --git a/src/test/java/org/apache/commons/mail/util/MimeMessageParser.java b/src/test/java/org/apache/commons/mail/util/MimeMessageParser.java
new file mode 100644
index 0000000..19d22bf
--- /dev/null
+++ b/src/test/java/org/apache/commons/mail/util/MimeMessageParser.java
@@ -0,0 +1,455 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.mail.util;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import jakarta.activation.DataHandler;
+import jakarta.activation.DataSource;
+import jakarta.mail.Message;
+import jakarta.mail.MessagingException;
+import jakarta.mail.Multipart;
+import jakarta.mail.Part;
+import jakarta.mail.internet.ContentType;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeBodyPart;
+import jakarta.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimePart;
+import jakarta.mail.internet.MimeUtility;
+import jakarta.mail.internet.ParseException;
+import jakarta.mail.util.ByteArrayDataSource;
+
+/**
+ * Parses a MimeMessage and stores the individual parts such a plain text,
+ * HTML text and attachments.
+ *
+ * @since 1.3
+ */
+public class MimeMessageParser
+{
+ /** The MimeMessage to convert */
+ private final MimeMessage mimeMessage;
+
+ /** Plain mail content from MimeMessage */
+ private String plainContent;
+
+ /** Html mail content from MimeMessage */
+ private String htmlContent;
+
+ /** List of attachments of MimeMessage */
+ private final List<DataSource> attachmentList;
+
+ /** Attachments stored by their content-id */
+ private final Map<String, DataSource> cidMap;
+
+ /** Is this a Multipart email */
+ private boolean isMultiPart;
+
+ /**
+ * Constructs an instance with the MimeMessage to be extracted.
+ *
+ * @param message the message to parse
+ */
+ public MimeMessageParser(final MimeMessage message)
+ {
+ attachmentList = new ArrayList<>();
+ cidMap = new HashMap<>();
+ this.mimeMessage = message;
+ this.isMultiPart = false;
+ }
+
+ /**
+ * Does the actual extraction.
+ *
+ * @return this instance
+ * @throws Exception parsing the mime message failed
+ */
+ public MimeMessageParser parse() throws Exception
+ {
+ this.parse(null, mimeMessage);
+ return this;
+ }
+
+ /**
+ * @return the 'to' recipients of the message
+ * @throws Exception determining the recipients failed
+ */
+ public List<jakarta.mail.Address> getTo() throws Exception
+ {
+ final jakarta.mail.Address[] recipients = this.mimeMessage.getRecipients(Message.RecipientType.TO);
+ return recipients != null ? Arrays.asList(recipients) : new ArrayList<jakarta.mail.Address>();
+ }
+
+ /**
+ * @return the 'cc' recipients of the message
+ * @throws Exception determining the recipients failed
+ */
+ public List<jakarta.mail.Address> getCc() throws Exception
+ {
+ final jakarta.mail.Address[] recipients = this.mimeMessage.getRecipients(Message.RecipientType.CC);
+ return recipients != null ? Arrays.asList(recipients) : new ArrayList<jakarta.mail.Address>();
+ }
+
+ /**
+ * @return the 'bcc' recipients of the message
+ * @throws Exception determining the recipients failed
+ */
+ public List<jakarta.mail.Address> getBcc() throws Exception
+ {
+ final jakarta.mail.Address[] recipients = this.mimeMessage.getRecipients(Message.RecipientType.BCC);
+ return recipients != null ? Arrays.asList(recipients) : new ArrayList<jakarta.mail.Address>();
+ }
+
+ /**
+ * @return the 'from' field of the message
+ * @throws Exception parsing the mime message failed
+ */
+ public String getFrom() throws Exception
+ {
+ final jakarta.mail.Address[] addresses = this.mimeMessage.getFrom();
+ if (addresses == null || addresses.length == 0)
+ {
+ return null;
+ }
+ return ((InternetAddress) addresses[0]).getAddress();
+ }
+
+ /**
+ * @return the 'replyTo' address of the email
+ * @throws Exception parsing the mime message failed
+ */
+ public String getReplyTo() throws Exception
+ {
+ final jakarta.mail.Address[] addresses = this.mimeMessage.getReplyTo();
+ if (addresses == null || addresses.length == 0)
+ {
+ return null;
+ }
+ return ((InternetAddress) addresses[0]).getAddress();
+ }
+
+ /**
+ * @return the mail subject
+ * @throws Exception parsing the mime message failed
+ */
+ public String getSubject() throws Exception
+ {
+ return this.mimeMessage.getSubject();
+ }
+
+ /**
+ * Extracts the content of a MimeMessage recursively.
+ *
+ * @param parent the parent multi-part
+ * @param part the current MimePart
+ * @throws MessagingException parsing the MimeMessage failed
+ * @throws IOException parsing the MimeMessage failed
+ */
+ protected void parse(final Multipart parent, final MimePart part)
+ throws MessagingException, IOException
+ {
+ if (isMimeType(part, "text/plain") && plainContent == null
+ && !Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
+ {
+ plainContent = (String) part.getContent();
+ }
+ else
+ {
+ if (isMimeType(part, "text/html") && htmlContent == null
+ && !Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
+ {
+ htmlContent = (String) part.getContent();
+ }
+ else
+ {
+ if (isMimeType(part, "multipart/*"))
+ {
+ this.isMultiPart = true;
+ final Multipart mp = (Multipart) part.getContent();
+ final int count = mp.getCount();
+
+ // iterate over all MimeBodyPart
+
+ for (int i = 0; i < count; i++)
+ {
+ parse(mp, (MimeBodyPart) mp.getBodyPart(i));
+ }
+ }
+ else
+ {
+ final String cid = stripContentId(part.getContentID());
+ final DataSource ds = createDataSource(parent, part);
+ if (cid != null)
+ {
+ this.cidMap.put(cid, ds);
+ }
+ this.attachmentList.add(ds);
+ }
+ }
+ }
+ }
+
+ /**
+ * Strips the content id of any whitespace and angle brackets.
+ * @param contentId the string to strip
+ * @return a stripped version of the content id
+ */
+ private String stripContentId(final String contentId)
+ {
+ if (contentId == null)
+ {
+ return null;
+ }
+ return contentId.trim().replaceAll("[\\<\\>]", "");
+ }
+
+ /**
+ * Checks whether the MimePart contains an object of the given mime type.
+ *
+ * @param part the current MimePart
+ * @param mimeType the mime type to check
+ * @return {@code true} if the MimePart matches the given mime type, {@code false} otherwise
+ * @throws MessagingException parsing the MimeMessage failed
+ * @throws IOException parsing the MimeMessage failed
+ */
+ private boolean isMimeType(final MimePart part, final String mimeType)
+ throws MessagingException, IOException
+ {
+ // Do not use part.isMimeType(String) as it is broken for MimeBodyPart
+ // and does not really check the actual content type.
+
+ try
+ {
+ final ContentType ct = new ContentType(part.getDataHandler().getContentType());
+ return ct.match(mimeType);
+ }
+ catch (final ParseException ex)
+ {
+ return part.getContentType().equalsIgnoreCase(mimeType);
+ }
+ }
+
+ /**
+ * Parses the MimePart to create a DataSource.
+ *
+ * @param parent the parent multi-part
+ * @param part the current part to be processed
+ * @return the DataSource
+ * @throws MessagingException creating the DataSource failed
+ * @throws IOException creating the DataSource failed
+ */
+ protected DataSource createDataSource(final Multipart parent, final MimePart part)
+ throws MessagingException, IOException
+ {
+ final DataHandler dataHandler = part.getDataHandler();
+ final DataSource dataSource = dataHandler.getDataSource();
+ final String contentType = getBaseMimeType(dataSource.getContentType());
+ final byte[] content = this.getContent(dataSource.getInputStream());
+ final ByteArrayDataSource result = new ByteArrayDataSource(content, contentType);
+ final String dataSourceName = getDataSourceName(part, dataSource);
+
+ result.setName(dataSourceName);
+ return result;
+ }
+
+ /** @return Returns the mimeMessage. */
+ public MimeMessage getMimeMessage()
+ {
+ return mimeMessage;
+ }
+
+ /** @return Returns the isMultiPart. */
+ public boolean isMultipart()
+ {
+ return isMultiPart;
+ }
+
+ /** @return Returns the plainContent if any */
+ public String getPlainContent()
+ {
+ return plainContent;
+ }
+
+ /** @return Returns the attachmentList. */
+ public List<DataSource> getAttachmentList()
+ {
+ return attachmentList;
+ }
+
+ /**
+ * Returns a collection of all content-ids in the parsed message.
+ * <p>
+ * The content-ids are stripped of any angle brackets, i.e. "part1" instead
+ * of "<part1>".
+ *
+ * @return the collection of content ids.
+ * @since 1.3.4
+ */
+ public Collection<String> getContentIds()
+ {
+ return Collections.unmodifiableSet(cidMap.keySet());
+ }
+
+ /** @return Returns the htmlContent if any */
+ public String getHtmlContent()
+ {
+ return htmlContent;
+ }
+
+ /** @return true if a plain content is available */
+ public boolean hasPlainContent()
+ {
+ return this.plainContent != null;
+ }
+
+ /** @return true if HTML content is available */
+ public boolean hasHtmlContent()
+ {
+ return this.htmlContent != null;
+ }
+
+ /** @return true if attachments are available */
+ public boolean hasAttachments()
+ {
+ return this.attachmentList.size() > 0;
+ }
+
+ /**
+ * Find an attachment using its name.
+ *
+ * @param name the name of the attachment
+ * @return the corresponding datasource or null if nothing was found
+ */
+ public DataSource findAttachmentByName(final String name)
+ {
+ DataSource dataSource;
+
+ for (final DataSource element : getAttachmentList()) {
+ dataSource = element;
+ if (name.equalsIgnoreCase(dataSource.getName()))
+ {
+ return dataSource;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Find an attachment using its content-id.
+ * <p>
+ * The content-id must be stripped of any angle brackets,
+ * i.e. "part1" instead of "<part1>".
+ *
+ * @param cid the content-id of the attachment
+ * @return the corresponding datasource or null if nothing was found
+ * @since 1.3.4
+ */
+ public DataSource findAttachmentByCid(final String cid)
+ {
+ final DataSource dataSource = cidMap.get(cid);
+ return dataSource;
+ }
+
+ /**
+ * Determines the name of the data source if it is not already set.
+ *
+ * @param part the mail part
+ * @param dataSource the data source
+ * @return the name of the data source or {@code null} if no name can be determined
+ * @throws MessagingException accessing the part failed
+ * @throws UnsupportedEncodingException decoding the text failed
+ */
+ protected String getDataSourceName(final Part part, final DataSource dataSource)
+ throws MessagingException, UnsupportedEncodingException
+ {
+ String result = dataSource.getName();
+
+ if (result == null || result.length() == 0)
+ {
+ result = part.getFileName();
+ }
+
+ if (result != null && result.length() > 0)
+ {
+ result = MimeUtility.decodeText(result);
+ }
+ else
+ {
+ result = null;
+ }
+
+ return result;
+ }
+
+ /**
+ * Read the content of the input stream.
+ *
+ * @param is the input stream to process
+ * @return the content of the input stream
+ * @throws IOException reading the input stream failed
+ */
+ private byte[] getContent(final InputStream is)
+ throws IOException
+ {
+ int ch;
+ byte[] result;
+
+ final ByteArrayOutputStream os = new ByteArrayOutputStream();
+ final BufferedInputStream isReader = new BufferedInputStream(is);
+ final BufferedOutputStream osWriter = new BufferedOutputStream(os);
+
+ while ((ch = isReader.read()) != -1)
+ {
+ osWriter.write(ch);
+ }
+
+ osWriter.flush();
+ result = os.toByteArray();
+ osWriter.close();
+
+ return result;
+ }
+
+ /**
+ * Parses the mimeType.
+ *
+ * @param fullMimeType the mime type from the mail api
+ * @return the real mime type
+ */
+ private String getBaseMimeType(final String fullMimeType)
+ {
+ final int pos = fullMimeType.indexOf(';');
+ if (pos >= 0)
+ {
+ return fullMimeType.substring(0, pos);
+ }
+ return fullMimeType;
+ }
+}
diff --git a/src/test/java/org/apache/sling/commons/messaging/mail/it/tests/MailTestSupport.java b/src/test/java/org/apache/sling/commons/messaging/mail/it/tests/MailTestSupport.java
index 49e4c62..e6ee6b7 100644
--- a/src/test/java/org/apache/sling/commons/messaging/mail/it/tests/MailTestSupport.java
+++ b/src/test/java/org/apache/sling/commons/messaging/mail/it/tests/MailTestSupport.java
@@ -65,7 +65,7 @@ public abstract class MailTestSupport extends TestSupport {
// Sling Commons Messaging Mail
testBundle("bundle.filename"),
mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.messaging").versionAsInProject(),
- mavenBundle().groupId("org.apache.servicemix.specs").artifactId("org.apache.servicemix.specs.activation-api-1.1").versionAsInProject(),
+ mavenBundle().groupId("jakarta.activation").artifactId("jakarta.activation-api").versionAsInProject(),
mavenBundle().groupId("jakarta.mail").artifactId("jakarta.mail-api").versionAsInProject(),
mavenBundle().groupId("com.sun.mail").artifactId("jakarta.mail").versionAsInProject(),
mavenBundle().groupId("org.apache.commons").artifactId("commons-lang3").versionAsInProject(),
@@ -79,7 +79,6 @@ public abstract class MailTestSupport extends TestSupport {
mavenBundle().groupId("com.google.guava").artifactId("failureaccess").versionAsInProject(),
mavenBundle().groupId("com.googlecode.java-diff-utils").artifactId("diffutils").versionAsInProject(),
mavenBundle().groupId("commons-io").artifactId("commons-io").versionAsInProject(),
- mavenBundle().groupId("org.apache.commons").artifactId("commons-email").versionAsInProject(),
greenmail(),
thymeleaf(),
vmOption(System.getProperty("jacoco.command"))
diff --git a/src/test/java/org/apache/sling/commons/messaging/mail/it/tests/SimpleMailServiceIT.java b/src/test/java/org/apache/sling/commons/messaging/mail/it/tests/SimpleMailServiceIT.java
index 2aeab8c..16bcabe 100644
--- a/src/test/java/org/apache/sling/commons/messaging/mail/it/tests/SimpleMailServiceIT.java
+++ b/src/test/java/org/apache/sling/commons/messaging/mail/it/tests/SimpleMailServiceIT.java
@@ -33,14 +33,14 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import javax.inject.Inject;
-import javax.mail.Message;
-import javax.mail.Session;
-import javax.mail.event.ConnectionEvent;
-import javax.mail.event.ConnectionListener;
-import javax.mail.event.TransportEvent;
-import javax.mail.event.TransportListener;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.Message;
+import jakarta.mail.Session;
+import jakarta.mail.event.ConnectionEvent;
+import jakarta.mail.event.ConnectionListener;
+import jakarta.mail.event.TransportEvent;
+import jakarta.mail.event.TransportListener;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeMessage;
import com.icegreen.greenmail.util.DummySSLSocketFactory;
import com.icegreen.greenmail.util.GreenMail;