This is an automated email from the git hooks/post-receive script. New commit to branch develop-1.1.x in repository faxtomail. See http://git.codelutin.com/faxtomail.git commit e637153a5d1087cb0afa8463af071f75e99954d0 Author: Kevin Morin <morin@codelutin.com> Date: Thu Nov 19 17:31:15 2015 +0100 encodage des urls des images dans les emails (fixes #7741, fixes #7740) --- faxtomail-service/pom.xml | 5 ++++ .../faxtomail/services/FaxToMailServiceUtils.java | 32 ++++++++++++++++++++++ .../services/service/EmailServiceImpl.java | 4 +++ .../faxtomail/ui/swing/util/FaxToMailUIUtil.java | 17 ++++++++++-- pom.xml | 7 +++++ 5 files changed, 63 insertions(+), 2 deletions(-) diff --git a/faxtomail-service/pom.xml b/faxtomail-service/pom.xml index 7c069cb..7d1f8e9 100644 --- a/faxtomail-service/pom.xml +++ b/faxtomail-service/pom.xml @@ -134,6 +134,11 @@ </dependency> <dependency> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + </dependency> + + <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> </dependency> diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceUtils.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceUtils.java index 2f63743..b02bc12 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceUtils.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceUtils.java @@ -25,6 +25,8 @@ package com.franciaflex.faxtomail.services; */ import com.franciaflex.faxtomail.persistence.entities.MailFolder; +import org.apache.commons.httpclient.URIException; +import org.apache.commons.httpclient.util.URIUtil; import org.apache.commons.io.Charsets; import javax.mail.MessagingException; @@ -32,13 +34,19 @@ import javax.mail.Part; import javax.mail.internet.ContentType; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author Kevin Morin (Code Lutin) */ public class FaxToMailServiceUtils { + public static final Pattern IMG_SRC_PATTERN = Pattern.compile("src=([\"'])(.*?)([\"'])"); + public static String addFaxDomainToFaxNumber(String faxNumber, MailFolder folder) { while (!folder.isUseCurrentLevelFaxDomain() && folder.getParent() != null) { @@ -96,4 +104,28 @@ public class FaxToMailServiceUtils { } return sb.toString(); } + + /** + * Sometimes, the urls of the images in an email contains spaces. + * But URI.parse(uri) does not accept spaces as a valid character. + * This method encode the url for them to be compatible with URI.parse + * + * @param emailContent the content of the email + * @return the email content with the url of the images encoded to be parsed by URI + * @throws URIException + */ + public static String encodeImageSourcesInEmail(String emailContent) throws URIException { + List<String> imgSrcUrls = new ArrayList<>(); + + Matcher imgSrcMatcher = IMG_SRC_PATTERN.matcher(emailContent); + while (imgSrcMatcher.find()) { + imgSrcUrls.add(imgSrcMatcher.group(2)); + } + + for (String imgSrcUrl : imgSrcUrls) { + emailContent = emailContent.replace(imgSrcUrl, URIUtil.encodeQuery(imgSrcUrl)); + } + + return emailContent; + } } diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java index feee1fa..56d21c7 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java @@ -2121,6 +2121,10 @@ public class EmailServiceImpl extends FaxToMailServiceSupport implements EmailSe // cf #6996 content = content.replaceAll("(\\w+)=([\"'])cid:.*?([\"'])", ""); + // on reformate les urls pour supprimer les caractères qui vont pas (ex espaces) + // cf #7740 + content = FaxToMailServiceUtils.encodeImageSourcesInEmail(content); + contents.add(content); } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java index 7db170f..601af8a 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java @@ -72,7 +72,12 @@ import org.nuiton.util.StringUtil; import javax.media.jai.PlanarImage; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; -import javax.swing.*; +import javax.swing.Box; +import javax.swing.Icon; +import javax.swing.JEditorPane; +import javax.swing.JPanel; +import javax.swing.JTextPane; +import javax.swing.JTree; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.text.html.HTMLEditorKit; @@ -81,7 +86,11 @@ import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; -import java.awt.*; +import java.awt.Color; +import java.awt.Component; +import java.awt.Desktop; +import java.awt.Font; +import java.awt.Graphics; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.awt.print.PageFormat; @@ -835,6 +844,10 @@ public final class FaxToMailUIUtil extends ApplicationUIUtil { } try { + // on reformate les urls pour supprimer les caractères qui vont pas (ex espaces) + // cf #7741 + content = FaxToMailServiceUtils.encodeImageSourcesInEmail(content); + textPane.setText(content); textPanePanel.add(textPane); diff --git a/pom.xml b/pom.xml index 7b9216b..6cfd071 100644 --- a/pom.xml +++ b/pom.xml @@ -126,6 +126,7 @@ <commonsEmailVersion>1.3.3</commonsEmailVersion> <commonsCollections4Version>4.0</commonsCollections4Version> <commonsLang3Version>3.3.2</commonsLang3Version> + <commonsHttpClientVersion>3.1</commonsHttpClientVersion> <commonsLoggingVersion>1.2</commonsLoggingVersion> <junitVersion>4.11</junitVersion> @@ -453,6 +454,12 @@ <version>${commonsLang3Version}</version> </dependency> + <dependency> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + <version>${commonsHttpClientVersion}</version> + </dependency> + <!-- web module --> <dependency> <groupId>javax.servlet</groupId> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.