branch develop updated (b861596 -> ddf2863)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository faxtomail. See http://git.codelutin.com/faxtomail.git from b861596 remove sleep for tests new ddf2863 à 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 ddf286308a9c8110f54fb4c2f196c7af605256b1 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) Summary of changes: .../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 | 3 +- 7 files changed, 124 insertions(+), 69 deletions(-) -- 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 develop in repository faxtomail. See http://git.codelutin.com/faxtomail.git commit ddf286308a9c8110f54fb4c2f196c7af605256b1 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 | 3 +- 7 files changed, 124 insertions(+), 69 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 f643814..2ce2e93 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java @@ -347,6 +347,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 ab3515c..a99a486 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java @@ -193,12 +193,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 e72d288..37424a8 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 5fc7b5a..42d1a73 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 @@ -2136,7 +2136,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 9719f39..782007c 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; /** @@ -279,69 +295,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 e81dfb4..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 @@ -80,7 +80,6 @@ import javax.swing.JTextPane; import javax.swing.JTree; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; -import javax.swing.text.StyledEditorKit; import javax.swing.text.html.HTMLEditorKit; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; @@ -847,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