public static MailAddress getMailSender(String sender) { if (sender == null || sender.trim().length() <= 0) { return null; } if (sender.equals(MailAddress.NULL_SENDER_AS_STRING)) { return MailAddress.nullSender(); } try { return new MailAddress(sender); } catch (AddressException e) { // Should never happen as long as the user does not modify the header by himself LOGGER.error("Unable to parse the sender address {}, so we fallback to a null sender", sender, e); return MailAddress.nullSender(); } }
/** * Prefer using {@link MaybeSender#getMailSender(String)} */ @Deprecated public static MailAddress getMailSender(String sender) { if (sender == null || sender.trim().length() <= 0) { return null; } if (sender.equals(MailAddress.NULL_SENDER_AS_STRING)) { return MailAddress.nullSender(); } try { return new MailAddress(sender); } catch (AddressException e) { // Should never happen as long as the user does not modify the header by himself LOGGER.error("Unable to parse the sender address {}, so we fallback to a null sender", sender, e); return MailAddress.nullSender(); } }
/** * Return the HookResult after run the hook * * This strongly typed version of do mail is safer to use. * * @since James 3.2.0 */ default HookResult doMail(SMTPSession session, MaybeSender sender) { return doMail(session, sender.asOptional().orElse(MailAddress.nullSender())); } }
/** * Return the sender of the mail which was supplied int the MAIL FROM: * command. If its a "null" sender, null will get returned * * @deprecated @see {@link #getMaybeSender()} * * Note that SMTP null sender ( "<>" ) needs to be implicitly handled by the caller under the form of 'null' or * {@link MailAddress#nullSender()}. Replacement method adds type safety on this operation. * * @return sender */ @Deprecated default MailAddress getSender() { return getMaybeSender().asOptional().orElse(MailAddress.nullSender()); }
@Test public void equalsShouldReturnTrueWhenBothNullSender() { assertThat(MailAddress.nullSender()) .isEqualTo(MailAddress.nullSender()); }
@Test public void equalsShouldReturnTrueWhenBothNullSender() { assertThat(MailAddress.nullSender()) .isEqualTo(MailAddress.nullSender()); }
@SuppressWarnings("deprecation") @Test public void getMailSenderShouldReturnNullSenderWhenNullSender() { assertThat(MailAddress.getMailSender(MailAddress.NULL_SENDER_AS_STRING)) .isEqualTo(MailAddress.nullSender()); }
@Test public void getMailSenderShouldReturnNullSenderWhenNullSender() { assertThat(MailAddress.getMailSender(MailAddress.NULL_SENDER_AS_STRING)) .isEqualTo(MailAddress.nullSender()); }
@Test void ofShouldSanitizeNullSender() { assertThat(MaybeSender.of(MailAddress.nullSender())) .isEqualTo(MaybeSender.nullSender()); }
@Test void ofShouldSanitizeNullSender() { assertThat(MaybeSender.of(MailAddress.nullSender())) .isEqualTo(MaybeSender.nullSender()); }
@Test public void equalsShouldReturnFalseWhenOnlySecondMemberIsANullSender() { assertThat(MailAddress.nullSender()) .isNotEqualTo(MailAddress.getMailSender(GOOD_ADDRESS)); }
@Test public void equalsShouldReturnFalseWhenOnlyFirstMemberIsANullSender() { assertThat(MailAddress.getMailSender(GOOD_ADDRESS)) .isNotEqualTo(MailAddress.nullSender()); }
@SuppressWarnings("deprecation") @Test public void equalsShouldReturnFalseWhenOnlyFirstMemberIsANullSender() { assertThat(MailAddress.getMailSender(GOOD_ADDRESS)) .isNotEqualTo(MailAddress.nullSender()); }
@SuppressWarnings("deprecation") @Test public void equalsShouldReturnFalseWhenOnlySecondMemberIsANullSender() { assertThat(MailAddress.nullSender()) .isNotEqualTo(MailAddress.getMailSender(GOOD_ADDRESS)); }
@Test public void bouncingToNullSenderShouldBeANoop() throws Exception { MailImpl mail = new MailImpl(); mail.setSender(MailAddress.nullSender()); mail.setRecipients(ImmutableList.of(mailAddress)); mail.setMessage(MimeMessageUtil.defaultMimeMessage()); testee.bounce(mail, "message"); verifyZeroInteractions(spoolMailQueue); }
@Test public final void manageSieveMailetShouldIgnoreNullSender() throws Exception { MimeMessage message = prepareMimeMessage("SETACTIVE"); Mail mail = FakeMail.builder() .mimeMessage(message) .sender(MailAddress.nullSender()) .recipient(SIEVE_LOCALHOST) .build(); mailet.service(mail); assertThat(fakeMailContext.getSentMails()).isEmpty(); }
@Test void nullSenderShouldBeIgnored() throws Exception { Dlp dlp = new Dlp( asRulesLoaderFor( JAMES_APACHE_ORG_DOMAIN, DlpDomainRules.builder().recipientRule(Id.of("match all recipient"), Pattern.compile(".*")).build())); FakeMail mail = FakeMail.builder().sender(MailAddress.nullSender()).recipient(RECIPIENT1).build(); assertThat(dlp.match(mail)).isEmpty(); }
@Test default void storeRegularMailShouldNotFailWhenNullSender() throws Exception { MailRepository testee = retrieveRepository(); Mail mail = FakeMail.builder() .sender(MailAddress.nullSender()) .recipient(MailAddressFixture.RECIPIENT1) .name(MAIL_1.asString()) .mimeMessage(generateMailContent("String body")) .build(); testee.store(mail); assertThat(testee.retrieve(MAIL_1).getMaybeSender()).isEqualTo(MaybeSender.nullSender()); }
@Test public void bounceShouldNotSendEmailToNullSender() throws Exception { FakeMailetConfig mailetConfig = FakeMailetConfig.builder() .mailetName(MAILET_NAME) .mailetContext(fakeMailContext) .build(); bounce.init(mailetConfig); FakeMail mail = FakeMail.builder() .name(MAILET_NAME) .sender(MailAddress.nullSender()) .recipient(MailAddressFixture.ANY_AT_JAMES) .mimeMessage(MimeMessageBuilder.mimeMessageBuilder() .setText("My content")) .build(); bounce.service(mail); assertThat(fakeMailContext.getSentMails()).isEmpty(); }