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 3d48391f2ea8cad0d899b3bc974ae3b2309f4ea0
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Sat Dec 16 14:26:13 2023 -0500

    Add MimeMessageUtils.createMimeMessage(Session, Path, OpenOption...)
---
 src/changes/changes.xml                            |  1 +
 .../apache/commons/mail/util/MimeMessageUtils.java | 67 ++++++++++++++--------
 .../commons/mail/util/MimeMessageParserTest.java   | 33 ++++-------
 3 files changed, 55 insertions(+), 46 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a469379..ca7515f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -52,6 +52,7 @@
       <action type="add" due-to="Gary Gregory" dev="ggregory">Add 
Email.setSocketTimeout(Duration) and deprecate setSocketTimeout(int).</action>
       <action type="add" due-to="Gary Gregory" dev="ggregory">Add 
PathDataSource.</action>
       <action type="add" due-to="Gary Gregory" dev="ggregory">Add 
DataSourcePathResolver.</action>
+      <action type="add" due-to="Gary Gregory" dev="ggregory">Add 
MimeMessageUtils.createMimeMessage(Session, Path, OpenOption...).</action>
       <!-- UPDATE -->
       <action type="update" due-to="Dependabot" dev="sebb">Bump 
org.slf4j:slf4j-jdk14 from 1.7.7 to 2.0.9 #165.</action>
       <action type="update" due-to="Dependabot" dev="sebb">Bump mockito-core 
from 4.11.0 to 5.8.0 #187.</action>
diff --git a/src/main/java/org/apache/commons/mail/util/MimeMessageUtils.java 
b/src/main/java/org/apache/commons/mail/util/MimeMessageUtils.java
index 12784ff..6a00ca2 100644
--- a/src/main/java/org/apache/commons/mail/util/MimeMessageUtils.java
+++ b/src/main/java/org/apache/commons/mail/util/MimeMessageUtils.java
@@ -22,12 +22,15 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import javax.mail.util.SharedByteArrayInputStream;
 import java.nio.charset.Charset;
+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;
 
 /**
  * Static helper methods.
@@ -39,11 +42,11 @@ public final class MimeMessageUtils {
     /**
      * Creates a MimeMessage.
      *
-     * @param session the mail session
-     * @param source  the input data
-     * @return the MimeMessage
-     * @throws MessagingException creating the MimeMessage failed
-     * @throws IOException        creating the MimeMessage failed
+     * @param session the mail session.
+     * @param source  the input data.
+     * @return the MimeMessage.
+     * @throws MessagingException creating the MimeMessage failed.
+     * @throws IOException        creating the MimeMessage failed.
      */
     public static MimeMessage createMimeMessage(final Session session, final 
byte[] source) throws MessagingException, IOException {
         try (ByteArrayInputStream inputStream = new 
ByteArrayInputStream(source)) {
@@ -54,11 +57,11 @@ public final class MimeMessageUtils {
     /**
      * Creates a MimeMessage.
      *
-     * @param session the mail session
-     * @param source  the input data
-     * @return the MimeMessage
-     * @throws MessagingException creating the MimeMessage failed
-     * @throws IOException        creating the MimeMessage failed
+     * @param session the mail session.
+     * @param source  the input data.
+     * @return the MimeMessage.
+     * @throws MessagingException creating the MimeMessage failed.
+     * @throws IOException        creating the MimeMessage failed.
      */
     public static MimeMessage createMimeMessage(final Session session, final 
File source) throws MessagingException, IOException {
         try (FileInputStream inputStream = new FileInputStream(source)) {
@@ -69,23 +72,39 @@ public final class MimeMessageUtils {
     /**
      * Creates a MimeMessage.
      *
-     * @param session the mail session
-     * @param source  the input data
-     * @return the MimeMessage
-     * @throws MessagingException creating the MimeMessage failed
+     * @param session the mail session.
+     * @param source  the input data.
+     * @return the MimeMessage.
+     * @throws MessagingException creating the MimeMessage failed.
      */
     public static MimeMessage createMimeMessage(final Session session, final 
InputStream source) throws MessagingException {
         return new MimeMessage(session, source);
     }
 
+    /**
+     * Creates a MimeMessage.
+     *
+     * @param session the mail session.
+     * @param source  the input data.
+     * @param options options specifying how the file is opened.
+     * @return the MimeMessage.
+     * @throws MessagingException creating the MimeMessage failed.
+     * @throws IOException        creating the MimeMessage failed.
+     */
+    public static MimeMessage createMimeMessage(final Session session, final 
Path source, OpenOption... options) throws MessagingException, IOException {
+        try (InputStream inputStream = Files.newInputStream(source, options)) {
+            return createMimeMessage(session, inputStream);
+        }
+    }
+
     /**
      * Creates a MimeMessage using the platform's default character encoding.
      *
-     * @param session the mail session
-     * @param source  the input data
-     * @return the MimeMessage
-     * @throws MessagingException creating the MimeMessage failed
-     * @throws IOException        creating the MimeMessage failed
+     * @param session the mail session.
+     * @param source  the input data.
+     * @return the MimeMessage.
+     * @throws MessagingException creating the MimeMessage failed.
+     * @throws IOException        creating the MimeMessage failed.
      */
     public static MimeMessage createMimeMessage(final Session session, final 
String source) throws MessagingException, IOException {
         final byte[] byteSource = source.getBytes(Charset.defaultCharset());
@@ -97,10 +116,10 @@ public final class MimeMessageUtils {
     /**
      * Writes a MimeMessage into a file.
      *
-     * @param mimeMessage the MimeMessage to write
-     * @param resultFile  the file containing the MimeMessage
-     * @throws MessagingException accessing MimeMessage failed
-     * @throws IOException        writing the MimeMessage failed
+     * @param mimeMessage the MimeMessage to write.
+     * @param resultFile  the file containing the MimeMessage.
+     * @throws MessagingException accessing MimeMessage failed.
+     * @throws IOException        writing the MimeMessage failed.
      */
     public static void writeMimeMessage(final MimeMessage mimeMessage, final 
File resultFile) throws MessagingException, IOException {
         if (!resultFile.getParentFile().exists() && 
!resultFile.getParentFile().mkdirs()) {
diff --git 
a/src/test/java/org/apache/commons/mail/util/MimeMessageParserTest.java 
b/src/test/java/org/apache/commons/mail/util/MimeMessageParserTest.java
index c21bbbd..a7c2d88 100644
--- a/src/test/java/org/apache/commons/mail/util/MimeMessageParserTest.java
+++ b/src/test/java/org/apache/commons/mail/util/MimeMessageParserTest.java
@@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.File;
+import java.nio.file.Paths;
 import java.util.List;
 import java.util.Properties;
 
@@ -34,9 +35,10 @@ import org.apache.commons.mail.HtmlEmail;
 import org.junit.jupiter.api.Test;
 
 /**
- * Testing the MimeMessageParser.
+ * Tests {@link MimeMessageParser}.
  */
 public class MimeMessageParserTest {
+
     /**
      * This test parses a SAP generated email which only contains a PDF but no 
email text.
      *
@@ -44,9 +46,8 @@ public class MimeMessageParserTest {
      */
     @Test
     public void testAttachmentOnly() throws Exception {
-        DataSource dataSource;
         final Session session = Session.getDefaultInstance(new Properties());
-        final MimeMessage message = 
MimeMessageUtils.createMimeMessage(session, new 
File("./src/test/resources/eml/attachment-only.eml"));
+        final MimeMessage message = 
MimeMessageUtils.createMimeMessage(session, 
Paths.get("./src/test/resources/eml/attachment-only.eml"));
         final MimeMessageParser mimeMessageParser = new 
MimeMessageParser(message);
 
         mimeMessageParser.parse();
@@ -67,7 +68,7 @@ public class MimeMessageParserTest {
         final List<?> attachmentList = mimeMessageParser.getAttachmentList();
         assertEquals(1, attachmentList.size());
 
-        dataSource = mimeMessageParser.findAttachmentByName("Kunde 100029   
Auftrag   3600.pdf");
+        DataSource dataSource = mimeMessageParser.findAttachmentByName("Kunde 
100029   Auftrag   3600.pdf");
         assertNotNull(dataSource);
         assertEquals("application/pdf", dataSource.getContentType());
     }
@@ -79,7 +80,6 @@ public class MimeMessageParserTest {
      */
     @Test
     public void testMultipartTextAttachment() throws Exception {
-        DataSource dataSource;
         final Session session = Session.getDefaultInstance(new Properties());
         final MimeMessage message = 
MimeMessageUtils.createMimeMessage(session, new 
File("./src/test/resources/eml/multipart-text-attachment.eml"));
         final MimeMessageParser mimeMessageParser = new 
MimeMessageParser(message);
@@ -102,7 +102,7 @@ public class MimeMessageParserTest {
         final List<?> attachmentList = mimeMessageParser.getAttachmentList();
         assertEquals(1, attachmentList.size());
 
-        dataSource = mimeMessageParser.findAttachmentByName("test.txt");
+        DataSource dataSource = 
mimeMessageParser.findAttachmentByName("test.txt");
         assertNotNull(dataSource);
         assertEquals("text/plain", dataSource.getContentType());
     }
@@ -114,7 +114,6 @@ public class MimeMessageParserTest {
      */
     @Test
     public void testMultipartTextAttachmentOnly() throws Exception {
-        DataSource dataSource;
         final Session session = Session.getDefaultInstance(new Properties());
         final MimeMessage message = 
MimeMessageUtils.createMimeMessage(session, new 
File("./src/test/resources/eml/multipart-text-attachment-only.eml"));
         final MimeMessageParser mimeMessageParser = new 
MimeMessageParser(message);
@@ -137,7 +136,7 @@ public class MimeMessageParserTest {
         final List<?> attachmentList = mimeMessageParser.getAttachmentList();
         assertEquals(1, attachmentList.size());
 
-        dataSource = mimeMessageParser.findAttachmentByName("test.txt");
+        DataSource dataSource = 
mimeMessageParser.findAttachmentByName("test.txt");
         assertNotNull(dataSource);
         assertEquals("text/plain", dataSource.getContentType());
     }
@@ -145,11 +144,9 @@ public class MimeMessageParserTest {
     @Test
     public void testParseCreatedHtmlEmailWithMixedContent() throws Exception {
         final Session session = Session.getDefaultInstance(new Properties());
-
         final HtmlEmail email = new HtmlEmail();
 
         email.setMailSession(session);
-
         email.setFrom("test_f...@apache.org");
         email.setSubject("Test Subject");
         email.addTo("test...@apache.org");
@@ -184,11 +181,9 @@ public class MimeMessageParserTest {
         final HtmlEmail email = new HtmlEmail();
 
         email.setMailSession(session);
-
         email.setFrom("test_f...@apache.org");
         email.setSubject("Test Subject");
         email.addTo("test...@apache.org");
-
         email.buildMimeMessage();
         final MimeMessage msg = email.getMimeMessage();
 
@@ -215,9 +210,7 @@ public class MimeMessageParserTest {
         final Session session = Session.getDefaultInstance(new Properties());
 
         final HtmlEmail email = new HtmlEmail();
-
         email.setMailSession(session);
-
         email.setFrom("test_f...@apache.org");
         email.setSubject("Test Subject");
         email.addTo("test...@apache.org");
@@ -246,7 +239,6 @@ public class MimeMessageParserTest {
 
     @Test
     public void testParseHtmlEmailWithAttachmentAndEncodedFileName() throws 
Exception {
-        DataSource dataSource;
         final Session session = Session.getDefaultInstance(new Properties());
         final MimeMessage message = 
MimeMessageUtils.createMimeMessage(session, new 
File("./src/test/resources/eml/html-attachment-encoded-filename.eml"));
         final MimeMessageParser mimeMessageParser = new 
MimeMessageParser(message);
@@ -269,7 +261,7 @@ public class MimeMessageParserTest {
         final List<?> attachmentList = mimeMessageParser.getAttachmentList();
         assertEquals(1, attachmentList.size());
 
-        dataSource = mimeMessageParser.getAttachmentList().get(0);
+        DataSource dataSource = mimeMessageParser.getAttachmentList().get(0);
         assertNotNull(dataSource);
         assertEquals("text/plain", dataSource.getContentType());
         assertEquals("Test Attachment - a>ä, o>ö, u>ü, au>äu", 
dataSource.getName());
@@ -277,7 +269,6 @@ public class MimeMessageParserTest {
 
     @Test
     public void testParseHtmlEmailWithAttachments() throws Exception {
-        DataSource dataSource;
         final Session session = Session.getDefaultInstance(new Properties());
         final MimeMessage message = 
MimeMessageUtils.createMimeMessage(session, new 
File("./src/test/resources/eml/html-attachment.eml"));
         final MimeMessageParser mimeMessageParser = new 
MimeMessageParser(message);
@@ -300,7 +291,7 @@ public class MimeMessageParserTest {
         final List<?> attachmentList = mimeMessageParser.getAttachmentList();
         assertEquals(2, attachmentList.size());
 
-        dataSource = 
mimeMessageParser.findAttachmentByName("Wasserlilien.jpg");
+        DataSource dataSource = 
mimeMessageParser.findAttachmentByName("Wasserlilien.jpg");
         assertNotNull(dataSource);
         assertEquals("image/jpeg", dataSource.getContentType());
 
@@ -316,7 +307,6 @@ public class MimeMessageParserTest {
      */
     @Test
     public void testParseHtmlEmailWithHtmlAttachment() throws Exception {
-        DataSource dataSource;
         final Session session = Session.getDefaultInstance(new Properties());
         final MimeMessage message = 
MimeMessageUtils.createMimeMessage(session, new 
File("./src/test/resources/eml/html-attachment-content-disposition.eml"));
         final MimeMessageParser mimeMessageParser = new 
MimeMessageParser(message);
@@ -339,7 +329,7 @@ public class MimeMessageParserTest {
         final List<?> attachmentList = mimeMessageParser.getAttachmentList();
         assertEquals(1, attachmentList.size());
 
-        dataSource = mimeMessageParser.findAttachmentByName("test.html");
+        DataSource dataSource = 
mimeMessageParser.findAttachmentByName("test.html");
         assertNotNull(dataSource);
         assertEquals("text/html", dataSource.getContentType());
     }
@@ -380,7 +370,6 @@ public class MimeMessageParserTest {
      */
     @Test
     public void testParseMultipartReport() throws Exception {
-        DataSource dataSource;
         final Session session = Session.getDefaultInstance(new Properties());
         final MimeMessage message = 
MimeMessageUtils.createMimeMessage(session, new 
File("./src/test/resources/eml/multipart-report.eml"));
         final MimeMessageParser mimeMessageParser = new 
MimeMessageParser(message);
@@ -403,7 +392,7 @@ public class MimeMessageParserTest {
         final List<?> attachmentList = mimeMessageParser.getAttachmentList();
         assertEquals(1, attachmentList.size());
 
-        dataSource = (DataSource) attachmentList.get(0);
+        DataSource dataSource = (DataSource) attachmentList.get(0);
         assertNotNull(dataSource);
         assertNull(dataSource.getName());
         assertEquals("message/disposition-notification", 
dataSource.getContentType());

Reply via email to