You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/12/25 17:54:40 UTC

(commons-email) 03/03: Split modules for Core, Jakarta, and Javax

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-email.git

commit d8e88af2f23f6ef05fc469f50edc3055f1815623
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Mon Dec 25 12:54:25 2023 -0500

    Split modules for Core, Jakarta, and Javax
---
 .../pom.xml                                        |  35 ++-----------
 .../src/conf/spotbugs-exclude-filter.xml           |  12 ++---
 .../apache/commons/mail2/core}/EmailConstants.java |   8 +--
 .../apache/commons/mail2/core}/EmailException.java |  14 ++---
 .../org/apache/commons/mail2/core}/EmailUtils.java |  43 +++++-----------
 .../apache/commons/mail2/core}/package-info.java   |   2 +-
 .../src/main/resources/META-INF/mime.types         |   0
 .../commons/mail2/core}/EmailConstantsTest.java    |   2 +-
 .../apache/commons/mail2/core}/EmailUtilsTest.java |   2 +-
 .../test/resources/attachments/autoloadertest.html |   0
 .../test/resources/attachments/classpathtest.html  |   0
 .../resources/attachments/download_email.cgi.html  |   0
 .../src/test/resources/attachments/logo.pdf        | Bin
 .../src/test/resources/eml/attachment-only.eml     |   0
 .../eml/html-attachment-content-disposition.eml    |   0
 .../eml/html-attachment-encoded-filename.eml       |   0
 .../src/test/resources/eml/html-attachment.eml     |   0
 .../src/test/resources/eml/multipart-report.eml    |   0
 .../eml/multipart-text-attachment-only.eml         |   0
 .../resources/eml/multipart-text-attachment.eml    |   0
 .../eml/outofmemory-no-header-seperation.eml       |   0
 .../src/test/resources/eml/simple-reply.eml        |   0
 .../src/test/resources/eml/simple.eml              |   0
 .../src/test/resources/html/www.apache.org.html    |   0
 .../src/test/resources/images/asf_logo_wide.gif    | Bin
 .../src/test/resources/images/contentTypeTest.gif  | Bin
 .../src/test/resources/images/contentTypeTest.jpg  | Bin
 .../src/test/resources/images/contentTypeTest.png  | Bin
 .../test/resources/images/logos/maven-feather.png  | Bin
 .../org.mockito.plugins.MockMaker                  |   0
 .../pom.xml                                        |  38 ++++++++------
 .../src/conf/spotbugs-exclude-filter.xml           |  12 ++---
 .../commons/mail2/jakarta}/DataSourceResolver.java |   4 +-
 .../mail2/jakarta}/DefaultAuthenticator.java       |   6 +--
 .../org/apache/commons/mail2/jakarta}/Email.java   |  57 +++++++++++----------
 .../commons/mail2/jakarta}/EmailAttachment.java    |   6 +--
 .../commons/mail2/jakarta}/EmailConstants.java     |   8 +--
 .../apache/commons/mail2/jakarta}/HtmlEmail.java   |  37 +++++++------
 .../commons/mail2/jakarta}/ImageHtmlEmail.java     |   9 ++--
 .../commons/mail2/jakarta}/MultiPartEmail.java     |  50 +++++++++---------
 .../apache/commons/mail2/jakarta}/SimpleEmail.java |   6 ++-
 .../jakarta}/activation/InputStreamDataSource.java |   4 +-
 .../mail2/jakarta}/activation/PathDataSource.java  |  16 +++---
 .../mail2/jakarta}/activation/package-info.java    |   2 +-
 .../commons/mail2/jakarta}/package-info.java       |   2 +-
 .../jakarta}/resolver/DataSourceBaseResolver.java  |   4 +-
 .../resolver/DataSourceClassPathResolver.java      |   8 +--
 .../resolver/DataSourceCompositeResolver.java      |   6 +--
 .../jakarta}/resolver/DataSourceFileResolver.java  |   6 +--
 .../jakarta}/resolver/DataSourcePathResolver.java  |   8 +--
 .../jakarta}/resolver/DataSourceUrlResolver.java   |   6 +--
 .../mail2/jakarta}/resolver/package-info.java      |   2 +-
 .../jakarta}/util/IDNEmailAddressConverter.java    |   4 +-
 .../mail2/jakarta}/util/MimeMessageParser.java     |  32 ++++++------
 .../mail2/jakarta}/util/MimeMessageUtils.java      |  10 ++--
 .../commons/mail2/jakarta}/util/package-info.java  |   2 +-
 .../src/main/resources/META-INF/mime.types         |   0
 .../commons/mail2/jakarta}/AbstractEmailTest.java  |  24 ++++-----
 .../mail2/jakarta}/DefaultAuthenticatorTest.java   |   6 +--
 .../mail2/jakarta}/EmailAttachmentTest.java        |   2 +-
 .../commons/mail2/jakarta}/EmailConstantsTest.java |   2 +-
 .../commons/mail2/jakarta}/EmailLiveTest.java      |  46 +++++++++--------
 .../apache/commons/mail2/jakarta}/EmailTest.java   |  19 +++----
 .../commons/mail2/jakarta}/HtmlEmailTest.java      |  18 ++++---
 .../commons/mail2/jakarta}/ImageHtmlEmailTest.java |  23 +++++----
 .../mail2/jakarta}/InputStreamDataSourceTest.java  |   4 +-
 .../commons/mail2/jakarta}/InvalidAddressTest.java |   5 +-
 .../mail2/jakarta}/InvalidInternetAddressTest.java |   6 +--
 .../commons/mail2/jakarta}/MultiPartEmailTest.java |  14 ++---
 .../mail2/jakarta}/SendWithAttachmentsTest.java    |  11 ++--
 .../commons/mail2/jakarta}/SimpleEmailTest.java    |   6 ++-
 .../mail2/jakarta}/mocks/MockEmailConcrete.java    |   4 +-
 .../jakarta}/mocks/MockHtmlEmailConcrete.java      |   6 +--
 .../jakarta}/mocks/MockImageHtmlEmailConcrete.java |   6 +--
 .../jakarta}/mocks/MockMultiPartEmailConcrete.java |   6 +--
 .../mail2/jakarta}/mocks/MockSimpleEmail.java      |   4 +-
 .../commons/mail2/jakarta}/mocks/package-info.java |   2 +-
 .../resolver/AbstractDataSourceResolverTest.java   |   6 +--
 .../resolver/DataSourceClassPathResolverTest.java  |   4 +-
 .../resolver/DataSourceCompositeResolverTest.java  |   4 +-
 .../resolver/DataSourceFileResolverTest.java       |   4 +-
 .../resolver/DataSourcePathResolverTest.java       |   4 +-
 .../resolver/DataSourceUrlResolverTest.java        |   4 +-
 .../jakarta}/settings/EmailConfiguration.java      |   4 +-
 .../mail2/jakarta}/settings/package-info.java      |   2 +-
 .../util/IDNEmailAddressConverterTest.java         |   6 +--
 .../mail2/jakarta}/util/MimeMessageParserTest.java |  12 ++---
 .../test/resources/attachments/autoloadertest.html |   0
 .../test/resources/attachments/classpathtest.html  |   0
 .../resources/attachments/download_email.cgi.html  |   0
 .../src/test/resources/attachments/logo.pdf        | Bin
 .../src/test/resources/eml/attachment-only.eml     |   0
 .../eml/html-attachment-content-disposition.eml    |   0
 .../eml/html-attachment-encoded-filename.eml       |   0
 .../src/test/resources/eml/html-attachment.eml     |   0
 .../src/test/resources/eml/multipart-report.eml    |   0
 .../eml/multipart-text-attachment-only.eml         |   0
 .../resources/eml/multipart-text-attachment.eml    |   0
 .../eml/outofmemory-no-header-seperation.eml       |   0
 .../src/test/resources/eml/simple-reply.eml        |   0
 .../src/test/resources/eml/simple.eml              |   0
 .../src/test/resources/html/www.apache.org.html    |   0
 .../src/test/resources/images/asf_logo_wide.gif    | Bin
 .../src/test/resources/images/contentTypeTest.gif  | Bin
 .../src/test/resources/images/contentTypeTest.jpg  | Bin
 .../src/test/resources/images/contentTypeTest.png  | Bin
 .../test/resources/images/logos/maven-feather.png  | Bin
 .../org.mockito.plugins.MockMaker                  |   0
 .../pom.xml                                        |  30 +++++++----
 .../src/conf/spotbugs-exclude-filter.xml           |   0
 .../commons/mail2/javax/DataSourceResolver.java    |   0
 .../commons/mail2/javax/DefaultAuthenticator.java  |   0
 .../java/org/apache/commons/mail2/javax/Email.java |  18 ++++---
 .../commons/mail2/javax/EmailAttachment.java       |   0
 .../apache/commons/mail2/javax/EmailConstants.java |   6 ---
 .../org/apache/commons/mail2/javax/HtmlEmail.java  |   5 +-
 .../apache/commons/mail2/javax/ImageHtmlEmail.java |   3 ++
 .../apache/commons/mail2/javax/MultiPartEmail.java |   2 +
 .../apache/commons/mail2/javax/SimpleEmail.java    |   2 +
 .../javax/activation/InputStreamDataSource.java    |   0
 .../mail2/javax/activation/PathDataSource.java     |   0
 .../mail2/javax/activation/package-info.java       |   0
 .../apache/commons/mail2/javax/package-info.java   |   0
 .../javax/resolver/DataSourceBaseResolver.java     |   0
 .../resolver/DataSourceClassPathResolver.java      |   0
 .../resolver/DataSourceCompositeResolver.java      |   0
 .../javax/resolver/DataSourceFileResolver.java     |   0
 .../javax/resolver/DataSourcePathResolver.java     |   0
 .../javax/resolver/DataSourceUrlResolver.java      |   0
 .../commons/mail2/javax/resolver/package-info.java |   0
 .../mail2/javax/util/IDNEmailAddressConverter.java |   0
 .../mail2/javax/util/MimeMessageParser.java        |   0
 .../commons/mail2/javax/util/MimeMessageUtils.java |   0
 .../commons/mail2/javax/util/package-info.java     |   0
 .../src/main/resources/META-INF/mime.types         |   0
 .../commons/mail2/javax/AbstractEmailTest.java     |   3 +-
 .../mail2/javax/DefaultAuthenticatorTest.java      |   0
 .../commons/mail2/javax/EmailAttachmentTest.java   |   0
 .../commons/mail2/javax/EmailConstantsTest.java    |   0
 .../apache/commons/mail2/javax/EmailLiveTest.java  |  26 +++++-----
 .../org/apache/commons/mail2/javax/EmailTest.java  |   1 +
 .../apache/commons/mail2/javax/HtmlEmailTest.java  |   2 +
 .../commons/mail2/javax/ImageHtmlEmailTest.java    |   1 +
 .../mail2/javax/InputStreamDataSourceTest.java     |   0
 .../commons/mail2/javax/InvalidAddressTest.java    |   1 +
 .../mail2/javax/InvalidInternetAddressTest.java    |   0
 .../commons/mail2/javax/MultiPartEmailTest.java    |   2 +
 .../mail2/javax/SendWithAttachmentsTest.java       |   1 +
 .../commons/mail2/javax/SimpleEmailTest.java       |   2 +
 .../mail2/javax/mocks/MockEmailConcrete.java       |   0
 .../mail2/javax/mocks/MockHtmlEmailConcrete.java   |   0
 .../javax/mocks/MockImageHtmlEmailConcrete.java    |   0
 .../javax/mocks/MockMultiPartEmailConcrete.java    |   0
 .../commons/mail2/javax/mocks/MockSimpleEmail.java |   0
 .../commons/mail2/javax/mocks/package-info.java    |   0
 .../resolver/AbstractDataSourceResolverTest.java   |   0
 .../resolver/DataSourceClassPathResolverTest.java  |   0
 .../resolver/DataSourceCompositeResolverTest.java  |   0
 .../javax/resolver/DataSourceFileResolverTest.java |   0
 .../javax/resolver/DataSourcePathResolverTest.java |   0
 .../javax/resolver/DataSourceUrlResolverTest.java  |   0
 .../mail2/javax/settings/EmailConfiguration.java   |   0
 .../commons/mail2/javax/settings/package-info.java |   0
 .../javax/util/IDNEmailAddressConverterTest.java   |   0
 .../mail2/javax/util/MimeMessageParserTest.java    |   0
 .../test/resources/attachments/autoloadertest.html |   0
 .../test/resources/attachments/classpathtest.html  |   0
 .../resources/attachments/download_email.cgi.html  |   0
 .../src/test/resources/attachments/logo.pdf        | Bin
 .../src/test/resources/eml/attachment-only.eml     |   0
 .../eml/html-attachment-content-disposition.eml    |   0
 .../eml/html-attachment-encoded-filename.eml       |   0
 .../src/test/resources/eml/html-attachment.eml     |   0
 .../src/test/resources/eml/multipart-report.eml    |   0
 .../eml/multipart-text-attachment-only.eml         |   0
 .../resources/eml/multipart-text-attachment.eml    |   0
 .../eml/outofmemory-no-header-seperation.eml       |   0
 .../src/test/resources/eml/simple-reply.eml        |   0
 .../src/test/resources/eml/simple.eml              |   0
 .../src/test/resources/html/www.apache.org.html    |   0
 .../src/test/resources/images/asf_logo_wide.gif    | Bin
 .../src/test/resources/images/contentTypeTest.gif  | Bin
 .../src/test/resources/images/contentTypeTest.jpg  | Bin
 .../src/test/resources/images/contentTypeTest.png  | Bin
 .../test/resources/images/logos/maven-feather.png  | Bin
 .../org.mockito.plugins.MockMaker                  |   0
 pom.xml                                            |  46 ++---------------
 187 files changed, 421 insertions(+), 457 deletions(-)

diff --git a/commons-email-javax/pom.xml b/commons-email2-core/pom.xml
similarity index 74%
copy from commons-email-javax/pom.xml
copy to commons-email2-core/pom.xml
index 12966cd..f957800 100644
--- a/commons-email-javax/pom.xml
+++ b/commons-email2-core/pom.xml
@@ -24,17 +24,13 @@
     <relativePath>../</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
-  <artifactId>commons-email2-javax</artifactId>
-  <name>Apache Commons Email for Javax</name>
+  <artifactId>commons-email2-core</artifactId>
+  <name>Apache Commons Email Core</name>
 
   <inceptionYear>2001</inceptionYear>
   <description>Apache Commons Email provides an API for sending email, simplifying the JavaMail Javax API.</description>
 
   <dependencies>
-    <dependency>
-      <groupId>com.sun.mail</groupId>
-      <artifactId>jakarta.mail</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter</artifactId>
@@ -45,36 +41,11 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-jdk14</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.subethamail</groupId>
-      <artifactId>subethasmtp</artifactId>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>javax.mail</groupId>
-          <artifactId>mail</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
   <properties>
     <commons.parent.dir>${basedir}/..</commons.parent.dir>
+    <commons.module.name>org.apache.commons.mail2.core</commons.module.name>
   </properties>
 
   <build>
diff --git a/commons-email-javax/src/conf/spotbugs-exclude-filter.xml b/commons-email2-core/src/conf/spotbugs-exclude-filter.xml
similarity index 81%
copy from commons-email-javax/src/conf/spotbugs-exclude-filter.xml
copy to commons-email2-core/src/conf/spotbugs-exclude-filter.xml
index 918b341..36af18b 100644
--- a/commons-email-javax/src/conf/spotbugs-exclude-filter.xml
+++ b/commons-email2-core/src/conf/spotbugs-exclude-filter.xml
@@ -42,16 +42,16 @@
   </Match>
 
   <!-- False positives in Java 11+ 
-    Error:  Load of known null value in org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver.resolve(String, boolean)
-     [org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver]
+    Error:  Load of known null value in org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver.resolve(String, boolean)
+     [org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver]
      At DataSourceClassPathResolver.java:[line 115] NP_LOAD_OF_KNOWN_NULL_VALUE
-    Error:  Redundant nullcheck of inputStream which is known to be null in org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver.resolve(String, boolean)
-     [org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver]
+    Error:  Redundant nullcheck of inputStream which is known to be null in org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver.resolve(String, boolean)
+     [org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver]
      Redundant null check at DataSourceClassPathResolver.java:[line 115] RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE
   -->
   <Match>
-    <Class name="org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver" />
-    <Method name="resolve" params="java.lang.String, boolean" returns="javax.activation.DataSource"/>
+    <Class name="org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver" />
+    <Method name="resolve" params="java.lang.String, boolean" returns="jakarta.activation.DataSource"/>
     <Or>
       <Bug pattern="NP_LOAD_OF_KNOWN_NULL_VALUE" />
       <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE" />
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java b/commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailConstants.java
similarity index 98%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
copy to commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailConstants.java
index 7a66333..ffe8c61 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
+++ b/commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailConstants.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.core;
 
 import java.nio.charset.StandardCharsets;
 import java.time.Duration;
@@ -29,12 +29,6 @@ import java.time.Duration;
  */
 public final class EmailConstants {
 
-    
-
-    
-
-    // Charset constants
-
     /** Charset constant for koi8-r */
     public static final String KOI8_R = "koi8-r";
 
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailException.java b/commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailException.java
similarity index 85%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailException.java
rename to commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailException.java
index 7d59198..f5f0696 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailException.java
+++ b/commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.core;
 
 import java.io.OutputStreamWriter;
 import java.io.PrintStream;
@@ -41,7 +41,7 @@ public class EmailException extends Exception {
     /** Serializable version identifier. */
     private static final long serialVersionUID = 5550674499282474616L;
 
-    static <V> V call(final Callable<V> callable) throws EmailException {
+    public static <V> V call(final Callable<V> callable) throws EmailException {
         try {
             return callable.call();
         } catch (final Exception e) {
@@ -49,26 +49,26 @@ public class EmailException extends Exception {
         }
     }
 
-    static <T> T check(final Supplier<Boolean> test, final T subject, final Supplier<String> message) throws EmailException {
+    public static <T> T check(final Supplier<Boolean> test, final T subject, final Supplier<String> message) throws EmailException {
         if (test.get()) {
             throw new EmailException(message.get());
         }
         return subject;
     }
 
-    static <T> Collection<T> checkNonEmpty(final Collection<T> value, final Supplier<String> message) throws EmailException {
+    public static <T> Collection<T> checkNonEmpty(final Collection<T> value, final Supplier<String> message) throws EmailException {
         return check(() -> EmailUtils.isEmpty(value), value, message);
     }
 
-    static String checkNonEmpty(final String value, final Supplier<String> message) throws EmailException {
+    public static String checkNonEmpty(final String value, final Supplier<String> message) throws EmailException {
         return check(() -> EmailUtils.isEmpty(value), value, message);
     }
 
-    static <T> T[] checkNonEmpty(final T[] value, final Supplier<String> message) throws EmailException {
+    public static <T> T[] checkNonEmpty(final T[] value, final Supplier<String> message) throws EmailException {
         return check(() -> EmailUtils.isEmpty(value), value, message);
     }
 
-    static <T> T checkNonNull(final T test, final Supplier<String> message) throws EmailException {
+    public static <T> T checkNonNull(final T test, final Supplier<String> message) throws EmailException {
         if (test == null) {
             throw new EmailException(message.get());
         }
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailUtils.java b/commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailUtils.java
similarity index 85%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailUtils.java
rename to commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailUtils.java
index 3559701..7957a4e 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailUtils.java
+++ b/commons-email2-core/src/main/java/org/apache/commons/mail2/core/EmailUtils.java
@@ -15,10 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.core;
 
-import java.io.File;
-import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.BitSet;
 import java.util.Collection;
@@ -26,11 +24,6 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Random;
 
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.mail2.javax.util.MimeMessageUtils;
-
 /**
  * Utility methods used by commons-email.
  * <p>
@@ -40,9 +33,9 @@ import org.apache.commons.mail2.javax.util.MimeMessageUtils;
  * This is a package scoped class, and should not be used directly by users.
  * </p>
  *
- * @since 1.0
+ * @since 2.0.0
  */
-final class EmailUtils {
+public final class EmailUtils {
 
     /**
      * Random object used by random method. This has to be not local to the random method so as to not return the same value in the same millisecond.
@@ -100,7 +93,7 @@ final class EmailUtils {
      * @return a URL encoded string
      * @see <a href="http://tools.ietf.org/html/rfc2392">RFC 2392</a>
      */
-    static String encodeUrl(final String input) {
+    public static String encodeUrl(final String input) {
         if (input == null) {
             return null;
         }
@@ -120,15 +113,15 @@ final class EmailUtils {
         return builder.toString();
     }
 
-    static boolean isEmpty(final Collection<?> collection) {
+    public static boolean isEmpty(final Collection<?> collection) {
         return collection == null || collection.isEmpty();
     }
 
-    static boolean isEmpty(final Map<?, ?> map) {
+    public static boolean isEmpty(final Map<?, ?> map) {
         return map == null || map.isEmpty();
     }
 
-    static boolean isEmpty(final Object[] array) {
+    public static boolean isEmpty(final Object[] array) {
         return array == null || array.length == 0;
     }
 
@@ -141,7 +134,7 @@ final class EmailUtils {
      * @param str the String to check, may be null
      * @return {@code true} if the String is empty or null
      */
-    static boolean isEmpty(final String str) {
+    public static boolean isEmpty(final String str) {
         return str == null || str.isEmpty();
     }
 
@@ -154,7 +147,7 @@ final class EmailUtils {
      * @param str the String to check, may be null
      * @return {@code true} if the String is not empty and not null
      */
-    static boolean isNotEmpty(final String str) {
+    public static boolean isNotEmpty(final String str) {
         return str != null && !str.isEmpty();
     }
 
@@ -238,7 +231,7 @@ final class EmailUtils {
      * @param count the length of random string to create
      * @return the random string
      */
-    static String randomAlphabetic(final int count) {
+    public static String randomAlphabetic(final int count) {
         return random(count, 0, 0, true, false, null, RANDOM);
     }
 
@@ -248,26 +241,14 @@ final class EmailUtils {
      * @param input the input string to be scanned.
      * @return a clean string
      */
-    static String replaceEndOfLineCharactersWithSpaces(final String input) {
+    public static String replaceEndOfLineCharactersWithSpaces(final String input) {
         return input == null ? null : input.replace('\n', ' ').replace('\r', ' ');
     }
 
-    static String toLower(final String value) {
+    public static String toLower(final String value) {
         return value.toLowerCase(Locale.ROOT);
     }
 
-    /**
-     * Convenience method to write a MimeMessage into a file.
-     *
-     * @param resultFile  the file containing the MimeMessage
-     * @param mimeMessage the MimeMessage to write
-     * @throws IOException        writing the MimeMessage failed
-     * @throws MessagingException writing the MimeMessage failed
-     */
-    static void writeMimeMessage(final File resultFile, final MimeMessage mimeMessage) throws IOException, MessagingException {
-        MimeMessageUtils.writeMimeMessage(mimeMessage, resultFile);
-    }
-
     /**
      * Constructs a new {@code EmailException} with no detail message.
      */
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java b/commons-email2-core/src/main/java/org/apache/commons/mail2/core/package-info.java
similarity index 96%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java
copy to commons-email2-core/src/main/java/org/apache/commons/mail2/core/package-info.java
index 6097b1c..1430264 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java
+++ b/commons-email2-core/src/main/java/org/apache/commons/mail2/core/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Commons-Email aims to provide a API for sending email. It is built on top of the Java Mail API, which it aims to simplify. All help is gratefully received.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.core;
diff --git a/commons-email-javax/src/main/resources/META-INF/mime.types b/commons-email2-core/src/main/resources/META-INF/mime.types
similarity index 100%
copy from commons-email-javax/src/main/resources/META-INF/mime.types
copy to commons-email2-core/src/main/resources/META-INF/mime.types
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java b/commons-email2-core/src/test/java/org/apache/commons/mail2/core/EmailConstantsTest.java
similarity index 95%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java
copy to commons-email2-core/src/test/java/org/apache/commons/mail2/core/EmailConstantsTest.java
index 174791e..0755a4e 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java
+++ b/commons-email2-core/src/test/java/org/apache/commons/mail2/core/EmailConstantsTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.core;
 
 public class EmailConstantsTest {
 
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailUtilsTest.java b/commons-email2-core/src/test/java/org/apache/commons/mail2/core/EmailUtilsTest.java
similarity index 98%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailUtilsTest.java
rename to commons-email2-core/src/test/java/org/apache/commons/mail2/core/EmailUtilsTest.java
index 18dcee6..5e3e96d 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailUtilsTest.java
+++ b/commons-email2-core/src/test/java/org/apache/commons/mail2/core/EmailUtilsTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.core;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/commons-email-javax/src/test/resources/attachments/autoloadertest.html b/commons-email2-core/src/test/resources/attachments/autoloadertest.html
similarity index 100%
copy from commons-email-javax/src/test/resources/attachments/autoloadertest.html
copy to commons-email2-core/src/test/resources/attachments/autoloadertest.html
diff --git a/commons-email-javax/src/test/resources/attachments/classpathtest.html b/commons-email2-core/src/test/resources/attachments/classpathtest.html
similarity index 100%
copy from commons-email-javax/src/test/resources/attachments/classpathtest.html
copy to commons-email2-core/src/test/resources/attachments/classpathtest.html
diff --git a/commons-email-javax/src/test/resources/attachments/download_email.cgi.html b/commons-email2-core/src/test/resources/attachments/download_email.cgi.html
similarity index 100%
copy from commons-email-javax/src/test/resources/attachments/download_email.cgi.html
copy to commons-email2-core/src/test/resources/attachments/download_email.cgi.html
diff --git a/commons-email-javax/src/test/resources/attachments/logo.pdf b/commons-email2-core/src/test/resources/attachments/logo.pdf
similarity index 100%
copy from commons-email-javax/src/test/resources/attachments/logo.pdf
copy to commons-email2-core/src/test/resources/attachments/logo.pdf
diff --git a/commons-email-javax/src/test/resources/eml/attachment-only.eml b/commons-email2-core/src/test/resources/eml/attachment-only.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/attachment-only.eml
copy to commons-email2-core/src/test/resources/eml/attachment-only.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment-content-disposition.eml b/commons-email2-core/src/test/resources/eml/html-attachment-content-disposition.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/html-attachment-content-disposition.eml
copy to commons-email2-core/src/test/resources/eml/html-attachment-content-disposition.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment-encoded-filename.eml b/commons-email2-core/src/test/resources/eml/html-attachment-encoded-filename.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/html-attachment-encoded-filename.eml
copy to commons-email2-core/src/test/resources/eml/html-attachment-encoded-filename.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment.eml b/commons-email2-core/src/test/resources/eml/html-attachment.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/html-attachment.eml
copy to commons-email2-core/src/test/resources/eml/html-attachment.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-report.eml b/commons-email2-core/src/test/resources/eml/multipart-report.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/multipart-report.eml
copy to commons-email2-core/src/test/resources/eml/multipart-report.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-text-attachment-only.eml b/commons-email2-core/src/test/resources/eml/multipart-text-attachment-only.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/multipart-text-attachment-only.eml
copy to commons-email2-core/src/test/resources/eml/multipart-text-attachment-only.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-text-attachment.eml b/commons-email2-core/src/test/resources/eml/multipart-text-attachment.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/multipart-text-attachment.eml
copy to commons-email2-core/src/test/resources/eml/multipart-text-attachment.eml
diff --git a/commons-email-javax/src/test/resources/eml/outofmemory-no-header-seperation.eml b/commons-email2-core/src/test/resources/eml/outofmemory-no-header-seperation.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/outofmemory-no-header-seperation.eml
copy to commons-email2-core/src/test/resources/eml/outofmemory-no-header-seperation.eml
diff --git a/commons-email-javax/src/test/resources/eml/simple-reply.eml b/commons-email2-core/src/test/resources/eml/simple-reply.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/simple-reply.eml
copy to commons-email2-core/src/test/resources/eml/simple-reply.eml
diff --git a/commons-email-javax/src/test/resources/eml/simple.eml b/commons-email2-core/src/test/resources/eml/simple.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/simple.eml
copy to commons-email2-core/src/test/resources/eml/simple.eml
diff --git a/commons-email-javax/src/test/resources/html/www.apache.org.html b/commons-email2-core/src/test/resources/html/www.apache.org.html
similarity index 100%
copy from commons-email-javax/src/test/resources/html/www.apache.org.html
copy to commons-email2-core/src/test/resources/html/www.apache.org.html
diff --git a/commons-email-javax/src/test/resources/images/asf_logo_wide.gif b/commons-email2-core/src/test/resources/images/asf_logo_wide.gif
similarity index 100%
copy from commons-email-javax/src/test/resources/images/asf_logo_wide.gif
copy to commons-email2-core/src/test/resources/images/asf_logo_wide.gif
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.gif b/commons-email2-core/src/test/resources/images/contentTypeTest.gif
similarity index 100%
copy from commons-email-javax/src/test/resources/images/contentTypeTest.gif
copy to commons-email2-core/src/test/resources/images/contentTypeTest.gif
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.jpg b/commons-email2-core/src/test/resources/images/contentTypeTest.jpg
similarity index 100%
copy from commons-email-javax/src/test/resources/images/contentTypeTest.jpg
copy to commons-email2-core/src/test/resources/images/contentTypeTest.jpg
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.png b/commons-email2-core/src/test/resources/images/contentTypeTest.png
similarity index 100%
copy from commons-email-javax/src/test/resources/images/contentTypeTest.png
copy to commons-email2-core/src/test/resources/images/contentTypeTest.png
diff --git a/commons-email-javax/src/test/resources/images/logos/maven-feather.png b/commons-email2-core/src/test/resources/images/logos/maven-feather.png
similarity index 100%
copy from commons-email-javax/src/test/resources/images/logos/maven-feather.png
copy to commons-email2-core/src/test/resources/images/logos/maven-feather.png
diff --git a/commons-email-javax/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/commons-email2-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
similarity index 100%
copy from commons-email-javax/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
copy to commons-email2-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
diff --git a/commons-email-javax/pom.xml b/commons-email2-jakarta/pom.xml
similarity index 83%
copy from commons-email-javax/pom.xml
copy to commons-email2-jakarta/pom.xml
index 12966cd..0e04c27 100644
--- a/commons-email-javax/pom.xml
+++ b/commons-email2-jakarta/pom.xml
@@ -24,16 +24,34 @@
     <relativePath>../</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
-  <artifactId>commons-email2-javax</artifactId>
-  <name>Apache Commons Email for Javax</name>
+  <artifactId>commons-email2-jakarta</artifactId>
+  <name>Apache Commons Email for Jakarta</name>
 
   <inceptionYear>2001</inceptionYear>
   <description>Apache Commons Email provides an API for sending email, simplifying the JavaMail Javax API.</description>
 
   <dependencies>
+    <dependency>    
+      <groupId>org.apache.commons</groupId>    
+      <artifactId>commons-email2-core</artifactId>    
+      <version>2.0.0-M1-SNAPSHOT</version>
+    </dependency>
+    <dependency>    
+      <groupId>com.sun.mail</groupId>    
+      <artifactId>jakarta.mail</artifactId>    
+      <version>2.0.1</version>
+    </dependency>
     <dependency>
-      <groupId>com.sun.mail</groupId>
-      <artifactId>jakarta.mail</artifactId>
+      <groupId>com.github.davidmoten</groupId>
+      <artifactId>subethasmtp</artifactId>
+      <version>6.0.7</version>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>com.sun.mail</groupId>
+          <artifactId>jakarta.mail</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
@@ -55,17 +73,6 @@
       <artifactId>commons-io</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.subethamail</groupId>
-      <artifactId>subethasmtp</artifactId>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>javax.mail</groupId>
-          <artifactId>mail</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
@@ -75,6 +82,7 @@
 
   <properties>
     <commons.parent.dir>${basedir}/..</commons.parent.dir>
+    <commons.module.name>org.apache.commons.mail2.jakarta</commons.module.name>
   </properties>
 
   <build>
diff --git a/commons-email-javax/src/conf/spotbugs-exclude-filter.xml b/commons-email2-jakarta/src/conf/spotbugs-exclude-filter.xml
similarity index 81%
copy from commons-email-javax/src/conf/spotbugs-exclude-filter.xml
copy to commons-email2-jakarta/src/conf/spotbugs-exclude-filter.xml
index 918b341..36af18b 100644
--- a/commons-email-javax/src/conf/spotbugs-exclude-filter.xml
+++ b/commons-email2-jakarta/src/conf/spotbugs-exclude-filter.xml
@@ -42,16 +42,16 @@
   </Match>
 
   <!-- False positives in Java 11+ 
-    Error:  Load of known null value in org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver.resolve(String, boolean)
-     [org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver]
+    Error:  Load of known null value in org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver.resolve(String, boolean)
+     [org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver]
      At DataSourceClassPathResolver.java:[line 115] NP_LOAD_OF_KNOWN_NULL_VALUE
-    Error:  Redundant nullcheck of inputStream which is known to be null in org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver.resolve(String, boolean)
-     [org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver]
+    Error:  Redundant nullcheck of inputStream which is known to be null in org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver.resolve(String, boolean)
+     [org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver]
      Redundant null check at DataSourceClassPathResolver.java:[line 115] RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE
   -->
   <Match>
-    <Class name="org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver" />
-    <Method name="resolve" params="java.lang.String, boolean" returns="javax.activation.DataSource"/>
+    <Class name="org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver" />
+    <Method name="resolve" params="java.lang.String, boolean" returns="jakarta.activation.DataSource"/>
     <Or>
       <Bug pattern="NP_LOAD_OF_KNOWN_NULL_VALUE" />
       <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE" />
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DataSourceResolver.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/DataSourceResolver.java
similarity index 95%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DataSourceResolver.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/DataSourceResolver.java
index 16fd84f..b3f95cc 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DataSourceResolver.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/DataSourceResolver.java
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.io.IOException;
 
-import javax.activation.DataSource;
+import jakarta.activation.DataSource;
 
 /**
  * Creates a {@code DataSource} based on an URL.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DefaultAuthenticator.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/DefaultAuthenticator.java
similarity index 93%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DefaultAuthenticator.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/DefaultAuthenticator.java
index 5eacdd7..7abdd5f 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DefaultAuthenticator.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/DefaultAuthenticator.java
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
-import javax.mail.Authenticator;
-import javax.mail.PasswordAuthentication;
+import jakarta.mail.Authenticator;
+import jakarta.mail.PasswordAuthentication;
 
 /**
  * This is a very simple authentication object that can be used for any transport needing basic userName and password type authentication.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/Email.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/Email.java
similarity index 98%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/Email.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/Email.java
index c8fee0c..29ef113 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/Email.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/Email.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
@@ -28,22 +28,25 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Properties;
 
-import javax.mail.Authenticator;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.Store;
-import javax.mail.Transport;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.internet.MimeUtility;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
-import org.apache.commons.mail2.javax.util.IDNEmailAddressConverter;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+import org.apache.commons.mail2.jakarta.util.IDNEmailAddressConverter;
+
+import jakarta.mail.Authenticator;
+import jakarta.mail.Message;
+import jakarta.mail.MessagingException;
+import jakarta.mail.Session;
+import jakarta.mail.Store;
+import jakarta.mail.Transport;
+import jakarta.mail.internet.AddressException;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimeMultipart;
+import jakarta.mail.internet.MimeUtility;
 
 /**
  * The abstract class for all email messages. This class sets the sender's email, name, receiver's email, name, subject, and send date.
@@ -60,13 +63,6 @@ public abstract class Email {
      */
     private static final InternetAddress[] EMPTY_INTERNET_ADDRESS_ARRAY = {};
 
-    /**
-     * Constructs a new instance.
-     */
-    public Email() {
-        // empty
-    }
-
     /**
      * The email message to send.
      */
@@ -163,7 +159,7 @@ public abstract class Email {
      *
      * X-Mailer: Sendmail, X-Priority: 1( highest ) or 2( high ) 3( normal ) 4( low ) and 5( lowest ) Disposition-Notification-To: user@domain.net
      */
-    private Map<String, String> headers = new HashMap<>();
+    private final Map<String, String> headers = new HashMap<>();
 
     /**
      * Whether to use POP3 before SMTP, and if so the settings.
@@ -240,6 +236,13 @@ public abstract class Email {
      */
     private Session session;
 
+    /**
+     * Constructs a new instance.
+     */
+    public Email() {
+        // empty
+    }
+
     /**
      * Adds a blind BCC recipient to the email. The email address will also be used as the personal name. The name will be encoded by the charset of
      * {@link #setCharset(String)}. If it is not set, it will be encoded using the Java platform's default charset (UTF-16) if it contains non-ASCII characters;
@@ -1118,7 +1121,7 @@ public abstract class Email {
      * @param collection collection of {@code InternetAddress} objects
      * @return An Email.
      * @throws EmailException Indicates an invalid email address
-     * @see javax.mail.internet.InternetAddress
+     * @see jakarta.mail.internet.InternetAddress
      * @since 1.0
      */
     public Email setBcc(final Collection<InternetAddress> collection) throws EmailException {
@@ -1158,7 +1161,7 @@ public abstract class Email {
      * @param collection collection of {@code InternetAddress} objects.
      * @return An Email.
      * @throws EmailException Indicates an invalid email address.
-     * @see javax.mail.internet.InternetAddress
+     * @see jakarta.mail.internet.InternetAddress
      * @since 1.0
      */
     public Email setCc(final Collection<InternetAddress> collection) throws EmailException {
@@ -1359,7 +1362,7 @@ public abstract class Email {
     /**
      * Sets a mail Session object from a JNDI directory.
      *
-     * @param jndiName name of JNDI resource (javax.mail.Session type), resource if searched in java:comp/env if name does not start with "java:"
+     * @param jndiName name of JNDI resource (jakarta.mail.Session type), resource if searched in java:comp/env if name does not start with "java:"
      * @throws IllegalArgumentException if the JNDI name is null or empty
      * @throws NamingException          if the resource cannot be retrieved from JNDI directory
      * @since 1.1
@@ -1472,7 +1475,7 @@ public abstract class Email {
      * @param collection collection of {@code InternetAddress} objects
      * @return An Email.
      * @throws EmailException Indicates an invalid email address
-     * @see javax.mail.internet.InternetAddress
+     * @see jakarta.mail.internet.InternetAddress
      * @since 1.1
      */
     public Email setReplyTo(final Collection<InternetAddress> collection) throws EmailException {
@@ -1484,7 +1487,7 @@ public abstract class Email {
     /**
      * Sets whether the email is partially send in case of invalid addresses.
      * <p>
-     * In case the mail server rejects an address as invalid, the call to {@link #send()} may throw a {@link javax.mail.SendFailedException}, even if partial
+     * In case the mail server rejects an address as invalid, the call to {@link #send()} may throw a {@link jakarta.mail.SendFailedException}, even if partial
      * send mode is enabled (emails to valid addresses will be transmitted). In case the email server does not reject invalid addresses immediately, but return
      * a bounce message, no exception will be thrown by the {@link #send()} method.
      * </p>
@@ -1649,7 +1652,7 @@ public abstract class Email {
      * @param collection collection of {@code InternetAddress} objects.
      * @return An Email.
      * @throws EmailException Indicates an invalid email address.
-     * @see javax.mail.internet.InternetAddress
+     * @see jakarta.mail.internet.InternetAddress
      * @since 1.0
      */
     public Email setTo(final Collection<InternetAddress> collection) throws EmailException {
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailAttachment.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/EmailAttachment.java
similarity index 94%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailAttachment.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/EmailAttachment.java
index e992deb..09fba21 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailAttachment.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/EmailAttachment.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.net.URL;
 
@@ -26,10 +26,10 @@ import java.net.URL;
 public class EmailAttachment {
 
     /** Definition of the part being an attachment. */
-    public static final String ATTACHMENT = javax.mail.Part.ATTACHMENT;
+    public static final String ATTACHMENT = jakarta.mail.Part.ATTACHMENT;
 
     /** Definition of the part being inline. */
-    public static final String INLINE = javax.mail.Part.INLINE;
+    public static final String INLINE = jakarta.mail.Part.INLINE;
 
     /** The name of this attachment. */
     private String name = "";
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/EmailConstants.java
similarity index 98%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/EmailConstants.java
index 7a66333..e2f95f9 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/EmailConstants.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.nio.charset.StandardCharsets;
 import java.time.Duration;
@@ -29,12 +29,6 @@ import java.time.Duration;
  */
 public final class EmailConstants {
 
-    
-
-    
-
-    // Charset constants
-
     /** Charset constant for koi8-r */
     public static final String KOI8_R = "koi8-r";
 
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/HtmlEmail.java
similarity index 95%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/HtmlEmail.java
index 3ce078f..00b4294 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/HtmlEmail.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.io.File;
 import java.io.IOException;
@@ -25,14 +25,17 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-import javax.activation.FileDataSource;
-import javax.activation.URLDataSource;
-import javax.mail.BodyPart;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMultipart;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+
+import jakarta.activation.DataHandler;
+import jakarta.activation.DataSource;
+import jakarta.activation.FileDataSource;
+import jakarta.activation.URLDataSource;
+import jakarta.mail.BodyPart;
+import jakarta.mail.MessagingException;
+import jakarta.mail.internet.MimeBodyPart;
+import jakarta.mail.internet.MimeMultipart;
 
 /**
  * An HTML multipart email.
@@ -173,7 +176,7 @@ public class HtmlEmail extends MultiPartEmail {
     /**
      * Embedded images Map&lt;String, InlineImage&gt; where the key is the user-defined image name.
      */
-    private Map<String, InlineImage> inlineEmbeds = new HashMap<>();
+    private final Map<String, InlineImage> inlineEmbeds = new HashMap<>();
 
     /**
      * Constructs a new instance.
@@ -347,7 +350,7 @@ public class HtmlEmail extends MultiPartEmail {
      *
      * @param file The {@code File} object to embed
      * @return A String with the Content-ID of the file.
-     * @throws EmailException when the supplied {@code File} cannot be used; also see {@link javax.mail.internet.MimeBodyPart} for definitions
+     * @throws EmailException when the supplied {@code File} cannot be used; also see {@link jakarta.mail.internet.MimeBodyPart} for definitions
      *
      * @see #embed(File, String)
      * @since 1.1
@@ -373,7 +376,7 @@ public class HtmlEmail extends MultiPartEmail {
      * @param cid  the Content-ID to use for the embedded {@code File}
      * @return A String with the Content-ID of the file.
      * @throws EmailException when the supplied {@code File} cannot be used or if the file has already been embedded; also see
-     *                        {@link javax.mail.internet.MimeBodyPart} for definitions
+     *                        {@link jakarta.mail.internet.MimeBodyPart} for definitions
      * @since 1.1
      */
     public String embed(final File file, final String cid) throws EmailException {
@@ -427,7 +430,7 @@ public class HtmlEmail extends MultiPartEmail {
      * @param urlString String representation of the URL.
      * @param name      The name that will be set in the file name header field.
      * @return A String with the Content-ID of the URL.
-     * @throws EmailException when URL supplied is invalid or if {@code name} is null or empty; also see {@link javax.mail.internet.MimeBodyPart} for
+     * @throws EmailException when URL supplied is invalid or if {@code name} is null or empty; also see {@link jakarta.mail.internet.MimeBodyPart} for
      *                        definitions
      *
      * @see #embed(URL, String)
@@ -463,7 +466,7 @@ public class HtmlEmail extends MultiPartEmail {
      * @param url  The URL of the file.
      * @param name The name that will be set in the file name header field.
      * @return A String with the Content-ID of the file.
-     * @throws EmailException when URL supplied is invalid or if {@code name} is null or empty; also see {@link javax.mail.internet.MimeBodyPart} for
+     * @throws EmailException when URL supplied is invalid or if {@code name} is null or empty; also see {@link jakarta.mail.internet.MimeBodyPart} for
      *                        definitions
      * @since 1.0
      */
@@ -519,7 +522,7 @@ public class HtmlEmail extends MultiPartEmail {
      *
      * @param html A String.
      * @return An HtmlEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public HtmlEmail setHtmlMsg(final String html) throws EmailException {
@@ -537,7 +540,7 @@ public class HtmlEmail extends MultiPartEmail {
      *
      * @param msg the message text to use
      * @return this {@code HtmlEmail}
-     * @throws EmailException if msg is null or empty; see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException if msg is null or empty; see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     @Override
@@ -554,7 +557,7 @@ public class HtmlEmail extends MultiPartEmail {
      *
      * @param text A String.
      * @return An HtmlEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public HtmlEmail setTextMsg(final String text) throws EmailException {
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/ImageHtmlEmail.java
similarity index 96%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/ImageHtmlEmail.java
index 9728867..164c815 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/ImageHtmlEmail.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -22,7 +22,10 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.activation.DataSource;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+
+import jakarta.activation.DataSource;
 
 /**
  * <p>
@@ -73,7 +76,7 @@ public class ImageHtmlEmail extends HtmlEmail {
     /**
      * Does the work of actually building the MimeMessage.
      *
-     * @see org.apache.commons.mail2.javax.HtmlEmail#buildMimeMessage()
+     * @see org.apache.commons.mail2.jakarta.HtmlEmail#buildMimeMessage()
      * @throws EmailException building the MimeMessage failed
      */
     @Override
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/MultiPartEmail.java
similarity index 90%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/MultiPartEmail.java
index 4120edf..57df39b 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/MultiPartEmail.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.io.File;
 import java.io.IOException;
@@ -26,19 +26,21 @@ import java.nio.file.OpenOption;
 import java.nio.file.Path;
 import java.util.Objects;
 
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-import javax.activation.FileDataSource;
-import javax.activation.FileTypeMap;
-import javax.activation.URLDataSource;
-import javax.mail.BodyPart;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.internet.MimePart;
-import javax.mail.internet.MimeUtility;
-
-import org.apache.commons.mail2.javax.activation.PathDataSource;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+import org.apache.commons.mail2.jakarta.activation.PathDataSource;
+
+import jakarta.activation.DataHandler;
+import jakarta.activation.DataSource;
+import jakarta.activation.FileDataSource;
+import jakarta.activation.FileTypeMap;
+import jakarta.activation.URLDataSource;
+import jakarta.mail.BodyPart;
+import jakarta.mail.MessagingException;
+import jakarta.mail.internet.MimeBodyPart;
+import jakarta.mail.internet.MimeMultipart;
+import jakarta.mail.internet.MimePart;
+import jakarta.mail.internet.MimeUtility;
 
 /**
  * A multipart email.
@@ -80,7 +82,7 @@ public class MultiPartEmail extends Email {
      *
      * @param multipart The MimeMultipart.
      * @return An Email.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public Email addPart(final MimeMultipart multipart) throws EmailException {
@@ -118,7 +120,7 @@ public class MultiPartEmail extends Email {
      * @param partContent     The content.
      * @param partContentType The content type.
      * @return An Email.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public Email addPart(final String partContent, final String partContentType) throws EmailException {
@@ -140,7 +142,7 @@ public class MultiPartEmail extends Email {
      * @param name        The name field for the attachment.
      * @param description A description for the attachment.
      * @return A MultiPartEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public MultiPartEmail attach(final DataSource dataSource, final String name, final String description) throws EmailException {
@@ -162,7 +164,7 @@ public class MultiPartEmail extends Email {
      * @param description A description for the attachment.
      * @param disposition Either mixed or inline.
      * @return A MultiPartEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public MultiPartEmail attach(final DataSource dataSource, String name, final String description, final String disposition) throws EmailException {
@@ -189,7 +191,7 @@ public class MultiPartEmail extends Email {
      *
      * @param attachment An EmailAttachment.
      * @return A MultiPartEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public MultiPartEmail attach(final EmailAttachment attachment) throws EmailException {
@@ -219,7 +221,7 @@ public class MultiPartEmail extends Email {
      *
      * @param file A file attachment
      * @return A MultiPartEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.3
      */
     public MultiPartEmail attach(final File file) throws EmailException {
@@ -240,7 +242,7 @@ public class MultiPartEmail extends Email {
      * @param file    A file attachment.
      * @param options options for opening file streams.
      * @return A MultiPartEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.6.0
      */
     public MultiPartEmail attach(final Path file, final OpenOption... options) throws EmailException {
@@ -263,7 +265,7 @@ public class MultiPartEmail extends Email {
      * @param name        The name field for the attachment.
      * @param description A description for the attachment.
      * @return A MultiPartEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public MultiPartEmail attach(final URL url, final String name, final String description) throws EmailException {
@@ -278,7 +280,7 @@ public class MultiPartEmail extends Email {
      * @param description A description for the attachment.
      * @param disposition Either mixed or inline.
      * @return A MultiPartEmail.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     public MultiPartEmail attach(final URL url, final String name, final String description, final String disposition) throws EmailException {
@@ -444,7 +446,7 @@ public class MultiPartEmail extends Email {
      *
      * @param msg A String.
      * @return An Email.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     @Override
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/SimpleEmail.java
similarity index 88%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/SimpleEmail.java
index 023fe58..28090ce 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/SimpleEmail.java
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
+
+import org.apache.commons.mail2.core.EmailException;
 
 /**
  * Sends simple Internet email messages without attachments.
@@ -35,7 +37,7 @@ public class SimpleEmail extends Email {
      *
      * @param msg A String.
      * @return An Email.
-     * @throws EmailException see javax.mail.internet.MimeBodyPart for definitions
+     * @throws EmailException see jakarta.mail.internet.MimeBodyPart for definitions
      * @since 1.0
      */
     @Override
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/InputStreamDataSource.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/InputStreamDataSource.java
similarity index 97%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/InputStreamDataSource.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/InputStreamDataSource.java
index 189ff38..9b4e4ea 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/InputStreamDataSource.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/InputStreamDataSource.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.commons.mail2.javax.activation;
+package org.apache.commons.mail2.jakarta.activation;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
-import javax.activation.DataSource;
+import jakarta.activation.DataSource;
 
 /**
  * A JavaBeans Activation Framework {@link DataSource} specialized for {@link InputStream}.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/PathDataSource.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/PathDataSource.java
similarity index 92%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/PathDataSource.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/PathDataSource.java
index 6174b4b..32b3eee 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/PathDataSource.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/PathDataSource.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.mail2.javax.activation;
+package org.apache.commons.mail2.jakarta.activation;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,16 +25,16 @@ import java.nio.file.OpenOption;
 import java.nio.file.Path;
 import java.util.Objects;
 
-import javax.activation.DataSource;
-import javax.activation.FileTypeMap;
-import javax.activation.MimetypesFileTypeMap;
+import jakarta.activation.DataSource;
+import jakarta.activation.FileTypeMap;
+import jakarta.activation.MimetypesFileTypeMap;
 
 /**
  * A JavaBeans Activation Framework {@link DataSource} that encapsulates a {@link Path}. It provides data typing services via a {@link FileTypeMap} object.
  *
- * @see javax.activation.DataSource
- * @see javax.activation.FileTypeMap
- * @see javax.activation.MimetypesFileTypeMap
+ * @see jakarta.activation.DataSource
+ * @see jakarta.activation.FileTypeMap
+ * @see jakarta.activation.MimetypesFileTypeMap
  *
  * @since 1.6.0
  */
@@ -115,7 +115,7 @@ public final class PathDataSource implements DataSource {
      * Gets the <em>name</em> of this object. The FileDataSource will return the file name of the object.
      *
      * @return the name of the object or null.
-     * @see javax.activation.DataSource
+     * @see jakarta.activation.DataSource
      */
     @Override
     public String getName() {
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/package-info.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/package-info.java
similarity index 94%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/package-info.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/package-info.java
index 8da05a2..55027cf 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/package-info.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/activation/package-info.java
@@ -18,4 +18,4 @@
 /**
  * Contains JavaBeans Activation Framework implementations.
  */
-package org.apache.commons.mail2.javax.activation;
+package org.apache.commons.mail2.jakarta.activation;
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/package-info.java
similarity index 95%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/package-info.java
index 6097b1c..1d2c2fa 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Commons-Email aims to provide a API for sending email. It is built on top of the Java Mail API, which it aims to simplify. All help is gratefully received.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceBaseResolver.java
similarity index 95%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceBaseResolver.java
index bc782b2..438255c 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceBaseResolver.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
-import org.apache.commons.mail2.javax.DataSourceResolver;
+import org.apache.commons.mail2.jakarta.DataSourceResolver;
 
 /**
  * Abstract class for resolvers.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceClassPathResolver.java
similarity index 96%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceClassPathResolver.java
index ab0a46a..8b1f1aa 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceClassPathResolver.java
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 
-import javax.activation.DataSource;
-import javax.activation.FileTypeMap;
-import javax.mail.util.ByteArrayDataSource;
+import jakarta.activation.DataSource;
+import jakarta.activation.FileTypeMap;
+import jakarta.mail.util.ByteArrayDataSource;
 
 /**
  * Creates a {@code DataSource} based on an class path.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceCompositeResolver.java
similarity index 95%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceCompositeResolver.java
index a08599c..5ce961c 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceCompositeResolver.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import java.io.IOException;
 
-import javax.activation.DataSource;
+import org.apache.commons.mail2.jakarta.DataSourceResolver;
 
-import org.apache.commons.mail2.javax.DataSourceResolver;
+import jakarta.activation.DataSource;
 
 /**
  * A composite data source resolver. It allows to resolve data sources coming from multiple locations such as the classpath, the file system or an URL.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceFileResolver.java
similarity index 95%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceFileResolver.java
index 2f993d6..85e0943 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceFileResolver.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import java.io.File;
 import java.io.IOException;
 
-import javax.activation.DataSource;
-import javax.activation.FileDataSource;
+import jakarta.activation.DataSource;
+import jakarta.activation.FileDataSource;
 
 /**
  * Creates a {@code DataSource} based on a File. The implementation also resolves file resources.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourcePathResolver.java
similarity index 94%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourcePathResolver.java
index eac564e..606f8b4 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourcePathResolver.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import java.io.IOException;
 import java.nio.file.Files;
@@ -22,10 +22,10 @@ import java.nio.file.OpenOption;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import javax.activation.DataSource;
-import javax.activation.FileTypeMap;
+import org.apache.commons.mail2.jakarta.activation.PathDataSource;
 
-import org.apache.commons.mail2.javax.activation.PathDataSource;
+import jakarta.activation.DataSource;
+import jakarta.activation.FileTypeMap;
 
 /**
  * Creates a {@link DataSource} based on a {@link Path}. The implementation also resolves file resources.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceUrlResolver.java
similarity index 96%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceUrlResolver.java
index 6721d13..1207646 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/DataSourceUrlResolver.java
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 
-import javax.activation.DataSource;
-import javax.activation.URLDataSource;
+import jakarta.activation.DataSource;
+import jakarta.activation.URLDataSource;
 
 /**
  * Creates a {@code DataSource} based on an URL.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/package-info.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/package-info.java
similarity index 95%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/package-info.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/package-info.java
index 633b4d0..3574030 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/package-info.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/resolver/package-info.java
@@ -22,4 +22,4 @@
  * <li>URL</li>
  * </ul>
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/IDNEmailAddressConverter.java
similarity index 97%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/IDNEmailAddressConverter.java
index 870d551..d73664a 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/IDNEmailAddressConverter.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.util;
+package org.apache.commons.mail2.jakarta.util;
 
 import java.net.IDN;
 import java.util.function.Function;
 
-import javax.mail.internet.InternetAddress;
+import jakarta.mail.internet.InternetAddress;
 
 /**
  * Converts email addresses containing International Domain Names into an ASCII representation suitable for sending an email.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageParser.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/MimeMessageParser.java
similarity index 95%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageParser.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/MimeMessageParser.java
index ad5964d..3475b3a 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageParser.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/MimeMessageParser.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.util;
+package org.apache.commons.mail2.jakarta.util;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -26,21 +26,21 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import javax.activation.DataSource;
-import javax.mail.Address;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Multipart;
-import javax.mail.Part;
-import javax.mail.internet.ContentType;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimePart;
-import javax.mail.internet.MimeUtility;
-import javax.mail.internet.ParseException;
-
-import org.apache.commons.mail2.javax.activation.InputStreamDataSource;
+import org.apache.commons.mail2.jakarta.activation.InputStreamDataSource;
+
+import jakarta.activation.DataSource;
+import jakarta.mail.Address;
+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;
 
 /**
  * Parses a MimeMessage and stores the individual parts such a plain text, HTML text and attachments.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageUtils.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/MimeMessageUtils.java
similarity index 96%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageUtils.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/MimeMessageUtils.java
index 1dc6155..ac42385 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageUtils.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/MimeMessageUtils.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.util;
+package org.apache.commons.mail2.jakarta.util;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -27,10 +27,10 @@ import java.nio.file.Files;
 import java.nio.file.OpenOption;
 import java.nio.file.Path;
 
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.internet.MimeMessage;
-import javax.mail.util.SharedByteArrayInputStream;
+import jakarta.mail.MessagingException;
+import jakarta.mail.Session;
+import jakarta.mail.internet.MimeMessage;
+import jakarta.mail.util.SharedByteArrayInputStream;
 
 /**
  * Creates {@link MimeMessage} instances and other helper methods.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/package-info.java b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/package-info.java
similarity index 94%
copy from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/package-info.java
copy to commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/package-info.java
index 9c49feb..bf09f6e 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/package-info.java
+++ b/commons-email2-jakarta/src/main/java/org/apache/commons/mail2/jakarta/util/package-info.java
@@ -17,4 +17,4 @@
 /**
  * This package provides some utility classes.
  */
-package org.apache.commons.mail2.javax.util;
+package org.apache.commons.mail2.jakarta.util;
diff --git a/commons-email-javax/src/main/resources/META-INF/mime.types b/commons-email2-jakarta/src/main/resources/META-INF/mime.types
similarity index 100%
copy from commons-email-javax/src/main/resources/META-INF/mime.types
copy to commons-email2-jakarta/src/main/resources/META-INF/mime.types
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/AbstractEmailTest.java
similarity index 96%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/AbstractEmailTest.java
index 2f8e53a..40bf41d 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/AbstractEmailTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -30,20 +30,21 @@ import java.util.Date;
 import java.util.Enumeration;
 import java.util.List;
 
-import javax.activation.DataHandler;
-import javax.mail.Header;
-import javax.mail.MessagingException;
-import javax.mail.Multipart;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.mail2.javax.settings.EmailConfiguration;
+import org.apache.commons.mail2.jakarta.settings.EmailConfiguration;
+import org.apache.commons.mail2.jakarta.util.MimeMessageUtils;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.mockito.Mockito;
 import org.subethamail.wiser.Wiser;
 import org.subethamail.wiser.WiserMessage;
 
+import jakarta.activation.DataHandler;
+import jakarta.mail.Header;
+import jakarta.mail.MessagingException;
+import jakarta.mail.Multipart;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeMessage;
+
 /**
  * Base test case for Email test classes.
  *
@@ -122,8 +123,7 @@ public abstract class AbstractEmailTest {
         if (fakeMailServer == null || isMailServerStopped(fakeMailServer)) {
             mailServerPort++;
 
-            fakeMailServer = new Wiser();
-            fakeMailServer.setPort(getMailServerPort());
+            fakeMailServer = Wiser.port(getMailServerPort());
             fakeMailServer.start();
 
             assertFalse(isMailServerStopped(fakeMailServer), "fake mail server didn't start");
@@ -243,7 +243,7 @@ public abstract class AbstractEmailTest {
         final int currCounter = fileNameCounter++ % 10;
         final String emailFileName = "email" + new Date().getTime() + "-" + currCounter + ".eml";
         final File emailFile = new File(emailOutputDir, emailFileName);
-        EmailUtils.writeMimeMessage(emailFile, email.getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(email.getMimeMessage(), emailFile);
     }
 
     /**
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/DefaultAuthenticatorTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/DefaultAuthenticatorTest.java
similarity index 95%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/DefaultAuthenticatorTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/DefaultAuthenticatorTest.java
index 0f84c3a..4b2bae0 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/DefaultAuthenticatorTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/DefaultAuthenticatorTest.java
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import javax.mail.PasswordAuthentication;
-
 import org.junit.jupiter.api.Test;
 
+import jakarta.mail.PasswordAuthentication;
+
 /**
  * JUnit test case for DefaultAuthenticator Class.
  *
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailAttachmentTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailAttachmentTest.java
similarity index 98%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailAttachmentTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailAttachmentTest.java
index 6dfdf2c..2743a15 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailAttachmentTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailAttachmentTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailConstantsTest.java
similarity index 95%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailConstantsTest.java
index 174791e..2eb1dd6 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailConstantsTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 public class EmailConstantsTest {
 
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailLiveTest.java
similarity index 86%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailLiveTest.java
index 0b7ef58..8386f63 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailLiveTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -25,19 +25,21 @@ import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.activation.DataSource;
-import javax.activation.URLDataSource;
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.internet.MimeMessage;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.mail2.javax.resolver.DataSourceUrlResolver;
-import org.apache.commons.mail2.javax.settings.EmailConfiguration;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.jakarta.resolver.DataSourceUrlResolver;
+import org.apache.commons.mail2.jakarta.settings.EmailConfiguration;
+import org.apache.commons.mail2.jakarta.util.MimeMessageUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import jakarta.activation.DataSource;
+import jakarta.activation.URLDataSource;
+import jakarta.mail.Session;
+import jakarta.mail.Transport;
+import jakarta.mail.internet.MimeMessage;
+
 /**
  * These are regression test sending REAL email to REAL mail servers using REAL recipients.
  *
@@ -122,10 +124,10 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setMsg(textMsg);
 
         // create a proper UTF-8 sequence for the text attachment (matching our default charset)
-        final DataSource attachment = new javax.mail.util.ByteArrayDataSource(textMsg.getBytes(StandardCharsets.UTF_8), "text/plain");
+        final DataSource attachment = new jakarta.mail.util.ByteArrayDataSource(textMsg.getBytes(StandardCharsets.UTF_8), "text/plain");
         email.attach(attachment, attachmentName, "Attachment in Greek");
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/correct-encoding.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/correct-encoding.eml"));
     }
 
     /**
@@ -140,7 +142,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setMsg("This is a test mail with a folded header value... :-)");
         email.addHeader("X-TestHeader", "This is a very long header value which should be folded into two lines, hopefully");
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/foldedheader.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/foldedheader.eml"));
     }
 
     /**
@@ -178,7 +180,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         htmlEmail1.setTextMsg(textMsg);
         htmlEmail1.setHtmlMsg(htmlMsg);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/htmlemail1.eml"), send(htmlEmail1).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(htmlEmail1).getMimeMessage(), new File("./target/test-emails/htmlemail1.eml"));
 
         // 2) text + html content + image as attachment
 
@@ -191,7 +193,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         htmlEmail2.setHtmlMsg(htmlMsg);
         htmlEmail2.attach(url, "Apache Logo", "The official Apache logo");
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/htmlemail2.eml"), send(htmlEmail2).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(htmlEmail2).getMimeMessage(), new File("./target/test-emails/htmlemail2.eml"));
 
         // 3) text + html content + inline image
 
@@ -205,7 +207,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         htmlEmail3.setTextMsg(textMsg);
         htmlEmail3.setHtmlMsg(htmlMsg);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/htmlemail3.eml"), send(htmlEmail3).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(htmlEmail3).getMimeMessage(), new File("./target/test-emails/htmlemail3.eml"));
 
         // 4) text + html content + inline image + attachment
 
@@ -219,7 +221,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         htmlEmail4.setHtmlMsg(htmlMsg);
         htmlEmail4.attach(attachment);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/htmlemail4.eml"), send(htmlEmail4).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(htmlEmail4).getMimeMessage(), new File("./target/test-emails/htmlemail4.eml"));
     }
 
     /**
@@ -239,7 +241,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setSubject("[testImageHtmlEmail] 1.Test: simple html content");
         email.setHtmlMsg(htmlMsg1);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/testImageHtmlEmailLocal.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/testImageHtmlEmailLocal.eml"));
     }
 
     /**
@@ -260,7 +262,7 @@ public class EmailLiveTest extends AbstractEmailTest {
             email.setSubject("[testImageHtmlEmail] 2.Test: complex html content");
             email.setHtmlMsg(htmlMsg);
 
-            EmailUtils.writeMimeMessage(new File("./target/test-emails/testImageHtmlEmailRemote.eml"), send(email).getMimeMessage());
+            MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/testImageHtmlEmailRemote.eml"));
         }
     }
 
@@ -276,7 +278,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setMsg("This is a test mail ... :-)");
         email.attach(new File("./src/test/resources/attachments/logo.pdf"));
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/multipart.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/multipart.eml"));
     }
 
     /**
@@ -291,7 +293,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setMsg("This is a test mail ... :-)");
         email.attach(Paths.get("./src/test/resources/attachments/logo.pdf"));
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/multipart.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/multipart.eml"));
     }
 
     /**
@@ -311,7 +313,7 @@ public class EmailLiveTest extends AbstractEmailTest {
 
         email.setSendPartial(true);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/partialmail.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/partialmail.eml"));
     }
 
     /**
@@ -364,7 +366,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setSubject("TestSimpleMail");
         email.setMsg("This is a test mail ... :-)");
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/simplemail.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/simplemail.eml"));
     }
 
 }
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailTest.java
similarity index 99%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailTest.java
index bb73ab7..185c189 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/EmailTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -38,17 +38,18 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
-import javax.mail.Message;
-import javax.mail.Session;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.internet.ParseException;
-
-import org.apache.commons.mail2.javax.mocks.MockEmailConcrete;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.jakarta.mocks.MockEmailConcrete;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import jakarta.mail.Message;
+import jakarta.mail.Session;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimeMultipart;
+import jakarta.mail.internet.ParseException;
+
 /**
  * JUnit test case for Email Class
  *
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/HtmlEmailTest.java
similarity index 97%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/HtmlEmailTest.java
index 4d2e8c9..b796736 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/HtmlEmailTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -28,17 +28,19 @@ import java.io.IOException;
 import java.net.URL;
 import java.util.List;
 
-import javax.activation.DataSource;
-import javax.activation.FileDataSource;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.mail2.javax.mocks.MockHtmlEmailConcrete;
-import org.apache.commons.mail2.javax.settings.EmailConfiguration;
-import org.apache.commons.mail2.javax.util.MimeMessageParser;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+import org.apache.commons.mail2.jakarta.mocks.MockHtmlEmailConcrete;
+import org.apache.commons.mail2.jakarta.settings.EmailConfiguration;
+import org.apache.commons.mail2.jakarta.util.MimeMessageParser;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import jakarta.activation.DataSource;
+import jakarta.activation.FileDataSource;
+import jakarta.mail.internet.MimeMessage;
+
 /**
  * JUnit test case for HtmlEmail Class.
  *
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/ImageHtmlEmailTest.java
similarity index 96%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/ImageHtmlEmailTest.java
index 5c5fb41..afe71b7 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/ImageHtmlEmailTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -31,20 +31,21 @@ import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.activation.DataSource;
-import javax.mail.internet.MimeMessage;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.mail2.javax.mocks.MockImageHtmlEmailConcrete;
-import org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver;
-import org.apache.commons.mail2.javax.resolver.DataSourceCompositeResolver;
-import org.apache.commons.mail2.javax.resolver.DataSourceUrlResolver;
-import org.apache.commons.mail2.javax.util.MimeMessageParser;
-import org.apache.commons.mail2.javax.util.MimeMessageUtils;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.jakarta.mocks.MockImageHtmlEmailConcrete;
+import org.apache.commons.mail2.jakarta.resolver.DataSourceClassPathResolver;
+import org.apache.commons.mail2.jakarta.resolver.DataSourceCompositeResolver;
+import org.apache.commons.mail2.jakarta.resolver.DataSourceUrlResolver;
+import org.apache.commons.mail2.jakarta.util.MimeMessageParser;
+import org.apache.commons.mail2.jakarta.util.MimeMessageUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import jakarta.activation.DataSource;
+import jakarta.mail.internet.MimeMessage;
+
 public class ImageHtmlEmailTest extends HtmlEmailTest {
 
     private static final class MockDataSourceClassPathResolver extends DataSourceClassPathResolver {
@@ -55,7 +56,7 @@ public class ImageHtmlEmailTest extends HtmlEmailTest {
 
         @Override
         public DataSource resolve(final String resourceLocation, final boolean isLenient) throws IOException {
-            final javax.mail.util.ByteArrayDataSource ds = (javax.mail.util.ByteArrayDataSource) super.resolve(resourceLocation, isLenient);
+            final jakarta.mail.util.ByteArrayDataSource ds = (jakarta.mail.util.ByteArrayDataSource) super.resolve(resourceLocation, isLenient);
             ds.setName(null);
             return ds;
         }
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InputStreamDataSourceTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InputStreamDataSourceTest.java
similarity index 95%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InputStreamDataSourceTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InputStreamDataSourceTest.java
index 7a4f230..5411310 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InputStreamDataSourceTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InputStreamDataSourceTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -24,7 +24,7 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.commons.mail2.javax.activation.InputStreamDataSource;
+import org.apache.commons.mail2.jakarta.activation.InputStreamDataSource;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InvalidAddressTest.java
similarity index 96%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InvalidAddressTest.java
index 5754340..c06206b 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InvalidAddressTest.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.util.stream.IntStream;
 
-import org.apache.commons.mail2.javax.mocks.MockEmailConcrete;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.jakarta.mocks.MockEmailConcrete;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidInternetAddressTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InvalidInternetAddressTest.java
similarity index 98%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidInternetAddressTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InvalidInternetAddressTest.java
index 0b83d85..df86df9 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidInternetAddressTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/InvalidInternetAddressTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -23,10 +23,10 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.nio.charset.StandardCharsets;
 import java.util.stream.IntStream;
 
-import javax.mail.internet.InternetAddress;
-
 import org.junit.jupiter.api.Test;
 
+import jakarta.mail.internet.InternetAddress;
+
 /**
  * JUnit test case demonstrating InternetAddress validation.
  *
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/MultiPartEmailTest.java
similarity index 96%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/MultiPartEmailTest.java
index 1bb6054..aad3b3d 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/MultiPartEmailTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -28,14 +28,16 @@ import java.nio.file.Path;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.activation.FileDataSource;
-import javax.activation.URLDataSource;
-import javax.mail.internet.MimeMultipart;
-
-import org.apache.commons.mail2.javax.mocks.MockMultiPartEmailConcrete;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+import org.apache.commons.mail2.jakarta.mocks.MockMultiPartEmailConcrete;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import jakarta.activation.FileDataSource;
+import jakarta.activation.URLDataSource;
+import jakarta.mail.internet.MimeMultipart;
+
 public class MultiPartEmailTest extends AbstractEmailTest {
 
     /** */
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/SendWithAttachmentsTest.java
similarity index 94%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/SendWithAttachmentsTest.java
index ab1c8b6..c8e56e2 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/SendWithAttachmentsTest.java
@@ -14,19 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 
-import javax.mail.internet.MimeUtility;
-
-import org.apache.commons.mail2.javax.mocks.MockHtmlEmailConcrete;
-import org.apache.commons.mail2.javax.settings.EmailConfiguration;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.jakarta.mocks.MockHtmlEmailConcrete;
+import org.apache.commons.mail2.jakarta.settings.EmailConfiguration;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import jakarta.mail.internet.MimeUtility;
+
 /**
  * JUnit test case verifying bugzilla issue 30973 is fixed.
  *
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/SimpleEmailTest.java
similarity index 95%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/SimpleEmailTest.java
index a930344..e168293 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/SimpleEmailTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax;
+package org.apache.commons.mail2.jakarta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -23,7 +23,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
-import org.apache.commons.mail2.javax.mocks.MockSimpleEmail;
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+import org.apache.commons.mail2.jakarta.mocks.MockSimpleEmail;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockEmailConcrete.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockEmailConcrete.java
similarity index 93%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockEmailConcrete.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockEmailConcrete.java
index 39dd063..266b9f6 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockEmailConcrete.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockEmailConcrete.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.mocks;
+package org.apache.commons.mail2.jakarta.mocks;
 
-import org.apache.commons.mail2.javax.Email;
+import org.apache.commons.mail2.jakarta.Email;
 
 /**
  * Concrete Implementation on the Abstract Email Class (used to allow testing only). Supplies getters for methods that normally only have setters.
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockHtmlEmailConcrete.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockHtmlEmailConcrete.java
similarity index 90%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockHtmlEmailConcrete.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockHtmlEmailConcrete.java
index 27b81a9..9f207bc 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockHtmlEmailConcrete.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockHtmlEmailConcrete.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.mocks;
+package org.apache.commons.mail2.jakarta.mocks;
 
 import java.io.IOException;
 
-import javax.mail.MessagingException;
+import org.apache.commons.mail2.jakarta.HtmlEmail;
 
-import org.apache.commons.mail2.javax.HtmlEmail;
+import jakarta.mail.MessagingException;
 
 /**
  * Extension of the HtmlEmail Class (used to allow testing only)
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockImageHtmlEmailConcrete.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockImageHtmlEmailConcrete.java
similarity index 89%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockImageHtmlEmailConcrete.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockImageHtmlEmailConcrete.java
index ece2d61..244b3cd 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockImageHtmlEmailConcrete.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockImageHtmlEmailConcrete.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.mocks;
+package org.apache.commons.mail2.jakarta.mocks;
 
 import java.io.IOException;
 
-import javax.mail.MessagingException;
+import org.apache.commons.mail2.jakarta.ImageHtmlEmail;
 
-import org.apache.commons.mail2.javax.ImageHtmlEmail;
+import jakarta.mail.MessagingException;
 
 /**
  * Extension of the ImageHtmlEmail Class (used to allow testing only)
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockMultiPartEmailConcrete.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockMultiPartEmailConcrete.java
similarity index 90%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockMultiPartEmailConcrete.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockMultiPartEmailConcrete.java
index 0bfe971..e92d1c1 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockMultiPartEmailConcrete.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockMultiPartEmailConcrete.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.mocks;
+package org.apache.commons.mail2.jakarta.mocks;
 
 import java.io.IOException;
 
-import javax.mail.MessagingException;
+import org.apache.commons.mail2.jakarta.MultiPartEmail;
 
-import org.apache.commons.mail2.javax.MultiPartEmail;
+import jakarta.mail.MessagingException;
 
 /**
  * Extension of MultiPartEmail Class (used to allow testing only)
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockSimpleEmail.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockSimpleEmail.java
similarity index 91%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockSimpleEmail.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockSimpleEmail.java
index 2f740c3..f8ad2ec 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockSimpleEmail.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/MockSimpleEmail.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.mocks;
+package org.apache.commons.mail2.jakarta.mocks;
 
-import org.apache.commons.mail2.javax.SimpleEmail;
+import org.apache.commons.mail2.jakarta.SimpleEmail;
 
 /**
  * Extension of SimpleEmail Class (used to allow testing only)
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/package-info.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/package-info.java
similarity index 94%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/package-info.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/package-info.java
index e9a7152..0e3c779 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/package-info.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/mocks/package-info.java
@@ -18,4 +18,4 @@
 /**
  * This package provides mock email implementations for testing.
  */
-package org.apache.commons.mail2.javax.mocks;
+package org.apache.commons.mail2.jakarta.mocks;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/AbstractDataSourceResolverTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/AbstractDataSourceResolverTest.java
similarity index 93%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/AbstractDataSourceResolverTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/AbstractDataSourceResolverTest.java
index df46084..ae3d066 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/AbstractDataSourceResolverTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/AbstractDataSourceResolverTest.java
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import java.io.IOException;
 import java.io.InputStream;
 
-import javax.activation.DataSource;
-
 import org.apache.commons.io.IOUtils;
 
+import jakarta.activation.DataSource;
+
 public abstract class AbstractDataSourceResolverTest {
 
     protected final int IMG_SIZE = 5866;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolverTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceClassPathResolverTest.java
similarity index 96%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolverTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceClassPathResolverTest.java
index 2c95ca7..8959710 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolverTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceClassPathResolverTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -23,7 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.io.IOException;
 
-import org.apache.commons.mail2.javax.DataSourceResolver;
+import org.apache.commons.mail2.jakarta.DataSourceResolver;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolverTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceCompositeResolverTest.java
similarity index 96%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolverTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceCompositeResolverTest.java
index 1402db0..15b821a 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolverTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceCompositeResolverTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -23,7 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.io.IOException;
 import java.net.URL;
 
-import org.apache.commons.mail2.javax.DataSourceResolver;
+import org.apache.commons.mail2.jakarta.DataSourceResolver;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolverTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceFileResolverTest.java
similarity index 95%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolverTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceFileResolverTest.java
index 08f308b..98266a6 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolverTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceFileResolverTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -24,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import java.io.File;
 import java.io.IOException;
 
-import org.apache.commons.mail2.javax.DataSourceResolver;
+import org.apache.commons.mail2.jakarta.DataSourceResolver;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolverTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourcePathResolverTest.java
similarity index 95%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolverTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourcePathResolverTest.java
index 6447331..ee325d3 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolverTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourcePathResolverTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -24,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import java.io.IOException;
 import java.nio.file.Paths;
 
-import org.apache.commons.mail2.javax.DataSourceResolver;
+import org.apache.commons.mail2.jakarta.DataSourceResolver;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolverTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceUrlResolverTest.java
similarity index 97%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolverTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceUrlResolverTest.java
index ed4d886..d325201 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolverTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/resolver/DataSourceUrlResolverTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.resolver;
+package org.apache.commons.mail2.jakarta.resolver;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -25,7 +25,7 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 
-import org.apache.commons.mail2.javax.DataSourceResolver;
+import org.apache.commons.mail2.jakarta.DataSourceResolver;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/EmailConfiguration.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/settings/EmailConfiguration.java
similarity index 95%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/EmailConfiguration.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/settings/EmailConfiguration.java
index 83e812e..4240f44 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/EmailConfiguration.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/settings/EmailConfiguration.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.settings;
+package org.apache.commons.mail2.jakarta.settings;
 
-import org.apache.commons.mail2.javax.EmailConstants;
+import org.apache.commons.mail2.jakarta.EmailConstants;
 
 /**
  * This class contains hard-coded configuration settings for the JUnit tests.
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/package-info.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/settings/package-info.java
similarity index 94%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/package-info.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/settings/package-info.java
index 2752a56..9b3e795 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/package-info.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/settings/package-info.java
@@ -18,4 +18,4 @@
 /**
  * This package provides the test mail server configuration.
  */
-package org.apache.commons.mail2.javax.settings;
+package org.apache.commons.mail2.jakarta.settings;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverterTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/util/IDNEmailAddressConverterTest.java
similarity index 97%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverterTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/util/IDNEmailAddressConverterTest.java
index e64d303..4899788 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverterTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/util/IDNEmailAddressConverterTest.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.util;
+package org.apache.commons.mail2.jakarta.util;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import javax.mail.internet.InternetAddress;
-
 import org.junit.jupiter.api.Test;
 
+import jakarta.mail.internet.InternetAddress;
+
 public class IDNEmailAddressConverterTest {
 
     private static final String AUSTRIAN_IDN_EMAIL_ADDRESS = "noreply@d\u00F6m\u00E4in.example";
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/MimeMessageParserTest.java b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/util/MimeMessageParserTest.java
similarity index 99%
copy from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/MimeMessageParserTest.java
copy to commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/util/MimeMessageParserTest.java
index b7454c2..d0c22f6 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/MimeMessageParserTest.java
+++ b/commons-email2-jakarta/src/test/java/org/apache/commons/mail2/jakarta/util/MimeMessageParserTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.mail2.javax.util;
+package org.apache.commons.mail2.jakarta.util;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -27,13 +27,13 @@ import java.nio.file.Paths;
 import java.util.List;
 import java.util.Properties;
 
-import javax.activation.DataSource;
-import javax.mail.Session;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.mail2.javax.HtmlEmail;
+import org.apache.commons.mail2.jakarta.HtmlEmail;
 import org.junit.jupiter.api.Test;
 
+import jakarta.activation.DataSource;
+import jakarta.mail.Session;
+import jakarta.mail.internet.MimeMessage;
+
 /**
  * Tests {@link MimeMessageParser}.
  */
diff --git a/commons-email-javax/src/test/resources/attachments/autoloadertest.html b/commons-email2-jakarta/src/test/resources/attachments/autoloadertest.html
similarity index 100%
copy from commons-email-javax/src/test/resources/attachments/autoloadertest.html
copy to commons-email2-jakarta/src/test/resources/attachments/autoloadertest.html
diff --git a/commons-email-javax/src/test/resources/attachments/classpathtest.html b/commons-email2-jakarta/src/test/resources/attachments/classpathtest.html
similarity index 100%
copy from commons-email-javax/src/test/resources/attachments/classpathtest.html
copy to commons-email2-jakarta/src/test/resources/attachments/classpathtest.html
diff --git a/commons-email-javax/src/test/resources/attachments/download_email.cgi.html b/commons-email2-jakarta/src/test/resources/attachments/download_email.cgi.html
similarity index 100%
copy from commons-email-javax/src/test/resources/attachments/download_email.cgi.html
copy to commons-email2-jakarta/src/test/resources/attachments/download_email.cgi.html
diff --git a/commons-email-javax/src/test/resources/attachments/logo.pdf b/commons-email2-jakarta/src/test/resources/attachments/logo.pdf
similarity index 100%
copy from commons-email-javax/src/test/resources/attachments/logo.pdf
copy to commons-email2-jakarta/src/test/resources/attachments/logo.pdf
diff --git a/commons-email-javax/src/test/resources/eml/attachment-only.eml b/commons-email2-jakarta/src/test/resources/eml/attachment-only.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/attachment-only.eml
copy to commons-email2-jakarta/src/test/resources/eml/attachment-only.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment-content-disposition.eml b/commons-email2-jakarta/src/test/resources/eml/html-attachment-content-disposition.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/html-attachment-content-disposition.eml
copy to commons-email2-jakarta/src/test/resources/eml/html-attachment-content-disposition.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment-encoded-filename.eml b/commons-email2-jakarta/src/test/resources/eml/html-attachment-encoded-filename.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/html-attachment-encoded-filename.eml
copy to commons-email2-jakarta/src/test/resources/eml/html-attachment-encoded-filename.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment.eml b/commons-email2-jakarta/src/test/resources/eml/html-attachment.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/html-attachment.eml
copy to commons-email2-jakarta/src/test/resources/eml/html-attachment.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-report.eml b/commons-email2-jakarta/src/test/resources/eml/multipart-report.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/multipart-report.eml
copy to commons-email2-jakarta/src/test/resources/eml/multipart-report.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-text-attachment-only.eml b/commons-email2-jakarta/src/test/resources/eml/multipart-text-attachment-only.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/multipart-text-attachment-only.eml
copy to commons-email2-jakarta/src/test/resources/eml/multipart-text-attachment-only.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-text-attachment.eml b/commons-email2-jakarta/src/test/resources/eml/multipart-text-attachment.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/multipart-text-attachment.eml
copy to commons-email2-jakarta/src/test/resources/eml/multipart-text-attachment.eml
diff --git a/commons-email-javax/src/test/resources/eml/outofmemory-no-header-seperation.eml b/commons-email2-jakarta/src/test/resources/eml/outofmemory-no-header-seperation.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/outofmemory-no-header-seperation.eml
copy to commons-email2-jakarta/src/test/resources/eml/outofmemory-no-header-seperation.eml
diff --git a/commons-email-javax/src/test/resources/eml/simple-reply.eml b/commons-email2-jakarta/src/test/resources/eml/simple-reply.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/simple-reply.eml
copy to commons-email2-jakarta/src/test/resources/eml/simple-reply.eml
diff --git a/commons-email-javax/src/test/resources/eml/simple.eml b/commons-email2-jakarta/src/test/resources/eml/simple.eml
similarity index 100%
copy from commons-email-javax/src/test/resources/eml/simple.eml
copy to commons-email2-jakarta/src/test/resources/eml/simple.eml
diff --git a/commons-email-javax/src/test/resources/html/www.apache.org.html b/commons-email2-jakarta/src/test/resources/html/www.apache.org.html
similarity index 100%
copy from commons-email-javax/src/test/resources/html/www.apache.org.html
copy to commons-email2-jakarta/src/test/resources/html/www.apache.org.html
diff --git a/commons-email-javax/src/test/resources/images/asf_logo_wide.gif b/commons-email2-jakarta/src/test/resources/images/asf_logo_wide.gif
similarity index 100%
copy from commons-email-javax/src/test/resources/images/asf_logo_wide.gif
copy to commons-email2-jakarta/src/test/resources/images/asf_logo_wide.gif
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.gif b/commons-email2-jakarta/src/test/resources/images/contentTypeTest.gif
similarity index 100%
copy from commons-email-javax/src/test/resources/images/contentTypeTest.gif
copy to commons-email2-jakarta/src/test/resources/images/contentTypeTest.gif
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.jpg b/commons-email2-jakarta/src/test/resources/images/contentTypeTest.jpg
similarity index 100%
copy from commons-email-javax/src/test/resources/images/contentTypeTest.jpg
copy to commons-email2-jakarta/src/test/resources/images/contentTypeTest.jpg
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.png b/commons-email2-jakarta/src/test/resources/images/contentTypeTest.png
similarity index 100%
copy from commons-email-javax/src/test/resources/images/contentTypeTest.png
copy to commons-email2-jakarta/src/test/resources/images/contentTypeTest.png
diff --git a/commons-email-javax/src/test/resources/images/logos/maven-feather.png b/commons-email2-jakarta/src/test/resources/images/logos/maven-feather.png
similarity index 100%
copy from commons-email-javax/src/test/resources/images/logos/maven-feather.png
copy to commons-email2-jakarta/src/test/resources/images/logos/maven-feather.png
diff --git a/commons-email-javax/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/commons-email2-jakarta/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
similarity index 100%
copy from commons-email-javax/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
copy to commons-email2-jakarta/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
diff --git a/commons-email-javax/pom.xml b/commons-email2-javax/pom.xml
similarity index 91%
rename from commons-email-javax/pom.xml
rename to commons-email2-javax/pom.xml
index 12966cd..15d7971 100644
--- a/commons-email-javax/pom.xml
+++ b/commons-email2-javax/pom.xml
@@ -31,9 +31,27 @@
   <description>Apache Commons Email provides an API for sending email, simplifying the JavaMail Javax API.</description>
 
   <dependencies>
+    <dependency>    
+      <groupId>org.apache.commons</groupId>    
+      <artifactId>commons-email2-core</artifactId>    
+      <version>2.0.0-M1-SNAPSHOT</version>
+    </dependency>
     <dependency>
       <groupId>com.sun.mail</groupId>
       <artifactId>jakarta.mail</artifactId>
+      <version>1.6.7</version>
+    </dependency>
+    <dependency>
+      <groupId>org.subethamail</groupId>
+      <artifactId>subethasmtp</artifactId>
+      <version>3.1.7</version>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>javax.mail</groupId>
+          <artifactId>mail</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
@@ -55,17 +73,6 @@
       <artifactId>commons-io</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.subethamail</groupId>
-      <artifactId>subethasmtp</artifactId>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>javax.mail</groupId>
-          <artifactId>mail</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
@@ -75,6 +82,7 @@
 
   <properties>
     <commons.parent.dir>${basedir}/..</commons.parent.dir>
+    <commons.module.name>org.apache.commons.mail2.javax</commons.module.name>
   </properties>
 
   <build>
diff --git a/commons-email-javax/src/conf/spotbugs-exclude-filter.xml b/commons-email2-javax/src/conf/spotbugs-exclude-filter.xml
similarity index 100%
rename from commons-email-javax/src/conf/spotbugs-exclude-filter.xml
rename to commons-email2-javax/src/conf/spotbugs-exclude-filter.xml
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DataSourceResolver.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/DataSourceResolver.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DataSourceResolver.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/DataSourceResolver.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DefaultAuthenticator.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/DefaultAuthenticator.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/DefaultAuthenticator.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/DefaultAuthenticator.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/Email.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/Email.java
similarity index 99%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/Email.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/Email.java
index c8fee0c..834ed45 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/Email.java
+++ b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/Email.java
@@ -43,6 +43,8 @@ import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
 import org.apache.commons.mail2.javax.util.IDNEmailAddressConverter;
 
 /**
@@ -60,13 +62,6 @@ public abstract class Email {
      */
     private static final InternetAddress[] EMPTY_INTERNET_ADDRESS_ARRAY = {};
 
-    /**
-     * Constructs a new instance.
-     */
-    public Email() {
-        // empty
-    }
-
     /**
      * The email message to send.
      */
@@ -163,7 +158,7 @@ public abstract class Email {
      *
      * X-Mailer: Sendmail, X-Priority: 1( highest ) or 2( high ) 3( normal ) 4( low ) and 5( lowest ) Disposition-Notification-To: user@domain.net
      */
-    private Map<String, String> headers = new HashMap<>();
+    private final Map<String, String> headers = new HashMap<>();
 
     /**
      * Whether to use POP3 before SMTP, and if so the settings.
@@ -240,6 +235,13 @@ public abstract class Email {
      */
     private Session session;
 
+    /**
+     * Constructs a new instance.
+     */
+    public Email() {
+        // empty
+    }
+
     /**
      * Adds a blind BCC recipient to the email. The email address will also be used as the personal name. The name will be encoded by the charset of
      * {@link #setCharset(String)}. If it is not set, it will be encoded using the Java platform's default charset (UTF-16) if it contains non-ASCII characters;
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailAttachment.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/EmailAttachment.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailAttachment.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/EmailAttachment.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
similarity index 99%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
index 7a66333..290856b 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
+++ b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/EmailConstants.java
@@ -29,12 +29,6 @@ import java.time.Duration;
  */
 public final class EmailConstants {
 
-    
-
-    
-
-    // Charset constants
-
     /** Charset constant for koi8-r */
     public static final String KOI8_R = "koi8-r";
 
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java
similarity index 99%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java
index 3ce078f..130f358 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java
+++ b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/HtmlEmail.java
@@ -34,6 +34,9 @@ import javax.mail.MessagingException;
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMultipart;
 
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+
 /**
  * An HTML multipart email.
  * <p>
@@ -173,7 +176,7 @@ public class HtmlEmail extends MultiPartEmail {
     /**
      * Embedded images Map&lt;String, InlineImage&gt; where the key is the user-defined image name.
      */
-    private Map<String, InlineImage> inlineEmbeds = new HashMap<>();
+    private final Map<String, InlineImage> inlineEmbeds = new HashMap<>();
 
     /**
      * Constructs a new instance.
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java
similarity index 98%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java
index 9728867..144b48f 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java
+++ b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/ImageHtmlEmail.java
@@ -24,6 +24,9 @@ import java.util.regex.Pattern;
 
 import javax.activation.DataSource;
 
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
+
 /**
  * <p>
  * Small wrapper class on top of HtmlEmail which encapsulates the required logic to retrieve images that are contained in "&lt;img src=../&gt;" elements in the
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java
similarity index 99%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java
index 4120edf..6945112 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java
+++ b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/MultiPartEmail.java
@@ -38,6 +38,8 @@ import javax.mail.internet.MimeMultipart;
 import javax.mail.internet.MimePart;
 import javax.mail.internet.MimeUtility;
 
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
 import org.apache.commons.mail2.javax.activation.PathDataSource;
 
 /**
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java
similarity index 96%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java
index 023fe58..e0e76ad 100644
--- a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java
+++ b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/SimpleEmail.java
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.mail2.javax;
 
+import org.apache.commons.mail2.core.EmailException;
+
 /**
  * Sends simple Internet email messages without attachments.
  *
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/InputStreamDataSource.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/activation/InputStreamDataSource.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/InputStreamDataSource.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/activation/InputStreamDataSource.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/PathDataSource.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/activation/PathDataSource.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/PathDataSource.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/activation/PathDataSource.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/package-info.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/activation/package-info.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/activation/package-info.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/activation/package-info.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/package-info.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceBaseResolver.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolver.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolver.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolver.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolver.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolver.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/package-info.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/package-info.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/resolver/package-info.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/resolver/package-info.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageParser.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageParser.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageParser.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageParser.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageUtils.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageUtils.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageUtils.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/util/MimeMessageUtils.java
diff --git a/commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/package-info.java b/commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/util/package-info.java
similarity index 100%
rename from commons-email-javax/src/main/java/org/apache/commons/mail2/javax/util/package-info.java
rename to commons-email2-javax/src/main/java/org/apache/commons/mail2/javax/util/package-info.java
diff --git a/commons-email-javax/src/main/resources/META-INF/mime.types b/commons-email2-javax/src/main/resources/META-INF/mime.types
similarity index 100%
rename from commons-email-javax/src/main/resources/META-INF/mime.types
rename to commons-email2-javax/src/main/resources/META-INF/mime.types
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java
similarity index 99%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java
index 2f8e53a..3a9eec8 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/AbstractEmailTest.java
@@ -38,6 +38,7 @@ import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 
 import org.apache.commons.mail2.javax.settings.EmailConfiguration;
+import org.apache.commons.mail2.javax.util.MimeMessageUtils;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.mockito.Mockito;
@@ -243,7 +244,7 @@ public abstract class AbstractEmailTest {
         final int currCounter = fileNameCounter++ % 10;
         final String emailFileName = "email" + new Date().getTime() + "-" + currCounter + ".eml";
         final File emailFile = new File(emailOutputDir, emailFileName);
-        EmailUtils.writeMimeMessage(emailFile, email.getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(email.getMimeMessage(), emailFile);
     }
 
     /**
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/DefaultAuthenticatorTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/DefaultAuthenticatorTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/DefaultAuthenticatorTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/DefaultAuthenticatorTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailAttachmentTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailAttachmentTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailAttachmentTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailAttachmentTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailConstantsTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java
similarity index 89%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java
index 0b7ef58..29eb782 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailLiveTest.java
@@ -33,8 +33,10 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.mail2.core.EmailException;
 import org.apache.commons.mail2.javax.resolver.DataSourceUrlResolver;
 import org.apache.commons.mail2.javax.settings.EmailConfiguration;
+import org.apache.commons.mail2.javax.util.MimeMessageUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -125,7 +127,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         final DataSource attachment = new javax.mail.util.ByteArrayDataSource(textMsg.getBytes(StandardCharsets.UTF_8), "text/plain");
         email.attach(attachment, attachmentName, "Attachment in Greek");
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/correct-encoding.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/correct-encoding.eml"));
     }
 
     /**
@@ -140,7 +142,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setMsg("This is a test mail with a folded header value... :-)");
         email.addHeader("X-TestHeader", "This is a very long header value which should be folded into two lines, hopefully");
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/foldedheader.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/foldedheader.eml"));
     }
 
     /**
@@ -178,7 +180,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         htmlEmail1.setTextMsg(textMsg);
         htmlEmail1.setHtmlMsg(htmlMsg);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/htmlemail1.eml"), send(htmlEmail1).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(htmlEmail1).getMimeMessage(), new File("./target/test-emails/htmlemail1.eml"));
 
         // 2) text + html content + image as attachment
 
@@ -191,7 +193,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         htmlEmail2.setHtmlMsg(htmlMsg);
         htmlEmail2.attach(url, "Apache Logo", "The official Apache logo");
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/htmlemail2.eml"), send(htmlEmail2).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(htmlEmail2).getMimeMessage(), new File("./target/test-emails/htmlemail2.eml"));
 
         // 3) text + html content + inline image
 
@@ -205,7 +207,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         htmlEmail3.setTextMsg(textMsg);
         htmlEmail3.setHtmlMsg(htmlMsg);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/htmlemail3.eml"), send(htmlEmail3).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(htmlEmail3).getMimeMessage(), new File("./target/test-emails/htmlemail3.eml"));
 
         // 4) text + html content + inline image + attachment
 
@@ -219,7 +221,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         htmlEmail4.setHtmlMsg(htmlMsg);
         htmlEmail4.attach(attachment);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/htmlemail4.eml"), send(htmlEmail4).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(htmlEmail4).getMimeMessage(), new File("./target/test-emails/htmlemail4.eml"));
     }
 
     /**
@@ -239,7 +241,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setSubject("[testImageHtmlEmail] 1.Test: simple html content");
         email.setHtmlMsg(htmlMsg1);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/testImageHtmlEmailLocal.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/testImageHtmlEmailLocal.eml"));
     }
 
     /**
@@ -260,7 +262,7 @@ public class EmailLiveTest extends AbstractEmailTest {
             email.setSubject("[testImageHtmlEmail] 2.Test: complex html content");
             email.setHtmlMsg(htmlMsg);
 
-            EmailUtils.writeMimeMessage(new File("./target/test-emails/testImageHtmlEmailRemote.eml"), send(email).getMimeMessage());
+            MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/testImageHtmlEmailRemote.eml"));
         }
     }
 
@@ -276,7 +278,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setMsg("This is a test mail ... :-)");
         email.attach(new File("./src/test/resources/attachments/logo.pdf"));
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/multipart.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/multipart.eml"));
     }
 
     /**
@@ -291,7 +293,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setMsg("This is a test mail ... :-)");
         email.attach(Paths.get("./src/test/resources/attachments/logo.pdf"));
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/multipart.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/multipart.eml"));
     }
 
     /**
@@ -311,7 +313,7 @@ public class EmailLiveTest extends AbstractEmailTest {
 
         email.setSendPartial(true);
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/partialmail.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/partialmail.eml"));
     }
 
     /**
@@ -364,7 +366,7 @@ public class EmailLiveTest extends AbstractEmailTest {
         email.setSubject("TestSimpleMail");
         email.setMsg("This is a test mail ... :-)");
 
-        EmailUtils.writeMimeMessage(new File("./target/test-emails/simplemail.eml"), send(email).getMimeMessage());
+        MimeMessageUtils.writeMimeMessage(send(email).getMimeMessage(), new File("./target/test-emails/simplemail.eml"));
     }
 
 }
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java
similarity index 99%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java
index bb73ab7..590dfb0 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/EmailTest.java
@@ -45,6 +45,7 @@ import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
 import javax.mail.internet.ParseException;
 
+import org.apache.commons.mail2.core.EmailException;
 import org.apache.commons.mail2.javax.mocks.MockEmailConcrete;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java
similarity index 99%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java
index 4d2e8c9..d90c458 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/HtmlEmailTest.java
@@ -32,6 +32,8 @@ import javax.activation.DataSource;
 import javax.activation.FileDataSource;
 import javax.mail.internet.MimeMessage;
 
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
 import org.apache.commons.mail2.javax.mocks.MockHtmlEmailConcrete;
 import org.apache.commons.mail2.javax.settings.EmailConfiguration;
 import org.apache.commons.mail2.javax.util.MimeMessageParser;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java
similarity index 99%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java
index 5c5fb41..c2de331 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/ImageHtmlEmailTest.java
@@ -36,6 +36,7 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.mail2.core.EmailException;
 import org.apache.commons.mail2.javax.mocks.MockImageHtmlEmailConcrete;
 import org.apache.commons.mail2.javax.resolver.DataSourceClassPathResolver;
 import org.apache.commons.mail2.javax.resolver.DataSourceCompositeResolver;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InputStreamDataSourceTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/InputStreamDataSourceTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InputStreamDataSourceTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/InputStreamDataSourceTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java
similarity index 98%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java
index 5754340..caa2b89 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/InvalidAddressTest.java
@@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.util.stream.IntStream;
 
+import org.apache.commons.mail2.core.EmailException;
 import org.apache.commons.mail2.javax.mocks.MockEmailConcrete;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidInternetAddressTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/InvalidInternetAddressTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/InvalidInternetAddressTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/InvalidInternetAddressTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java
similarity index 99%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java
index 1bb6054..a908de9 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/MultiPartEmailTest.java
@@ -32,6 +32,8 @@ import javax.activation.FileDataSource;
 import javax.activation.URLDataSource;
 import javax.mail.internet.MimeMultipart;
 
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
 import org.apache.commons.mail2.javax.mocks.MockMultiPartEmailConcrete;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java
similarity index 99%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java
index ab1c8b6..ee6da91 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/SendWithAttachmentsTest.java
@@ -22,6 +22,7 @@ import java.net.URL;
 
 import javax.mail.internet.MimeUtility;
 
+import org.apache.commons.mail2.core.EmailException;
 import org.apache.commons.mail2.javax.mocks.MockHtmlEmailConcrete;
 import org.apache.commons.mail2.javax.settings.EmailConfiguration;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java
similarity index 97%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java
index a930344..dfef357 100644
--- a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java
+++ b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/SimpleEmailTest.java
@@ -23,6 +23,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
+import org.apache.commons.mail2.core.EmailException;
+import org.apache.commons.mail2.core.EmailUtils;
 import org.apache.commons.mail2.javax.mocks.MockSimpleEmail;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockEmailConcrete.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockEmailConcrete.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockEmailConcrete.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockEmailConcrete.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockHtmlEmailConcrete.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockHtmlEmailConcrete.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockHtmlEmailConcrete.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockHtmlEmailConcrete.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockImageHtmlEmailConcrete.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockImageHtmlEmailConcrete.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockImageHtmlEmailConcrete.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockImageHtmlEmailConcrete.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockMultiPartEmailConcrete.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockMultiPartEmailConcrete.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockMultiPartEmailConcrete.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockMultiPartEmailConcrete.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockSimpleEmail.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockSimpleEmail.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockSimpleEmail.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/MockSimpleEmail.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/package-info.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/package-info.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/mocks/package-info.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/mocks/package-info.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/AbstractDataSourceResolverTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/AbstractDataSourceResolverTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/AbstractDataSourceResolverTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/AbstractDataSourceResolverTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolverTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolverTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolverTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceClassPathResolverTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolverTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolverTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolverTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceCompositeResolverTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolverTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolverTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolverTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceFileResolverTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolverTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolverTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolverTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourcePathResolverTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolverTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolverTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolverTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/resolver/DataSourceUrlResolverTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/EmailConfiguration.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/settings/EmailConfiguration.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/EmailConfiguration.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/settings/EmailConfiguration.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/package-info.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/settings/package-info.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/settings/package-info.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/settings/package-info.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverterTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverterTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverterTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/util/IDNEmailAddressConverterTest.java
diff --git a/commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/MimeMessageParserTest.java b/commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/util/MimeMessageParserTest.java
similarity index 100%
rename from commons-email-javax/src/test/java/org/apache/commons/mail2/javax/util/MimeMessageParserTest.java
rename to commons-email2-javax/src/test/java/org/apache/commons/mail2/javax/util/MimeMessageParserTest.java
diff --git a/commons-email-javax/src/test/resources/attachments/autoloadertest.html b/commons-email2-javax/src/test/resources/attachments/autoloadertest.html
similarity index 100%
rename from commons-email-javax/src/test/resources/attachments/autoloadertest.html
rename to commons-email2-javax/src/test/resources/attachments/autoloadertest.html
diff --git a/commons-email-javax/src/test/resources/attachments/classpathtest.html b/commons-email2-javax/src/test/resources/attachments/classpathtest.html
similarity index 100%
rename from commons-email-javax/src/test/resources/attachments/classpathtest.html
rename to commons-email2-javax/src/test/resources/attachments/classpathtest.html
diff --git a/commons-email-javax/src/test/resources/attachments/download_email.cgi.html b/commons-email2-javax/src/test/resources/attachments/download_email.cgi.html
similarity index 100%
rename from commons-email-javax/src/test/resources/attachments/download_email.cgi.html
rename to commons-email2-javax/src/test/resources/attachments/download_email.cgi.html
diff --git a/commons-email-javax/src/test/resources/attachments/logo.pdf b/commons-email2-javax/src/test/resources/attachments/logo.pdf
similarity index 100%
rename from commons-email-javax/src/test/resources/attachments/logo.pdf
rename to commons-email2-javax/src/test/resources/attachments/logo.pdf
diff --git a/commons-email-javax/src/test/resources/eml/attachment-only.eml b/commons-email2-javax/src/test/resources/eml/attachment-only.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/attachment-only.eml
rename to commons-email2-javax/src/test/resources/eml/attachment-only.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment-content-disposition.eml b/commons-email2-javax/src/test/resources/eml/html-attachment-content-disposition.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/html-attachment-content-disposition.eml
rename to commons-email2-javax/src/test/resources/eml/html-attachment-content-disposition.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment-encoded-filename.eml b/commons-email2-javax/src/test/resources/eml/html-attachment-encoded-filename.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/html-attachment-encoded-filename.eml
rename to commons-email2-javax/src/test/resources/eml/html-attachment-encoded-filename.eml
diff --git a/commons-email-javax/src/test/resources/eml/html-attachment.eml b/commons-email2-javax/src/test/resources/eml/html-attachment.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/html-attachment.eml
rename to commons-email2-javax/src/test/resources/eml/html-attachment.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-report.eml b/commons-email2-javax/src/test/resources/eml/multipart-report.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/multipart-report.eml
rename to commons-email2-javax/src/test/resources/eml/multipart-report.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-text-attachment-only.eml b/commons-email2-javax/src/test/resources/eml/multipart-text-attachment-only.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/multipart-text-attachment-only.eml
rename to commons-email2-javax/src/test/resources/eml/multipart-text-attachment-only.eml
diff --git a/commons-email-javax/src/test/resources/eml/multipart-text-attachment.eml b/commons-email2-javax/src/test/resources/eml/multipart-text-attachment.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/multipart-text-attachment.eml
rename to commons-email2-javax/src/test/resources/eml/multipart-text-attachment.eml
diff --git a/commons-email-javax/src/test/resources/eml/outofmemory-no-header-seperation.eml b/commons-email2-javax/src/test/resources/eml/outofmemory-no-header-seperation.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/outofmemory-no-header-seperation.eml
rename to commons-email2-javax/src/test/resources/eml/outofmemory-no-header-seperation.eml
diff --git a/commons-email-javax/src/test/resources/eml/simple-reply.eml b/commons-email2-javax/src/test/resources/eml/simple-reply.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/simple-reply.eml
rename to commons-email2-javax/src/test/resources/eml/simple-reply.eml
diff --git a/commons-email-javax/src/test/resources/eml/simple.eml b/commons-email2-javax/src/test/resources/eml/simple.eml
similarity index 100%
rename from commons-email-javax/src/test/resources/eml/simple.eml
rename to commons-email2-javax/src/test/resources/eml/simple.eml
diff --git a/commons-email-javax/src/test/resources/html/www.apache.org.html b/commons-email2-javax/src/test/resources/html/www.apache.org.html
similarity index 100%
rename from commons-email-javax/src/test/resources/html/www.apache.org.html
rename to commons-email2-javax/src/test/resources/html/www.apache.org.html
diff --git a/commons-email-javax/src/test/resources/images/asf_logo_wide.gif b/commons-email2-javax/src/test/resources/images/asf_logo_wide.gif
similarity index 100%
rename from commons-email-javax/src/test/resources/images/asf_logo_wide.gif
rename to commons-email2-javax/src/test/resources/images/asf_logo_wide.gif
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.gif b/commons-email2-javax/src/test/resources/images/contentTypeTest.gif
similarity index 100%
rename from commons-email-javax/src/test/resources/images/contentTypeTest.gif
rename to commons-email2-javax/src/test/resources/images/contentTypeTest.gif
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.jpg b/commons-email2-javax/src/test/resources/images/contentTypeTest.jpg
similarity index 100%
rename from commons-email-javax/src/test/resources/images/contentTypeTest.jpg
rename to commons-email2-javax/src/test/resources/images/contentTypeTest.jpg
diff --git a/commons-email-javax/src/test/resources/images/contentTypeTest.png b/commons-email2-javax/src/test/resources/images/contentTypeTest.png
similarity index 100%
rename from commons-email-javax/src/test/resources/images/contentTypeTest.png
rename to commons-email2-javax/src/test/resources/images/contentTypeTest.png
diff --git a/commons-email-javax/src/test/resources/images/logos/maven-feather.png b/commons-email2-javax/src/test/resources/images/logos/maven-feather.png
similarity index 100%
rename from commons-email-javax/src/test/resources/images/logos/maven-feather.png
rename to commons-email2-javax/src/test/resources/images/logos/maven-feather.png
diff --git a/commons-email-javax/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/commons-email2-javax/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
similarity index 100%
rename from commons-email-javax/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
rename to commons-email2-javax/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
diff --git a/pom.xml b/pom.xml
index 2e0999a..2e5f4d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,11 +46,6 @@
 
   <dependencyManagement>
     <dependencies>
-      <dependency>
-        <groupId>com.sun.mail</groupId>
-        <artifactId>jakarta.mail</artifactId>
-        <version>1.6.7</version>
-      </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-jdk14</artifactId>
@@ -63,18 +58,6 @@
         <version>2.15.1</version>
         <scope>test</scope>
       </dependency>
-      <dependency>
-        <groupId>org.subethamail</groupId>
-        <artifactId>subethasmtp</artifactId>
-        <version>3.1.7</version>
-        <scope>test</scope>
-        <exclusions>
-          <exclusion>
-            <groupId>javax.mail</groupId>
-            <artifactId>mail</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
       <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
@@ -91,7 +74,7 @@
     <maven.compiler.source>1.8</maven.compiler.source>
     <maven.compiler.target>1.8</maven.compiler.target>
     <commons.componentid>email</commons.componentid>
-    <commons.module.name>org.apache.commons.mail</commons.module.name>
+    <commons.module.name>org.apache.commons.mail2</commons.module.name>
     <commons.jira.id>EMAIL</commons.jira.id>
     <commons.jira.pid>12310474</commons.jira.pid>
     <commons.release.version>2.0.0-M1</commons.release.version>
@@ -149,28 +132,6 @@
           <tarLongFileMode>gnu</tarLongFileMode>
         </configuration>
       </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive combine.children="append">
-            <manifest>
-              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
-            </manifest>
-            <manifestEntries>
-              <Automatic-Module-Name>${commons.module.name}</Automatic-Module-Name>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-release-plugin</artifactId>
-        <configuration>
-          <mavenExecutorId>forked-path</mavenExecutorId>
-        </configuration>
-      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-scm-publish-plugin</artifactId>
@@ -285,8 +246,11 @@
   </reporting>
 
   <modules>
-    <module>commons-email-javax</module>
+    <module>commons-email2-core</module>
+    <module>commons-email2-jakarta</module>
+    <module>commons-email2-javax</module>
   </modules>
+
   <profiles>
     <profile>
       <id>java17</id>