commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sgoes...@apache.org
Subject svn commit: r963763 - in /commons/proper/email/trunk/src: java/org/apache/commons/mail/ImageHtmlEmail.java test/org/apache/commons/mail/EmailLiveTest.java test/org/apache/commons/mail/ImageHtmlEmailTest.java
Date Tue, 13 Jul 2010 15:35:54 GMT
Author: sgoeschl
Date: Tue Jul 13 15:35:53 2010
New Revision: 963763

URL: http://svn.apache.org/viewvc?rev=963763&view=rev
Log:
[EMAIL-92] Adding lenient mode to ignore resources which can't be resolved (or throwing an
EMailException in non-lenient mode)

Modified:
    commons/proper/email/trunk/src/java/org/apache/commons/mail/ImageHtmlEmail.java
    commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailLiveTest.java
    commons/proper/email/trunk/src/test/org/apache/commons/mail/ImageHtmlEmailTest.java

Modified: commons/proper/email/trunk/src/java/org/apache/commons/mail/ImageHtmlEmail.java
URL: http://svn.apache.org/viewvc/commons/proper/email/trunk/src/java/org/apache/commons/mail/ImageHtmlEmail.java?rev=963763&r1=963762&r2=963763&view=diff
==============================================================================
--- commons/proper/email/trunk/src/java/org/apache/commons/mail/ImageHtmlEmail.java (original)
+++ commons/proper/email/trunk/src/java/org/apache/commons/mail/ImageHtmlEmail.java Tue Jul
13 15:35:53 2010
@@ -86,7 +86,7 @@ public class ImageHtmlEmail extends Html
             throw new EmailException("Unable to create URL for current working directory",
e);
         }
 
-        return setHtmlMsg(htmlMessage, currentWorkingDirectoryUrl);
+        return setHtmlMsg(htmlMessage, currentWorkingDirectoryUrl, false);
     }
 
     /**
@@ -95,11 +95,12 @@ public class ImageHtmlEmail extends Html
      * to resolve relative image resources.
      *
      * @param htmlMessage the HTML message.
-     * @param baseUrl An base URL that is used as starting point for resolving images that
are embedded in the HTML
-     * @return An HtmlEmail
+     * @param baseUrl an base URL that is used as starting point for resolving images that
are embedded in the HTML
+     * @param isLenient shall we ignore resources not found or throw an exception?
+     * @return a HTML email
      * @throws EmailException creating the email failed
      */
-    public HtmlEmail setHtmlMsg(final String htmlMessage, final URL baseUrl)
+    public HtmlEmail setHtmlMsg(final String htmlMessage, final URL baseUrl, boolean isLenient)
             throws EmailException
     {
         // if there is no useful HTML then simply route it through to the super class
@@ -109,10 +110,10 @@ public class ImageHtmlEmail extends Html
         }
 
         // replace images
-        String temp = replacePattern(htmlMessage, pattern, baseUrl);
+        String temp = replacePattern(htmlMessage, pattern, baseUrl, isLenient);
 
         // replace scripts
-        temp = replacePattern(temp, scriptPattern, baseUrl);
+        temp = replacePattern(temp, scriptPattern, baseUrl, isLenient);
 
         // finally set the resulting HTML with all images replaced if possible
         return super.setHtmlMsg(temp);
@@ -122,12 +123,13 @@ public class ImageHtmlEmail extends Html
      * Replace the regexp matching resource locations with "cid:..." references.
      *
      * @param htmlMessage the HTML message to analyze
-     * @param pattern the repexp to find resources
+     * @param pattern the regular expression to find resources
      * @param baseUrl the starting point for resolving relative resource paths
+     * @param isLenient shall we ignore resources not found or throw an exception?
      * @return the HTML message containing "cid" references
      * @throws EmailException creating the email failed
      */
-    private String replacePattern(final String htmlMessage, final Pattern pattern, final
URL baseUrl)
+    private String replacePattern(final String htmlMessage, final Pattern pattern, final
URL baseUrl, final boolean isLenient)
             throws EmailException
     {
         DataSource imageDataSource;
@@ -152,8 +154,13 @@ public class ImageHtmlEmail extends Html
             // avoid loading the same data source more than once
             if(dataSourceCache.get(image) == null) 
             {
-                imageDataSource = resolve(baseUrl, image);  
-                dataSourceCache.put(image, imageDataSource);
+                // in lenient mode we might get a 'null' data source if the resource was
not found
+                imageDataSource = resolve(baseUrl, image, isLenient);
+                
+                if(imageDataSource != null)
+                {
+                    dataSourceCache.put(image, imageDataSource);
+                }
             }
             else
             {
@@ -167,7 +174,7 @@ public class ImageHtmlEmail extends Html
 
                 if(cid == null)
                 {
-                    cid = embed(imageDataSource, imageDataSource.getName());    
+                    cid = embed(imageDataSource, imageDataSource.getName());
                     cidCache.put(name, cid);
                 }
                 
@@ -189,14 +196,17 @@ public class ImageHtmlEmail extends Html
 
 
     /**
-     * Resolve a resource location to be embedded into the email.
+     * Resolve a resource location to be embedded into the email. When using
+     * the lenient mode a resource which can't be resolved returns "null".
+     * When using the non-lenient mode an exception would be thrown.
      *
      * @param baseUrl the base url of the resourceLocation
      * @param resourceLocation the location of the resource
-     * @return the data source containing the resource.
+     * @param isLenient shall we ignore resources not found?
+     * @return the data source containing the resource
      * @throws EmailException resolving the resource failed
      */
-    protected DataSource resolve(final URL baseUrl, final String resourceLocation)
+    protected DataSource resolve(final URL baseUrl, final String resourceLocation, final
boolean isLenient)
             throws EmailException 
     {
         DataSource result = null;
@@ -207,13 +217,21 @@ public class ImageHtmlEmail extends Html
             {
                 URL url = URLFactory.createUrl(baseUrl, resourceLocation);
                 result = new URLDataSource(url);
+                result.getInputStream();
             }
 
             return result;
         }
         catch (IOException e)
         {
-            throw new EmailException("Resolving the resourceLocation failed", e);
+            if(!isLenient)
+            {
+                throw new EmailException("Resolving the resource failed : " + resourceLocation,
e);
+            }
+            else
+            {
+                return null;
+            }
         }
     }
 }

Modified: commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailLiveTest.java
URL: http://svn.apache.org/viewvc/commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailLiveTest.java?rev=963763&r1=963762&r2=963763&view=diff
==============================================================================
--- commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailLiveTest.java (original)
+++ commons/proper/email/trunk/src/test/org/apache/commons/mail/EmailLiveTest.java Tue Jul
13 15:35:53 2010
@@ -256,13 +256,14 @@ public class EmailLiveTest extends BaseE
         // use a simple HTML page with one image - please note that the Apache logo
         // is defined in CSS and not in HTML.
 
-        String htmlMsg1 = FileUtils.readFileToString(new File("./src/test/html/www.apache.org.html"));
+        File htmlFile = new File("./src/test/html/www.apache.org.html");
+        String htmlMsg1 = FileUtils.readFileToString(htmlFile);
 
         ImageHtmlEmail email = new ImageHtmlEmail();
         email.setSubject( "[testImageHtmlEmail] 1.Test: simple html content");
         email.setFrom(EmailConfiguration.TEST_FROM);
         email.setTo(getToList());
-        email.setHtmlMsg(htmlMsg1);
+        email.setHtmlMsg(htmlMsg1, htmlFile.toURI().toURL(), false);
         email.setMailSession(getSession());
 
         EmailUtils.writeMimeMessage( new File("./target/test-emails/testImageHtmlEmailLocal.eml"),
send(email).getMimeMessage());
@@ -282,7 +283,7 @@ public class EmailLiveTest extends BaseE
         email.setSubject( "[testImageHtmlEmail] 2.Test: complex html content");
         email.setFrom(EmailConfiguration.TEST_FROM);
         email.setTo(getToList());
-        email.setHtmlMsg(htmlMsg, url);
+        email.setHtmlMsg(htmlMsg, url, true);
         email.setMailSession(getSession());
 
         EmailUtils.writeMimeMessage( new File("./target/test-emails/testImageHtmlEmailRemote.eml"),
send(email).getMimeMessage());

Modified: commons/proper/email/trunk/src/test/org/apache/commons/mail/ImageHtmlEmailTest.java
URL: http://svn.apache.org/viewvc/commons/proper/email/trunk/src/test/org/apache/commons/mail/ImageHtmlEmailTest.java?rev=963763&r1=963762&r2=963763&view=diff
==============================================================================
--- commons/proper/email/trunk/src/test/org/apache/commons/mail/ImageHtmlEmailTest.java (original)
+++ commons/proper/email/trunk/src/test/org/apache/commons/mail/ImageHtmlEmailTest.java Tue
Jul 13 15:35:53 2010
@@ -89,7 +89,7 @@ public class ImageHtmlEmailTest extends 
 		String html = str.toString();
 
 		// set the html message
-		email.setHtmlMsg(html, TEST_IMAGE_DIR.toURI().toURL());
+		email.setHtmlMsg(html, TEST_IMAGE_DIR.toURI().toURL(), false);
 
 		// set the alternative message
 		//email.setTextMsg("Your email client does not support HTML messages");
@@ -128,7 +128,7 @@ public class ImageHtmlEmailTest extends 
 
 		// set the html message
 		try {
-			email.setHtmlMsg(null, new File("/tmp").toURI().toURL());
+			email.setHtmlMsg(null, new File("/tmp").toURI().toURL(), false);
 			fail("Should fail here!");
 		} catch (EmailException e) {
 			assertTrue(e.getMessage(), e.getMessage().contains(
@@ -144,7 +144,7 @@ public class ImageHtmlEmailTest extends 
 
 		// set the html message
 		try {
-			email.setHtmlMsg("", new File("/tmp").toURI().toURL());
+			email.setHtmlMsg("", new File("/tmp").toURI().toURL(), false);
 			fail("Should fail here!");
 		} catch (EmailException e) {
 			assertTrue(e.getMessage(), e.getMessage().contains(
@@ -203,7 +203,7 @@ public class ImageHtmlEmailTest extends 
 
 		// set the html message
 		email.setHtmlMsg("<html><body><img src=\"" + file.getAbsolutePath()
-				+ "\"/></body></html>", new File("").toURI().toURL());
+				+ "\"/></body></html>", new File("").toURI().toURL(), false);
 
 		// send the email
 		email.send();



Mime
View raw message