public String asString() { return asString(MailAddress.NULL_SENDER_AS_STRING); }
private boolean senderIsMailingList(Mail mail) { return mail.getMaybeSender() .asOptional() .map(MailAddress::getLocalPart) .map(localPart -> localPart.startsWith("owner-") || localPart.endsWith("-request") || localPart.equalsIgnoreCase("MAILER-DAEMON") || localPart.equalsIgnoreCase("LISTSERV") || localPart.equalsIgnoreCase("majordomo")) .orElse(false); }
private MaybeSender toMaybeSender(String senderAsString) throws AddressException { if (senderAsString.length() == 0) { // This is the <> case. return MaybeSender.nullSender(); } if (senderAsString.equals("@")) { return MaybeSender.nullSender(); } return MaybeSender.of(new MailAddress( appendDefaultDomainIfNeeded(senderAsString))); }
private boolean senderMatchSessionUser(MaybeSender maybeSender, SMTPSession session) { Preconditions.checkArgument(!maybeSender.isNullSender()); String authUser = session.getUser().toLowerCase(Locale.US); String username = getUser(maybeSender.get()); return username.equals(authUser); }
private String getContext(SMTPSession session, MailAddress recipientAddress, String recipient) { StringBuilder sb = new StringBuilder(128); if (null != recipientAddress) { sb.append(" [to:").append(recipientAddress.asString()).append(']'); } else if (null != recipient) { sb.append(" [to:").append(recipient).append(']'); } MaybeSender sender = (MaybeSender) session.getAttachment(SMTPSession.SENDER, State.Transaction); if (null != sender && !sender.isNullSender()) { sb.append(" [from:").append(sender.asString()).append(']'); } return sb.toString(); }
@Test void asStringWithDefaultShouldReturnDefaultWhenNullSender() { assertThat(MaybeSender.nullSender().asString("default")) .isEqualTo("default"); }
/** * Generates a bounce mail that is a bounce of the original message. * * @param bounceText the text to be prepended to the message to describe the bounce * condition * @return the bounce mail * @throws MessagingException if the bounce mail could not be created */ private MailImpl rawBounce(Mail mail, String bounceText) throws MessagingException { Preconditions.checkArgument(mail.hasSender(), "Mail should have a sender"); // This sends a message to the james component that is a bounce of the sent message MimeMessage original = mail.getMessage(); MimeMessage reply = (MimeMessage) original.reply(false); reply.setSubject("Re: " + original.getSubject()); reply.setSentDate(new Date()); Collection<MailAddress> recipients = mail.getMaybeSender().asList(); MailAddress sender = mail.getMaybeSender().get(); reply.setRecipient(Message.RecipientType.TO, new InternetAddress(mail.getMaybeSender().asString())); reply.setFrom(new InternetAddress(mail.getRecipients().iterator().next().toString())); reply.setText(bounceText); reply.setHeader(RFC2822Headers.MESSAGE_ID, "replyTo-" + mail.getName()); return new MailImpl("replyTo-" + mail.getName(), sender, recipients, reply); }
@Override public Collection<MailAddress> match(Mail mail) { try { if (mail.hasSender()) { recipientRewriteTable.getMappings(mail.getMaybeSender().get().getLocalPart(), mail.getMaybeSender().get().getDomain()); } } catch (RecipientRewriteTable.TooManyMappingException e) { return mail.getRecipients(); } catch (Exception e) { LoggerFactory.getLogger(IsSenderInRRTLoop.class).warn("Error while executing RRT"); } return ImmutableList.of(); } }
@Test void asOptionalShouldReturnWrappedValue() { assertThat(MaybeSender.of(mailAddress).asOptional()) .contains(mailAddress); }
@Test void asOptionalShouldReturnEmptyWhenNullSender() { assertThat(MaybeSender.nullSender().asOptional()) .isEmpty(); }
private List<MailAddress> getSenderAsList(Mail originalMail) { MaybeSender reversePath = originalMail.getMaybeSender(); if (getInitParameters().isDebug()) { LOGGER.debug("Processing a bounce request for a message with a reverse path. The bounce will be sent to {}", reversePath.asString()); } return reversePath.asList(); }
@Test void getShouldThrowWhenNullSender() { assertThatThrownBy(() -> MaybeSender.nullSender().get()) .isInstanceOf(NoSuchElementException.class); }
@Test void isNullSenderShouldReturnFalseWhenNotNullSender() { assertThat(MaybeSender.of(mailAddress).isNullSender()) .isFalse(); }
@Test public void testNullSenderNotReject() { ValidSenderDomainHandler handler = createHandler(); HookReturnCode response = handler.doMail(setupMockedSession(null), MaybeSender.nullSender()).getResult(); assertThat(HookReturnCode.declined()).describedAs("Not blocked cause its a nullsender").isEqualTo(response); }
@Test void asListShouldReturnEmptyWhenNullSender() { assertThat(MaybeSender.nullSender().asList()) .isEmpty(); }
@Test void isNullSenderShouldReturnTrueWhenNullSender() { assertThat(MaybeSender.nullSender().isNullSender()) .isTrue(); }