This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 2848fd26fbe55590ce9db2990c97caa2f10b383a Author: Tran Tien Duc <[email protected]> AuthorDate: Fri Nov 1 11:00:57 2019 +0700 JAMES-2957 DLP cannot read email multipart body Because of the miss used `geronimo.javamail` presenting in the classpath --- .../transport/mailets/DlpIntegrationTest.java | 50 +++++++- .../eml/dlp_read_mail_with_attachment.eml | 139 +++++++++++++++++++++ 2 files changed, 185 insertions(+), 4 deletions(-) diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java index 413bde7..aa49e1d 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java @@ -27,6 +27,7 @@ import static org.apache.james.mailets.configuration.Constants.PASSWORD; import static org.apache.james.mailets.configuration.Constants.RECIPIENT; import static org.apache.james.mailets.configuration.Constants.RECIPIENT2; import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute; +import static org.assertj.core.api.Assertions.assertThat; import org.apache.james.MemoryJamesServerMain; import org.apache.james.core.builder.MimeMessageBuilder; @@ -35,9 +36,10 @@ import org.apache.james.mailets.configuration.MailetConfiguration; import org.apache.james.mailets.configuration.MailetContainer; import org.apache.james.mailets.configuration.ProcessorConfiguration; import org.apache.james.mailrepository.api.MailRepositoryUrl; +import org.apache.james.modules.protocols.ImapGuiceProbe; import org.apache.james.modules.protocols.SmtpGuiceProbe; -import org.apache.james.transport.matchers.All; import org.apache.james.transport.matchers.dlp.Dlp; +import org.apache.james.util.ClassLoaderUtils; import org.apache.james.utils.DataProbeImpl; import org.apache.james.utils.IMAPMessageReader; import org.apache.james.utils.SMTPMessageSender; @@ -46,6 +48,7 @@ import org.apache.james.webadmin.WebAdminUtils; import org.apache.mailet.base.test.FakeMail; import org.eclipse.jetty.http.HttpStatus; import org.junit.After; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -74,9 +77,7 @@ public class DlpIntegrationTest { ProcessorConfiguration.transport() .addMailet(MailetConfiguration.BCC_STRIPPER) .addMailet(dlpMailet) - .addMailet(MailetConfiguration.builder() - .matcher(All.class) - .mailet(Null.class))); + .addMailet(MailetConfiguration.LOCAL_DELIVERY)); jamesServer = TemporaryJamesServer.builder() .withBase(Modules.combine(MemoryJamesServerMain.SMTP_AND_IMAP_MODULE, MemoryJamesServerMain.WEBADMIN_TESTING)) @@ -240,6 +241,47 @@ public class DlpIntegrationTest { awaitAtMostOneMinute.until(() -> containsExactlyOneMail(repositoryUrl)); } + @Ignore("Dlp got an exception of parsing email body containing attachment with a part of error message: " + + "javax.activation.UnsupportedDataTypeException: Unknown image type image/jpeg; name=\"linux.jpeg\"") + @Test + public void dlpShouldBeAbleToReadMailContentWithAttachments() throws Exception { + createJamesServer(MailetConfiguration.builder() + .matcher(Dlp.class) + .mailet(ToSenderDomainRepository.class) + .addProperty(ToSenderDomainRepository.URL_PREFIX, REPOSITORY_PREFIX) + .addProperty(ToSenderDomainRepository.ALLOW_REPOSITORY_CREATION, "false")); + + MailRepositoryUrl repositoryUrl = MailRepositoryUrl.from(REPOSITORY_PREFIX + DEFAULT_DOMAIN); + given() + .spec(specification) + .param("protocol", repositoryUrl.getProtocol().getValue()) + .put("/mailRepositories/" + repositoryUrl.getPath().urlEncoded()); + + given() + .spec(specification) + .body("{\"rules\":[{" + + " \"id\": \"1\"," + + " \"expression\": \"matchMe\"," + + " \"explanation\": \"\"," + + " \"targetsSender\": false," + + " \"targetsRecipients\": false," + + " \"targetsContent\": true" + + "}]}") + .put("/dlp/rules/" + DEFAULT_DOMAIN); + + messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpAuthRequiredPort()) + .authenticate(FROM, PASSWORD) + .sendMessageWithHeaders(FROM, RECIPIENT, + ClassLoaderUtils.getSystemResourceAsString("eml/dlp_read_mail_with_attachment.eml")); + + imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort()) + .login(RECIPIENT, PASSWORD) + .select(IMAPMessageReader.INBOX) + .awaitMessage(awaitAtMostOneMinute); + assertThat(imapMessageReader.readFirstMessage()).containsSequence("dlp subject"); + + } + private boolean containsExactlyOneMail(MailRepositoryUrl repositoryUrl) { try { return given() diff --git a/server/mailet/integration-testing/src/test/resources/eml/dlp_read_mail_with_attachment.eml b/server/mailet/integration-testing/src/test/resources/eml/dlp_read_mail_with_attachment.eml new file mode 100644 index 0000000..6abfd39 --- /dev/null +++ b/server/mailet/integration-testing/src/test/resources/eml/dlp_read_mail_with_attachment.eml @@ -0,0 +1,139 @@ +To: [email protected] +From: [email protected] +Subject: dlp subject +Message-ID: <[email protected]> +Date: Fri, 1 Nov 2019 10:21:39 +0700 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 + Thunderbird/60.2.1 +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="------------589DDD2515E3B3CC74D74E40" +Content-Language: en-US + +This is a multi-part message in MIME format. +--------------589DDD2515E3B3CC74D74E40 +Content-Type: text/plain; charset=utf-8; format=flowed +Content-Transfer-Encoding: 7bit + +matchAnother + + + +--------------589DDD2515E3B3CC74D74E40 +Content-Type: image/jpeg; + name="linux.jpeg" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="linux.jpeg" + +/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMSEhIQEBIVFRUXFRcYFhgVFxUVGBUQFRgW +FhcVFxUdHSggGBonGxUWITIlJSkrLi4uFx8/ODMsNygtLisBCgoKDg0OGhAQGjMlICY4Mi83 +NSs3LTcyMC8wLTAtLS0tLy0tNS0vLzUtLS0tLS0tLzYvKy0tLS0tLy0tLS0tLf/AABEIAOEA +4QMBIgACEQEDEQH/xAAcAAEAAgIDAQAAAAAAAAAAAAAAce +BgcEBQIDCAH/xABDEAABAwICBwUE +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 + +--------------589DDD2515E3B3CC74D74E40-- --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
