private void querySpamAssassin(Mail mail, MimeMessage message, SpamAssassinInvoker sa, MailAddress recipient) throws MessagingException, UsersRepositoryException { SpamAssassinResult result = sa.scanMail(message, usersRepository.getUser(recipient)); // Add headers per recipient to mail object for (String key : result.getHeadersAsAttribute().keySet()) { mail.addSpecificHeaderForRecipient(PerRecipientHeaders.Header.builder() .name(key) .value(result.getHeadersAsAttribute().get(key)) .build(), recipient); } }
@Test default void retrieveShouldReturnAllMailProperties() throws Exception { MailRepository testee = retrieveRepository(); MailImpl mail = createMail(MAIL_1); mail.setErrorMessage("Error message"); mail.setRemoteAddr("172.5.2.3"); mail.setRemoteHost("smtp@domain.com"); mail.setLastUpdated(new Date()); mail.addSpecificHeaderForRecipient(PerRecipientHeaders.Header.builder() .name("name") .value("value") .build(), new MailAddress("bob@domain.com")); testee.store(mail); assertThat(testee.retrieve(MAIL_1)).satisfies(actual -> checkMailEquality(actual, mail)); }
@Test public void isMarkedAsSpamShouldNotMatchWhenHeaderButOtherValue() throws Exception { FakeMail mail = FakeMail.builder() .sender("sender@james.org") .recipient("to@james.org") .addHeaderForRecipient(PerRecipientHeaders.Header.builder() .name("org.apache.james.spamassassin.status") .value("other") .build(), new MailAddress("to@james.org")) .build(); Collection<MailAddress> matches = matcher.match(mail); assertThat(matches).isEmpty(); }
.size(42424242) .addHeaderForRecipient(Header.builder() .name("headerName1") .value("value1") .build(), recipientHeaderAddress) .addHeaderForRecipient(Header.builder() .name("headerName1") .value("value2") .build(), recipientHeaderAddress) .addHeaderForRecipient(Header.builder() .name("headerName2") .value("value3") .build(), recipientHeaderAddress) .addHeaderForRecipient(Header.builder() .name("headerName2") .value("value4") .build(), recipientHeaderAddress)
.addHeaderForRecipient( PerRecipientHeaders.Header.builder() .name(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME) .value("YES"), new MailAddress("user1@exemple.com")) .addHeaderForRecipient( PerRecipientHeaders.Header.builder() .name(SpamAssassinResult.STATUS_MAIL_ATTRIBUTE_NAME) .value("Yes, hits=1000 required=5"), new MailAddress("user1@exemple.com")));
.addHeaderForRecipient( PerRecipientHeaders.Header.builder() .name(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME) .value("NO"), new MailAddress("user1@exemple.com")) .addHeaderForRecipient( PerRecipientHeaders.Header.builder() .name(SpamAssassinResult.STATUS_MAIL_ATTRIBUTE_NAME) .value("No, hits=3 required=5"), new MailAddress("user1@exemple.com")));
@Test public void isMarkedAsSpamShouldMatchWhenHeaderAndYesValueInOtherCase() throws Exception { FakeMail mail = FakeMail.builder() .sender("sender@james.org") .recipient("to@james.org") .addHeaderForRecipient(PerRecipientHeaders.Header.builder() .name("org.apache.james.spamassassin.status") .value("YES, hits=6.8 required=5.0") .build(), new MailAddress("to@james.org")) .build(); Collection<MailAddress> matches = matcher.match(mail); assertThat(matches).contains(new MailAddress("to@james.org")); } }
@Test public void isMarkedAsSpamShouldMatchWhenHeaderAndYesValue() throws Exception { FakeMail mail = FakeMail.builder() .sender("sender@james.org") .recipient("to@james.org") .addHeaderForRecipient(PerRecipientHeaders.Header.builder() .name("org.apache.james.spamassassin.status") .value("Yes, hits=6.8 required=5.0") .build(), new MailAddress("to@james.org")) .attribute("org.apache.james.spamassassin.status", "Yes, hits=6.8 required=5.0") .build(); Collection<MailAddress> matches = matcher.match(mail); assertThat(matches).contains(new MailAddress("to@james.org")); }
@Test public void isMarkedAsSpamShouldNotMatchWhenHeaderButEmptyValue() throws Exception { FakeMail mail = FakeMail.builder() .sender("sender@james.org") .recipient("to@james.org") .addHeaderForRecipient(PerRecipientHeaders.Header.builder() .name("org.apache.james.spamassassin.status") .value("other") .build(), new MailAddress("to@james.org")) .build(); Collection<MailAddress> matches = matcher.match(mail); assertThat(matches).isEmpty(); }
@Test public void isMarkedAsSpamShouldMatchOnlyRecipientsWithHeaderAndYesValue() throws Exception { FakeMail mail = FakeMail.builder() .sender("sender@james.org") .recipients("to1@james.org", "to2@james.org") .addHeaderForRecipient(PerRecipientHeaders.Header.builder() .name("org.apache.james.spamassassin.status") .value("Yes, hits=6.8 required=5.0") .build(), new MailAddress("to1@james.org")) .build(); Collection<MailAddress> matches = matcher.match(mail); assertThat(matches).contains(new MailAddress("to1@james.org")); }
@Test public void isMarkedAsSpamShouldNotMatchWhenHeaderButNoValue() throws Exception { FakeMail mail = FakeMail.builder() .sender("sender@james.org") .recipient("to@james.org") .addHeaderForRecipient(PerRecipientHeaders.Header.builder() .name("org.apache.james.spamassassin.status") .value("No, hits=1.8 required=5.0") .build(), new MailAddress("to@james.org")) .build(); Collection<MailAddress> matches = matcher.match(mail); assertThat(matches).isEmpty(); }