branch feature/1.1.x-7855 created (now 34d6cd0)
This is an automated email from the git hooks/post-receive script. New change to branch feature/1.1.x-7855 in repository faxtomail. See http://git.codelutin.com/faxtomail.git at 34d6cd0 à la réception des emails, remplacement des images dont l'url est incorrecte par l'image par défaut (configurable) (fixes #7855) This branch includes the following new commits: new 34d6cd0 à la réception des emails, remplacement des images dont l'url est incorrecte par l'image par défaut (configurable) (fixes #7855) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 34d6cd057c97e2ea24259cb8df1397886227f7e9 Author: Kevin Morin <morin@codelutin.com> Date: Tue Dec 22 16:50:13 2015 +0100 à la réception des emails, remplacement des images dont l'url est incorrecte par l'image par défaut (configurable) (fixes #7855) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/1.1.x-7855 in repository faxtomail. See http://git.codelutin.com/faxtomail.git commit 34d6cd057c97e2ea24259cb8df1397886227f7e9 Author: Kevin Morin <morin@codelutin.com> Date: Tue Dec 22 16:50:13 2015 +0100 à la réception des emails, remplacement des images dont l'url est incorrecte par l'image par défaut (configurable) (fixes #7855) --- .../faxtomail/FaxToMailConfiguration.java | 4 + .../faxtomail/FaxToMailConfigurationOption.java | 7 + .../i18n/faxtomail-persistence_fr_FR.properties | 1 + .../faxtomail/services/FaxToMailServiceUtils.java | 34 ++++- .../services/service/EmailServiceImpl.java | 3 +- .../services/service/EmailServiceTest.java | 141 ++++++++++++--------- .../faxtomail/ui/swing/util/FaxToMailUIUtil.java | 2 +- 7 files changed, 124 insertions(+), 68 deletions(-) diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java index f73df3b..424ad8f 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java @@ -355,6 +355,10 @@ public class FaxToMailConfiguration extends ApplicationConfiguration { FaxToMailConfigurationOption.CSV_SEPARATOR.getKey()).charAt(0); } + public String getDefaultImageIfMalformedUrl() { + return applicationConfig.getOption(FaxToMailConfigurationOption.DEFAULT_IMAGE_IF_MALFORMED_URL.getKey()); + } + public boolean isFullLaunchMode() { return "full".equals(getFaxToMailLaunchMode()); } diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java index 13a67d0..391c3cd 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java @@ -203,12 +203,19 @@ public enum FaxToMailConfigurationOption implements ConfigOptionDef { true), // NOT TRANSIENT CONFIG + CSV_SEPARATOR( "faxtomail.csv.separator", n("faxtomail.config.option.csv.separator.description"), ";", char.class), + DEFAULT_IMAGE_IF_MALFORMED_URL( + "faxtomail.defaultImageIfMalformedUrl", + n("faxtomail.config.option.defaultImageIfMalformedUrl.description"), + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABNCAQAAAD6SAkhAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQffDBYPJSU3laKFAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAMVJREFUaN7t1zEOgzAQRcHFh6amzoHTQoMQ2LSR8q3Z0trmycVqlm2vbtYa5/Py9l97bY6M6kNSM7qQ3IxHSHLGLSQ74wpJzzhD8jOq2hwZVct3nyGjxoOYmbGOIZkZw4+kZnQhuRmPkOSMW0h2xhWSnnGG5GdUtTkyqtocGa+XndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZndmZ/Td7B+isiSDikctVAAAAAElFTkSuQmCC", + String.class), + // UI FAXTOMAIL_LAUNCH_MODE( diff --git a/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties b/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties index fbc0a2d..e02382d 100644 --- a/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties +++ b/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties @@ -2,6 +2,7 @@ faxToMail.config= faxtomail.config.option.basedir.description= faxtomail.config.option.csv.separator.description= faxtomail.config.option.data.directory.description= +faxtomail.config.option.defaultImageIfMalformedUrl.description= faxtomail.config.option.demo.directory.description= faxtomail.config.option.i18n.directory.description= faxtomail.config.option.i18n.locale.description= 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 b02bc12..2ec2616 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 @@ -28,10 +28,14 @@ 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 org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.mail.MessagingException; import javax.mail.Part; import javax.mail.internet.ContentType; +import java.net.MalformedURLException; +import java.net.URL; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; import java.util.ArrayList; @@ -45,6 +49,11 @@ import java.util.regex.Pattern; */ public class FaxToMailServiceUtils { + /** + * Logger. + */ + private static final Log log = LogFactory.getLog(FaxToMailServiceUtils.class); + public static final Pattern IMG_SRC_PATTERN = Pattern.compile("src=([\"'])(.*?)([\"'])"); public static String addFaxDomainToFaxNumber(String faxNumber, MailFolder folder) { @@ -106,15 +115,16 @@ public class FaxToMailServiceUtils { } /** - * Sometimes, the urls of the images in an email contains spaces. - * But URI.parse(uri) does not accept spaces as a valid character. + * Sometimes, the urls of the images in an email contains spaces or an unknown protocol. + * But URI.parse(uri) does not accept spaces as a valid character nor unknown protocols.. * This method encode the url for them to be compatible with URI.parse + * or replace the url with the one of the error image if the protocol is wrong. * * @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 { + public static String encodeImageSourcesInEmail(String emailContent, String defaultImage) throws URIException { List<String> imgSrcUrls = new ArrayList<>(); Matcher imgSrcMatcher = IMG_SRC_PATTERN.matcher(emailContent); @@ -123,7 +133,23 @@ public class FaxToMailServiceUtils { } for (String imgSrcUrl : imgSrcUrls) { - emailContent = emailContent.replace(imgSrcUrl, URIUtil.encodeQuery(imgSrcUrl)); + + String correctImgUrl; + try { + // test if the url is correct (cf #7855) + new URL(imgSrcUrl); + + correctImgUrl = URIUtil.encodeQuery(imgSrcUrl); + + } catch (MalformedURLException e) { + //if incorrect, replace it with the default image + if (log.isErrorEnabled()) { + log.error("the url of the image " + imgSrcUrl + " is not correct, replace it with the default image"); + } + correctImgUrl = defaultImage; + } + + emailContent = emailContent.replace(imgSrcUrl, correctImgUrl); } 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 a500f2b..3ea6148 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 @@ -2129,7 +2129,8 @@ public class EmailServiceImpl extends FaxToMailServiceSupport implements EmailSe // on reformate les urls pour supprimer les caractères qui vont pas (ex espaces) // cf #7740 - content = FaxToMailServiceUtils.encodeImageSourcesInEmail(content); + String defaultImageIfMalformedUrl = serviceContext.getApplicationConfig().getDefaultImageIfMalformedUrl(); + content = FaxToMailServiceUtils.encodeImageSourcesInEmail(content, defaultImageIfMalformedUrl); contents.add(content); } diff --git a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java index 7d230c0..dc9c48c 100644 --- a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java +++ b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java @@ -24,7 +24,9 @@ package com.franciaflex.faxtomail.services.service; * #L% */ +import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; +import com.franciaflex.faxtomail.persistence.entities.AttachmentImpl; import com.franciaflex.faxtomail.persistence.entities.DemandStatus; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.EmailFilter; @@ -35,8 +37,14 @@ import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.persistence.entities.MailFolderTopiaDao; import com.franciaflex.faxtomail.persistence.entities.Range; import com.franciaflex.faxtomail.persistence.entities.SearchFilter; +import com.franciaflex.faxtomail.services.FaxToMailServiceUtils; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; +import com.google.common.io.Files; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.mail.util.MimeMessageUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -44,14 +52,22 @@ import org.nuiton.topia.persistence.TopiaEntities; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; +import javax.activation.DataHandler; +import javax.mail.Session; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeUtility; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Properties; import java.util.Set; /** @@ -276,69 +292,70 @@ public class EmailServiceTest extends AbstractFaxToMailServiceTest { } -// @Test -// public void testConvertHTMLToPdf() { -// -// try { + @Test + public void testConvertHTMLToPdf() { + + try { // File email = new File("src/test/resources/test.txt"); -// String emailContent = FileUtils.readFileToString(email); -// -// Properties properties = new Properties(); -// // set the mail.mime.address.strict to false to avoid -// // javax.mail.internet.AddressException: Domain contains illegal character errors when recipients contains [] -// properties.setProperty("mail.mime.address.strict", "false"); -// Session session = Session.getInstance(properties); -// -// MimeMessage message = MimeMessageUtils.createMimeMessage(session, emailContent); -// Charset charset = FaxToMailServiceUtils.getCharset(message); -// ArrayList<Attachment> attachments = new ArrayList<>(); -// -// if (message.isMimeType("multipart/*")) { -// -// List<String> htmlContent = service.decomposeMultipartEmail(attachments, message); -// -// Attachment attachment = service.convertHTMLToPdf(attachments, htmlContent, "test"); -// Files.copy(attachment.getOriginalFile().getFile(), new File("/tmp/test.pdf")); -// -// } else if (message.isMimeType("text/*")) { -// // convertit le contenu texte en PDF -// String content = IOUtils.toString(message.getInputStream(), charset); -// if (StringUtils.isNotBlank(content)) { -// Attachment attachment = service.convertTextToPdf(content, "test"); -// Files.copy(attachment.getOriginalFile().getFile(), new File("/tmp/test.pdf")); -// } -// } else { -// String fileName = message.getFileName(); -// try { -// fileName = MimeUtility.decodeText(fileName); -// -// } catch (UnsupportedEncodingException ex) { -// // don't care, use filename raw value -// } -// -// DataHandler dh = message.getDataHandler(); -// -// // create new attachment -// Attachment attachment = new AttachmentImpl(); -// attachment.setAddedByUser(false); -// AttachmentFile attachmentFile = service.getAttachmentFileFromStream(dh.getInputStream()); -// attachmentFile.setFilename(fileName); -// attachment.setOriginalFile(attachmentFile); -// -// // convert attachment if defined by admin -// service.convertIfNecessary(attachment); -// -// // save attachment -// attachments.add(attachment); -// Files.copy(attachment.getOriginalFile().getFile(), new File("/tmp/test.pdf")); -// } -// -// -// } catch (Exception e) { -// e.printStackTrace(); -// } -// -// } + File email = new File("/home/kmorin/Téléchargements/test2.eml"); + String emailContent = FileUtils.readFileToString(email); + + Properties properties = new Properties(); + // set the mail.mime.address.strict to false to avoid + // javax.mail.internet.AddressException: Domain contains illegal character errors when recipients contains [] + properties.setProperty("mail.mime.address.strict", "false"); + Session session = Session.getInstance(properties); + + MimeMessage message = MimeMessageUtils.createMimeMessage(session, emailContent); + Charset charset = FaxToMailServiceUtils.getCharset(message); + ArrayList<Attachment> attachments = new ArrayList<>(); + + if (message.isMimeType("multipart/*")) { + + List<String> htmlContent = service.decomposeMultipartEmail(attachments, message); + + Attachment attachment = service.convertHTMLToPdf(attachments, htmlContent, "test"); + Files.copy(attachment.getOriginalFile().getFile(), new File("/tmp/test.pdf")); + + } else if (message.isMimeType("text/*")) { + // convertit le contenu texte en PDF + String content = IOUtils.toString(message.getInputStream(), charset); + if (StringUtils.isNotBlank(content)) { + Attachment attachment = service.convertTextToPdf(content, "test"); + Files.copy(attachment.getOriginalFile().getFile(), new File("/tmp/test.pdf")); + } + } else { + String fileName = message.getFileName(); + try { + fileName = MimeUtility.decodeText(fileName); + + } catch (UnsupportedEncodingException ex) { + // don't care, use filename raw value + } + + DataHandler dh = message.getDataHandler(); + + // create new attachment + Attachment attachment = new AttachmentImpl(); + attachment.setAddedByUser(false); + AttachmentFile attachmentFile = service.getAttachmentFileFromStream(dh.getInputStream()); + attachmentFile.setFilename(fileName); + attachment.setOriginalFile(attachmentFile); + + // convert attachment if defined by admin + service.convertIfNecessary(attachment); + + // save attachment + attachments.add(attachment); + Files.copy(attachment.getOriginalFile().getFile(), new File("/tmp/test.pdf")); + } + + + } catch (Exception e) { + e.printStackTrace(); + } + + } // @Test // public void testSendEmail() { 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 601af8a..42c1b24 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 @@ -846,7 +846,7 @@ 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); + content = FaxToMailServiceUtils.encodeImageSourcesInEmail(content, handler.getConfig().getDefaultImageIfMalformedUrl()); textPane.setText(content); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm