public static LoadedOnceInitParameters from(InitParameters initParameters) { return new LoadedOnceInitParameters(true, initParameters.getPassThrough(), initParameters.getFakeDomainCheck(), initParameters.getInLineType(), initParameters.getAttachmentType(), initParameters.getMessage(), initParameters.getSubject(), initParameters.getSubjectPrefix(), initParameters.isAttachError(), initParameters.isReply(), initParameters.getRecipients(), initParameters.getTo(), initParameters.getReversePath(), initParameters.getSender(), initParameters.getReplyTo(), initParameters.isDebug()); }
private void passThrough(Mail originalMail) throws MessagingException { if (getInitParameters().isDebug()) { LOGGER.debug("Processing a bounce request for a message with an empty reverse-path. No bounce will be sent."); } if (!getInitParameters().getPassThrough()) { originalMail.setState(Mail.GHOST); } }
private String getText(Mail originalMail, MimeMessage originalMessage, String head) throws MessagingException { StringBuilder builder = new StringBuilder(); String messageText = mailet.getMessage(originalMail); if (messageText != null) { builder.append(messageText) .append(LINE_BREAK); } if (mailet.getInitParameters().isDebug()) { LOGGER.debug("inline:{}", mailet.getInitParameters().getInLineType()); } switch (mailet.getInitParameters().getInLineType()) { case ALL: builder.append(headText(head)); builder.append(bodyText(originalMessage)); break; case HEADS: builder.append(headText(head)); break; case BODY: builder.append(bodyText(originalMessage)); break; case NONE: break; case MESSAGE: break; case UNALTERED: break; } return builder.toString(); }
private MimeMultipart generateMultipartContent(MimeMessage originalMessage, String head) throws Exception { // Create the message body MimeMultipart multipart = new MimeMultipart("mixed"); // Create the message MimeMultipart mpContent = new MimeMultipart("alternative"); mpContent.addBodyPart(getBodyPart(originalMail, originalMessage, head)); MimeBodyPart contentPartRoot = new MimeBodyPart(); contentPartRoot.setContent(mpContent); multipart.addBodyPart(contentPartRoot); if (mailet.getInitParameters().isDebug()) { LOGGER.debug("attachmentType:{}", mailet.getInitParameters().getAttachmentType()); } if (!mailet.getInitParameters().getAttachmentType().equals(TypeCode.NONE)) { multipart.addBodyPart(getAttachmentPart(originalMessage, head)); } if (mailet.getInitParameters().isAttachError() && originalMail.getErrorMessage() != null) { multipart.addBodyPart(getErrorPart(originalMail)); } return multipart; }
@Override public Optional<MailAddress> getReversePath() throws MessagingException { return SpecialAddressesUtils.from(this) .getFirstSpecialAddressIfMatchingOrGivenAddress(getInitParameters().getReversePath(), ImmutableList.of("postmaster", "sender", "null")); }
@Override public Optional<MailAddress> getSender() throws MessagingException { return SpecialAddressesUtils.from(this) .getFirstSpecialAddressIfMatchingOrGivenAddress(getInitParameters().getSender(), RedirectNotify.SENDER_ALLOWED_SPECIALS); }
@Override public String getMessage(Mail originalMail) throws MessagingException { return getInitParameters().getMessage(); }
@Override public Optional<MailAddress> getReplyTo() throws MessagingException { Optional<String> replyTo = getInitParameters().getReplyTo(); if (!replyTo.isPresent()) { return Optional.empty(); } return AddressExtractor.withContext(getMailetContext()) .allowedSpecials(ImmutableList.of("postmaster", "sender", "null", "unaltered")) .extract(replyTo) .stream() .findFirst(); }
mailModifier.setRemoteHost(); if (mailet.getInitParameters().isDebug()) { LOGGER.debug("New mail - sender: {}, recipients: {}, name: {}, remoteHost: {}, remoteAddr: {}, state: {}, lastUpdated: {}, errorMessage: {}", newMail.getMaybeSender(), newMail.getRecipients(), newMail.getName(), newMail.getRemoteHost(), newMail.getRemoteAddr(), newMail.getState(), newMail.getLastUpdated(), newMail.getErrorMessage()); mailModifier.setReplyTo(mailet.getReplyTo(originalMail)); mailModifier.setReversePath(mailet.getReversePath(originalMail)); mailModifier.setIsReply(mailet.getInitParameters().isReply(), originalMail); mailModifier.setSender(mailet.getSender(originalMail)); mailModifier.initializeDateIfNotPresent(); if (!mailet.getInitParameters().getPassThrough()) { originalMail.setState(Mail.GHOST);
private void createUnalteredMessage(Mail originalMail, MailImpl newMail) throws MessagingException { // if we need the original, create a copy of this message to // redirect if (mailet.getInitParameters().getPassThrough()) { newMail.setMessage(new CopiedMimeMessage(originalMail.getMessage())); } if (isDebug) { LOGGER.debug("Message resent unaltered."); } }
return !mailet.getInitParameters().getFakeDomainCheck() || !mail.hasSender() || !mailet.getMailetContext()
@Override public List<MailAddress> getRecipients() throws MessagingException { ImmutableList.Builder<MailAddress> builder = ImmutableList.builder(); List<MailAddress> mailAddresses = AddressExtractor.withContext(getMailetContext()) .allowedSpecials(ImmutableList.of("postmaster", "sender", "from", "replyTo", "reversePath", "unaltered", "recipients", "to", "null")) .extract(getInitParameters().getRecipients()); for (MailAddress address : mailAddresses) { builder.add(address); } return builder.build(); }
private MimeMultipartReport createMultipart(Mail originalMail) throws MessagingException { MimeMultipartReport multipart = new MimeMultipartReport(); multipart.setReportType("delivery-status"); multipart.addBodyPart(createTextMsg(originalMail)); multipart.addBodyPart(createDSN(originalMail)); if (!getInitParameters().getAttachmentType().equals(TypeCode.NONE)) { multipart.addBodyPart(createAttachedOriginal(originalMail, getInitParameters().getAttachmentType())); } return multipart; }
private boolean keepMessageId() { return mailet.getInitParameters().getInLineType().equals(TypeCode.UNALTERED); }
@Override public Optional<String> getSubjectPrefix(Mail newMail, String subjectPrefix, Mail originalMail) throws MessagingException { return new MimeMessageUtils(newMail.getMessage()).subjectWithPrefix(subjectPrefix, originalMail, getInitParameters().getSubject()); }
@Override public Optional<MailAddress> getReversePath() throws MessagingException { return SpecialAddressesUtils.from(this) .getFirstSpecialAddressIfMatchingOrGivenAddress(getInitParameters().getReversePath(), RedirectNotify.REVERSE_PATH_ALLOWED_SPECIALS); }
@Override public Optional<MailAddress> getSender() throws MessagingException { return SpecialAddressesUtils.from(this) .getFirstSpecialAddressIfMatchingOrGivenAddress(getInitParameters().getSender(), RedirectNotify.SENDER_ALLOWED_SPECIALS); }
@Override public String getMessage(Mail originalMail) throws MessagingException { return getInitParameters().getMessage(); }
@Override public Optional<MailAddress> getReplyTo() throws MessagingException { Optional<String> replyTo = getInitParameters().getReplyTo(); List<MailAddress> extractAddresses = AddressExtractor.withContext(getMailetContext()) .allowedSpecials(ImmutableList.of("postmaster", "sender", "null", "unaltered")) .extract(replyTo); return extractAddresses.stream() .findFirst(); }
@Override public void service(Mail originalMail) throws MessagingException { if (hasSender(originalMail)) { trySendBounce(originalMail); } if (!getInitParameters().getPassThrough()) { originalMail.setState(Mail.GHOST); } }