http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java index ed0feba..fa6d851 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java @@ -260,8 +260,7 @@ public class SieveMailAdapter implements MailAdapter, EnvelopeAccessors, ActionC * @return String */ public String getEnvelopeFrom() { - MailAddress sender = getMail().getSender(); - return (null == sender ? "" : sender.toString()); + return getMail().getMaybeSender().asString(""); } /**
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java index 516aeb2..bbff1be 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java @@ -38,7 +38,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; +import com.google.common.collect.ImmutableList; public class VacationReply { private static final Logger LOGGER = LoggerFactory.getLogger(VacationReply.class); @@ -53,6 +53,8 @@ public class VacationReply { private String subject; public Builder(Mail originalMail, ActionContext context) { + Preconditions.checkArgument(originalMail.hasSender()); + this.originalMail = originalMail; this.context = context; } @@ -85,7 +87,7 @@ public class VacationReply { reply.setSubject(generateNotificationSubject()); reply.setContent(generateNotificationContent()); - return new VacationReply(retrieveOriginalSender(), Lists.newArrayList(originalMail.getSender()), reply); + return new VacationReply(retrieveOriginalSender(), ImmutableList.of(originalMail.getMaybeSender().get()), reply); } private boolean eitherReasonOrMime() { @@ -126,18 +128,18 @@ public class VacationReply { return multipart; } - private MailAddress retrieveOriginalSender() throws AddressException { + private MailAddress retrieveOriginalSender() { return Optional.ofNullable(from) - .map(address -> retrieveAddressFromString(address, context)) + .flatMap(this::retrieveAddressFromString) .orElse(context.getRecipient()); } - private MailAddress retrieveAddressFromString(String address, ActionContext context) { + private Optional<MailAddress> retrieveAddressFromString(String address) { try { - return new MailAddress(address); + return Optional.of(new MailAddress(address)); } catch (AddressException e) { LOGGER.warn("Mail address {} was not well formatted : {}", address, e.getLocalizedMessage()); - return null; + return Optional.empty(); } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailet.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailet.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailet.java index ba2f23f..6fb60b7 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailet.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailet.java @@ -45,7 +45,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.Lists; /** * <code>ManageSieveMailet</code> interprets mail from a local sender as @@ -122,11 +121,11 @@ public class ManageSieveMailet extends GenericMailet implements MessageToCoreToM @Override public void service(Mail mail) throws MessagingException { // Sanity checks - if (mail.getSender() == null || mail.getSender().isNullSender()) { + if (!mail.hasSender()) { LOGGER.error("Sender is null"); return; } - if (!getMailetContext().isLocalServer(mail.getSender().getDomain())) { + if (!getMailetContext().isLocalServer(mail.getMaybeSender().get().getDomain())) { LOGGER.error("Sender not local"); return; } @@ -138,8 +137,11 @@ public class ManageSieveMailet extends GenericMailet implements MessageToCoreToM } else { session.setState(Session.State.UNAUTHENTICATED); } - session.setUser(mail.getSender().asString()); - getMailetContext().sendMail(mail.getRecipients().iterator().next(), Lists.newArrayList(mail.getSender()),transcoder.execute(session, mail.getMessage())); + session.setUser(mail.getMaybeSender().get().asString()); + getMailetContext().sendMail( + mail.getRecipients().iterator().next(), + mail.getMaybeSender().asList(), + transcoder.execute(session, mail.getMessage())); mail.setState(Mail.GHOST); // And tidy up http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java index 1a7e1ee..a6b2192 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java @@ -69,7 +69,7 @@ public class NotifyMailetsMessage { builder.append(" Sent date: " + message.getSentDate()) .append(LINE_BREAK); } - builder.append(" MAIL FROM: " + originalMail.getSender()) + builder.append(" MAIL FROM: " + originalMail.getMaybeSender().asString()) .append(LINE_BREAK); boolean firstRecipient = true; http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java index c66881f..145b68e 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java @@ -58,7 +58,7 @@ public class ProcessRedirectNotify { if (mailet.getInitParameters().isDebug()) { LOGGER.debug("New mail - sender: {}, recipients: {}, name: {}, remoteHost: {}, remoteAddr: {}, state: {}, lastUpdated: {}, errorMessage: {}", - newMail.getSender(), newMail.getRecipients(), newMail.getName(), newMail.getRemoteHost(), newMail.getRemoteAddr(), newMail.getState(), newMail.getLastUpdated(), newMail.getErrorMessage()); + newMail.getMaybeSender(), newMail.getRecipients(), newMail.getName(), newMail.getRemoteHost(), newMail.getRemoteAddr(), newMail.getState(), newMail.getLastUpdated(), newMail.getErrorMessage()); } // Create the message @@ -92,7 +92,7 @@ public class ProcessRedirectNotify { } } else { throw new MessagingException(mailet.getMailetName() + " mailet cannot forward " + originalMail.getName() + ". " + - "Invalid sender domain for " + newMail.getSender() + ". " + + "Invalid sender domain for " + newMail.getMaybeSender().asString() + ". " + "Consider using the Resend mailet " + "using a different sender."); } @@ -177,9 +177,9 @@ public class ProcessRedirectNotify { @SuppressWarnings("deprecation") private boolean senderDomainIsValid(Mail mail) throws MessagingException { return !mailet.getInitParameters().getFakeDomainCheck() - || mail.getSender() == null + || !mail.hasSender() || !mailet.getMailetContext() - .getMailServers(mail.getSender() + .getMailServers(mail.getMaybeSender().get() .getDomain()) .isEmpty(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java index 0cff3cb..43cfce3 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java @@ -47,7 +47,7 @@ public class Bouncer { } public void bounce(Mail mail, Exception ex) { - if (mail.getSender() == null) { + if (!mail.hasSender()) { LOGGER.debug("Null Sender: no bounce will be generated for {}", mail.getName()); } else { if (configuration.getBounceProcessor() != null) { http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrer.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrer.java index 2999338..64ca447 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrer.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrer.java @@ -91,7 +91,7 @@ public class MailDelivrer { private ExecutionResult tryDeliver(Mail mail) throws MessagingException { if (mail.getRecipients().isEmpty()) { LOGGER.info("No recipients specified... not sure how this could have happened."); - return ExecutionResult.permanentFailure(new Exception("No recipients specified for " + mail.getName() + " sent by " + mail.getSender())); + return ExecutionResult.permanentFailure(new Exception("No recipients specified for " + mail.getName() + " sent by " + mail.getMaybeSender().asString())); } if (configuration.isDebug()) { LOGGER.debug("Attempting to deliver {}", mail.getName()); http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerToHost.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerToHost.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerToHost.java index 5be0f62..d8a3b91 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerToHost.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerToHost.java @@ -77,12 +77,7 @@ public class MailDelivrerToHost { private Properties getPropertiesForMail(Mail mail) { Properties props = session.getProperties(); - if (mail.getSender() == null) { - props.put("mail.smtp.from", "<>"); - } else { - String sender = mail.getSender().toString(); - props.put("mail.smtp.from", sender); - } + props.put("mail.smtp.from", mail.getMaybeSender().asString()); return props; } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractSQLWhitelistMatcher.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractSQLWhitelistMatcher.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractSQLWhitelistMatcher.java index c35812d..6186d11 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractSQLWhitelistMatcher.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractSQLWhitelistMatcher.java @@ -135,10 +135,10 @@ public abstract class AbstractSQLWhitelistMatcher extends GenericMatcher { @Override public Collection<MailAddress> match(Mail mail) throws MessagingException { // check if it's a local sender - MailAddress senderMailAddress = mail.getSender(); - if (senderMailAddress == null) { + if (!mail.hasSender()) { return null; } + MailAddress senderMailAddress = mail.getMaybeSender().get(); if (getMailetContext().isLocalEmail(senderMailAddress)) { // is a local sender, so return return null; http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsInWhiteList.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsInWhiteList.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsInWhiteList.java index ba2f413..59c7cc3 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsInWhiteList.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsInWhiteList.java @@ -79,7 +79,10 @@ public class IsInWhiteList extends AbstractSQLWhitelistMatcher { @Override protected boolean matchedWhitelist(MailAddress recipientMailAddress, Mail mail) throws MessagingException { - MailAddress senderMailAddress = mail.getSender(); + if (!mail.hasSender()) { + return true; + } + MailAddress senderMailAddress = mail.getMaybeSender().get(); String senderUser = senderMailAddress.getLocalPart().toLowerCase(Locale.US); Domain senderHost = senderMailAddress.getDomain(); http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsSenderInRRTLoop.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsSenderInRRTLoop.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsSenderInRRTLoop.java index 1366b30..e368104 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsSenderInRRTLoop.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsSenderInRRTLoop.java @@ -56,7 +56,9 @@ public class IsSenderInRRTLoop extends GenericMatcher { @Override public Collection<MailAddress> match(Mail mail) { try { - recipientRewriteTable.getMappings(mail.getSender().getLocalPart(), mail.getSender().getDomain()); + if (mail.hasSender()) { + recipientRewriteTable.getMappings(mail.getMaybeSender().get().getLocalPart(), mail.getMaybeSender().get().getDomain()); + } } catch (RecipientRewriteTable.TooManyMappingException e) { return mail.getRecipients(); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/SenderInFakeDomain.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/SenderInFakeDomain.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/SenderInFakeDomain.java index e9468b2..8fa52cd 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/SenderInFakeDomain.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/SenderInFakeDomain.java @@ -38,10 +38,10 @@ public class SenderInFakeDomain extends AbstractNetworkMatcher { @Override public Collection<MailAddress> match(Mail mail) { - if (mail.getSender() == null) { + if (!mail.hasSender()) { return null; } - Domain domain = mail.getSender().getDomain(); + Domain domain = mail.getMaybeSender().get().getDomain(); // DNS Lookup for this domain @SuppressWarnings("deprecation") Collection<String> servers = getMailetContext().getMailServers(domain); http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java index a82dc06..4257c3b 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java @@ -66,9 +66,8 @@ public class Dlp extends GenericMatcher { } private Optional<DLPConfigurationItem.Id> findFirstMatchingRule(Mail mail) { - return Optional - .ofNullable(mail.getSender()) - .filter(sender -> !sender.isNullSender()) + return mail.getMaybeSender() + .asOptional() .flatMap(sender -> matchingRule(sender, mail)); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpDomainRules.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpDomainRules.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpDomainRules.java index 031f306..3fbf59a 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpDomainRules.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpDomainRules.java @@ -39,7 +39,6 @@ import org.apache.james.dlp.api.DLPConfigurationItem.Targets; import org.apache.james.javax.AddressHelper; import org.apache.james.javax.MultipartUtil; import org.apache.james.util.OptionalUtils; -import org.apache.james.util.StreamUtils; import org.apache.mailet.Mail; import com.github.fge.lambdas.Throwing; @@ -169,8 +168,7 @@ public class DlpDomainRules { } private Stream<String> listEnvelopSender(Mail mail) { - return StreamUtils.ofNullables(mail.getSender()) - .filter(sender -> !sender.isNullSender()) + return mail.getMaybeSender().asStream() .map(MailAddress::asString); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/util/ReplyToUtils.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/util/ReplyToUtils.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/util/ReplyToUtils.java index a9ea05d..ab44bc7 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/util/ReplyToUtils.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/util/ReplyToUtils.java @@ -20,8 +20,6 @@ package org.apache.james.transport.util; import java.util.Optional; -import javax.mail.MessagingException; - import org.apache.james.core.MailAddress; import org.apache.james.transport.mailets.redirect.SpecialAddress; import org.apache.mailet.Mail; @@ -42,12 +40,12 @@ public class ReplyToUtils { this.replyTo = replyTo; } - public Optional<MailAddress> getReplyTo(Mail originalMail) throws MessagingException { + public Optional<MailAddress> getReplyTo(Mail originalMail) { if (replyTo.isPresent()) { if (replyTo.get().equals(SpecialAddress.UNALTERED)) { return Optional.empty(); } - return Optional.ofNullable(originalMail.getSender()); + return originalMail.getMaybeSender().asOptional(); } return Optional.empty(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SpecialAddressesUtils.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SpecialAddressesUtils.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SpecialAddressesUtils.java index e80f8b6..f95175f 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SpecialAddressesUtils.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SpecialAddressesUtils.java @@ -33,6 +33,7 @@ import org.apache.james.transport.mailets.redirect.AddressExtractor; import org.apache.james.transport.mailets.redirect.RedirectNotify; import org.apache.james.transport.mailets.redirect.SpecialAddress; import org.apache.james.transport.mailets.redirect.SpecialAddressKind; +import org.apache.james.util.OptionalUtils; import org.apache.mailet.Mail; import org.apache.mailet.base.RFC2822Headers; import org.slf4j.Logger; @@ -98,7 +99,7 @@ public class SpecialAddressesUtils { case SENDER: case FROM: case REVERSE_PATH: - return Optional.ofNullable(mail.getSender()) + return mail.getMaybeSender().asOptional() .map(ImmutableSet::of) .orElse(ImmutableSet.of()); case REPLY_TO: @@ -129,11 +130,7 @@ public class SpecialAddressesUtils { } private Set<MailAddress> getSender(Mail mail) { - MailAddress sender = mail.getSender(); - if (sender != null) { - return ImmutableSet.of(sender); - } - return ImmutableSet.of(); + return OptionalUtils.toSet(mail.getMaybeSender().asOptional()); } private Set<MailAddress> getReplyTos(InternetAddress[] replyToArray) { @@ -189,10 +186,7 @@ public class SpecialAddressesUtils { switch (specialAddressKind) { case SENDER: case REVERSE_PATH: - return Optional.ofNullable(mail.getSender()) - .filter(address -> !address.isNullSender()) - .map(ImmutableSet::of) - .orElse(ImmutableSet.of()); + return getSender(mail); case FROM: try { InternetAddress[] fromArray = (InternetAddress[]) mail.getMessage().getFrom(); @@ -225,12 +219,8 @@ public class SpecialAddressesUtils { if (addresses != null) { return MailAddressUtils.from(addresses); } else { - MailAddress reversePath = mail.getSender(); - if (reversePath != null) { - return ImmutableList.of(reversePath); - } + return mail.getMaybeSender().asList(); } - return ImmutableList.of(); } private List<MailAddress> toHeaders(Mail mail) { http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/HelloWorldMailet.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/HelloWorldMailet.java b/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/HelloWorldMailet.java index baaf24c..186d087 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/HelloWorldMailet.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/HelloWorldMailet.java @@ -18,8 +18,7 @@ ****************************************************************/ package org.apache.james.samples.mailets; -import javax.mail.MessagingException; - +import org.apache.james.core.MailAddress; import org.apache.mailet.Mail; import org.apache.mailet.Mailet; import org.apache.mailet.MailetConfig; @@ -49,13 +48,13 @@ public class HelloWorldMailet implements Mailet { } @Override - public void init(MailetConfig config) throws MessagingException { + public void init(MailetConfig config) { this.config = config; } @Override - public void service(Mail mail) throws MessagingException { + public void service(Mail mail) { LOGGER.info("Hello, World!"); - LOGGER.info("You have mail from {}", mail.getSender().getLocalPart()); + LOGGER.info("You have mail from {}", mail.getMaybeSender().asOptional().map(MailAddress::getLocalPart)); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/InstrumentationMailet.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/InstrumentationMailet.java b/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/InstrumentationMailet.java index eee8fd2..05aa60f 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/InstrumentationMailet.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/InstrumentationMailet.java @@ -88,8 +88,8 @@ public class InstrumentationMailet implements Mailet { LOGGER.info("Remote Address: " + mail.getRemoteAddr()); LOGGER.info("Remote Host: " + mail.getRemoteHost()); LOGGER.info("State: " + mail.getState()); - LOGGER.info("Sender host: " + mail.getSender().getDomain().name()); - LOGGER.info("Sender user: " + mail.getSender().getLocalPart()); + LOGGER.info("Sender host: " + mail.getMaybeSender().asOptional().map(mailAddress -> mailAddress.getDomain().name())); + LOGGER.info("Sender user: " + mail.getMaybeSender().asOptional().map(MailAddress::getLocalPart)); Collection<MailAddress> recipients = mail.getRecipients(); for (MailAddress address : recipients) { LOGGER.info("Recipient: " + address.getLocalPart() + "@" + address.getDomain().name()); http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java index f0f36ae..06bbad7 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java @@ -68,7 +68,7 @@ public class RecipientRewriteTableProcessorTest { MockitoAnnotations.initMocks(this); mailetContext = FakeMailContext.defaultContext(); processor = new RecipientRewriteTableProcessor(virtualTableStore, domainList, mailetContext); - mail = FakeMail.builder().build(); + mail = FakeMail.builder().sender(MailAddressFixture.ANY_AT_JAMES).build(); mappings = MappingsImpl.builder() .add(MailAddressFixture.ANY_AT_JAMES.toString()) .build(); @@ -86,7 +86,7 @@ public class RecipientRewriteTableProcessorTest { .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); - processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + processor.handleMappings(mappings, FakeMail.builder().sender(MailAddressFixture.ANY_AT_JAMES).build(), MailAddressFixture.OTHER_AT_JAMES, message); } @Test @@ -97,7 +97,7 @@ public class RecipientRewriteTableProcessorTest { .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); - processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message); } @Test @@ -109,7 +109,7 @@ public class RecipientRewriteTableProcessorTest { .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); - Collection<MailAddress> result = processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message); assertThat(result).containsOnly(nonDomainWithDefaultLocal); } @@ -125,7 +125,7 @@ public class RecipientRewriteTableProcessorTest { .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); - Collection<MailAddress> result = processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message); assertThat(result).containsOnly(MailAddressFixture.ANY_AT_LOCAL); } @@ -140,7 +140,7 @@ public class RecipientRewriteTableProcessorTest { .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); - Collection<MailAddress> result = processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message); assertThat(result).containsOnly(nonDomainWithDefaultLocal); } @@ -156,7 +156,7 @@ public class RecipientRewriteTableProcessorTest { .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); - processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message); FakeMailContext.SentMail expected = FakeMailContext.sentMailBuilder() .sender(MailAddressFixture.ANY_AT_JAMES) @@ -177,7 +177,7 @@ public class RecipientRewriteTableProcessorTest { .add(INVALID_MAIL_ADDRESS) .build(); - processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message); assertThat(mailetContext.getSentMails()).isEmpty(); } @@ -192,7 +192,7 @@ public class RecipientRewriteTableProcessorTest { .add(MailAddressFixture.ANY_AT_LOCAL.toString()) .build(); - Collection<MailAddress> result = processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message); assertThat(result).containsOnly(nonDomainWithDefaultLocal, MailAddressFixture.ANY_AT_LOCAL); } @@ -206,7 +206,7 @@ public class RecipientRewriteTableProcessorTest { .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); - Collection<MailAddress> result = processor.handleMappings(mappings, MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES, message); + Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message); FakeMailContext.SentMail expected = FakeMailContext.sentMailBuilder() .sender(MailAddressFixture.ANY_AT_JAMES) http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/DeliveryUtilsTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/DeliveryUtilsTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/DeliveryUtilsTest.java deleted file mode 100644 index 287f771..0000000 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/DeliveryUtilsTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.transport.mailets.delivery; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.apache.mailet.base.MailAddressFixture; -import org.junit.Test; - -public class DeliveryUtilsTest { - - @Test - public void prettyPrintShouldDisplayNullAddresses() { - assertThat(DeliveryUtils.prettyPrint(null)).isEqualTo("<>"); - } - - @Test - public void prettyPrintShouldDisplayAddresses() { - assertThat(DeliveryUtils.prettyPrint(MailAddressFixture.ANY_AT_JAMES)) - .isEqualTo("<" + MailAddressFixture.ANY_AT_JAMES + ">"); - } - -} http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java index 1cdc218..d923050 100644 --- a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java +++ b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java @@ -34,6 +34,7 @@ import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.apache.james.core.MailAddress; +import org.apache.james.core.MaybeSender; import org.apache.james.core.builder.MimeMessageBuilder; import org.apache.james.mailrepository.api.MailKey; import org.apache.james.mailrepository.api.MailRepository; @@ -150,7 +151,7 @@ public interface MailRepositoryContract { testee.store(mail); - assertThat(testee.retrieve(MAIL_1).getSender()).isEqualTo(MailAddress.nullSender()); + assertThat(testee.retrieve(MAIL_1).getMaybeSender()).isEqualTo(MaybeSender.nullSender()); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java index 7c4ffcc..5645a59 100644 --- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java +++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java @@ -145,9 +145,7 @@ public class CassandraMailRepositoryMailDAO { .setString(HEADER_BLOB_ID, headerId.asString()) .setString(BODY_BLOB_ID, bodyId.asString()) .setString(STATE, mail.getState()) - .setString(SENDER, Optional.ofNullable(mail.getSender()) - .map(MailAddress::asString) - .orElse(null)) + .setString(SENDER, mail.getMaybeSender().asString(null)) .setList(RECIPIENTS, asStringList(mail.getRecipients())) .setString(ERROR_MESSAGE, mail.getErrorMessage()) .setString(REMOTE_ADDR, mail.getRemoteAddr()) http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java index 7d62d4c..de19dee 100644 --- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java +++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java @@ -104,7 +104,7 @@ class CassandraMailRepositoryMailDAOTest { .containsOnly(MailAddressFixture.RECIPIENT1); softly.assertThat(partialMail.getPerRecipientSpecificHeaders().getHeadersForRecipient(MailAddressFixture.RECIPIENT1)) .containsOnly(header); - softly.assertThat(partialMail.getSender()).isEqualTo(MailAddressFixture.SENDER); + softly.assertThat(partialMail.getMaybeSender().asOptional()).contains(MailAddressFixture.SENDER); softly.assertThat(partialMail.getRecipients()).containsOnly(MailAddressFixture.RECIPIENT1, MailAddressFixture.RECIPIENT2); }); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java ---------------------------------------------------------------------- diff --git a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java index 313b9d6..4d21c7a 100644 --- a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java +++ b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java @@ -628,7 +628,7 @@ public class MessageProcessor extends ProcessorAbstract { StringBuilder messageBuffer = new StringBuilder("Created mail with name: "); messageBuffer.append(mail.getName()); messageBuffer.append(", sender: "); - messageBuffer.append(mail.getSender()); + messageBuffer.append(mail.getMaybeSender()); messageBuffer.append(", recipients: "); for (Object o : mail.getRecipients()) { messageBuffer.append(o); http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java index f8a6253..c4ac14f 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationMailet.java @@ -65,6 +65,9 @@ public class VacationMailet extends GenericMailet { @Override public void service(Mail mail) { try { + if (!mail.hasSender()) { + return; + } if (! automaticallySentMailDetector.isAutomaticallySent(mail)) { ZonedDateTime processingDate = zonedDateTimeProvider.get(); mail.getRecipients() @@ -84,7 +87,7 @@ public class VacationMailet extends GenericMailet { vacationRepository.retrieveVacation(accountId), notificationRegistry.isRegistered( AccountId.fromString(recipient.toString()), - RecipientId.fromMailAddress(processedMail.getSender())), + RecipientId.fromMailAddress(processedMail.getMaybeSender().get())), (vacation, alreadySent) -> sendNotificationIfRequired(recipient, processedMail, processingDate, vacation, alreadySent)) .thenCompose(Function.identity()); @@ -110,10 +113,10 @@ public class VacationMailet extends GenericMailet { .build(mimeMessageBodyGenerator); sendNotification(vacationReply); return notificationRegistry.register(AccountId.fromString(recipient.toString()), - RecipientId.fromMailAddress(processedMail.getSender()), + RecipientId.fromMailAddress(processedMail.getMaybeSender().get()), vacation.getToDate()); } catch (MessagingException e) { - LOGGER.warn("Failed to send JMAP vacation notification from {} to {}", recipient, processedMail.getSender(), e); + LOGGER.warn("Failed to send JMAP vacation notification from {} to {}", recipient, processedMail.getMaybeSender(), e); return CompletableFuture.completedFuture(null); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java index ae5c4cc..b98b16f 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java @@ -27,12 +27,12 @@ import javax.mail.internet.MimeMessage; import org.apache.james.core.MailAddress; import org.apache.james.jmap.api.vacation.Vacation; import org.apache.james.jmap.utils.MimeMessageBodyGenerator; +import org.apache.james.util.OptionalUtils; import org.apache.mailet.Mail; import org.apache.mailet.base.AutomaticallySentMailDetector; import com.github.fge.lambdas.Throwing; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; public class VacationReply { @@ -68,16 +68,16 @@ public class VacationReply { public VacationReply build(MimeMessageBodyGenerator mimeMessageBodyGenerator) throws MessagingException { Preconditions.checkState(mailRecipient != null, "Original recipient address should not be null"); - Preconditions.checkState(originalMail.getSender() != null, "Original sender address should not be null"); + Preconditions.checkState(originalMail.hasSender(), "Original sender address should not be null"); - return new VacationReply(mailRecipient, ImmutableList.of(originalMail.getSender()), generateMimeMessage(mimeMessageBodyGenerator)); + return new VacationReply(mailRecipient, OptionalUtils.toList(originalMail.getMaybeSender().asOptional()), generateMimeMessage(mimeMessageBodyGenerator)); } private MimeMessage generateMimeMessage(MimeMessageBodyGenerator mimeMessageBodyGenerator) throws MessagingException { MimeMessage reply = (MimeMessage) originalMail.getMessage().reply(NOT_REPLY_TO_ALL); vacation.getSubject().ifPresent(Throwing.consumer(subjectString -> reply.setHeader("subject", subjectString))); reply.setHeader(FROM_HEADER, mailRecipient.toString()); - reply.setHeader(TO_HEADER, originalMail.getSender().toString()); + reply.setHeader(TO_HEADER, originalMail.getMaybeSender().get().asString()); reply.setHeader(AutomaticallySentMailDetector.AUTO_SUBMITTED_HEADER, AutomaticallySentMailDetector.AUTO_REPLIED_VALUE); return mimeMessageBodyGenerator.from(reply, vacation.getTextBody(), vacation.getHtmlBody()); http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java index a13be0b..3e75d30 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java @@ -180,7 +180,7 @@ public class SetMessagesUpdateProcessor implements SetMessagesProcessor { if (maybeMessageToSend.isPresent()) { MessageResult messageToSend = maybeMessageToSend.get(); MailImpl mail = buildMailFromMessage(messageToSend); - assertUserIsSender(mailboxSession, mail.getSender()); + assertUserIsSender(mailboxSession, mail.getMaybeSender().asOptional()); messageSender.sendMessage(messageId, mail, mailboxSession); referenceUpdater.updateReferences(messageToSend.getHeaders(), mailboxSession); } else { @@ -189,8 +189,11 @@ public class SetMessagesUpdateProcessor implements SetMessagesProcessor { } } - private void assertUserIsSender(MailboxSession session, MailAddress sender) throws MailboxSendingNotAllowedException { - if (!session.getUser().isSameUser(sender.asString())) { + private void assertUserIsSender(MailboxSession session, Optional<MailAddress> sender) throws MailboxSendingNotAllowedException { + boolean userIsSender = sender.map(address -> session.getUser().isSameUser(address.asString())) + .orElse(false); + + if (!userIsSender) { String allowedSender = session.getUser().getUserName(); throw new MailboxSendingNotAllowedException(allowedSender); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java index 5b1f468..6c6b3db 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java @@ -30,6 +30,7 @@ import java.util.Collection; import javax.mail.util.SharedByteArrayInputStream; import org.apache.james.core.MailAddress; +import org.apache.james.core.MaybeSender; import org.apache.james.jmap.model.Envelope; import org.apache.james.jmap.model.Keyword; import org.apache.james.jmap.model.Keywords; @@ -116,7 +117,7 @@ public class MailFactoryTest { Mail actual = testee.build(message, envelope); assertThat(actual.getName()).isEqualTo(expectedName); - assertThat(actual.getSender()).isEqualTo(expectedSender); + assertThat(actual.getMaybeSender()).isEqualTo(MaybeSender.of(expectedSender)); assertThat(actual.getRecipients()).containsAll(expectedRecipients); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java ---------------------------------------------------------------------- diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java index da14ed3..b9627d6 100644 --- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java +++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java @@ -68,7 +68,7 @@ public class SendMailHandler implements JamesMessageHook { try { queue.enQueue(mail); - LOGGER.info("Successfully spooled mail {} from {} on {} for {}", mail.getName(), mail.getSender(), session.getRemoteAddress().getAddress(), mail.getRecipients()); + LOGGER.info("Successfully spooled mail {} from {} on {} for {}", mail.getName(), mail.getMaybeSender(), session.getRemoteAddress().getAddress(), mail.getRecipients()); } catch (MessagingException me) { LOGGER.error("Unknown error occurred while processing DATA.", me); return HookResult.builder() http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java index 171e49d..2b6587e 100644 --- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java +++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java @@ -344,7 +344,7 @@ public class SMTPServerTest { } if (sender != null) { - assertThat(mailData.getSender().toString()) + assertThat(mailData.getMaybeSender().asString()) .as("sender verfication") .isEqualTo(sender); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java index fb01f71..a6b1c75 100644 --- a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java +++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Optional; import org.apache.james.core.MailAddress; -import org.apache.james.queue.api.MailQueue.MailQueueException; import org.apache.james.queue.api.ManageableMailQueue; import com.github.steveash.guavate.Guavate; @@ -38,10 +37,10 @@ public class MailQueueItemDTO { return new Builder(); } - public static MailQueueItemDTO from(ManageableMailQueue.MailQueueItemView mailQueueItemView) throws MailQueueException { + public static MailQueueItemDTO from(ManageableMailQueue.MailQueueItemView mailQueueItemView) { return builder() .name(mailQueueItemView.getMail().getName()) - .sender(mailQueueItemView.getMail().getSender()) + .sender(mailQueueItemView.getMail().getMaybeSender().asOptional()) .recipients(mailQueueItemView.getMail().getRecipients()) .nextDelivery(mailQueueItemView.getNextDelivery()) .build(); @@ -67,6 +66,11 @@ public class MailQueueItemDTO { return this; } + public Builder sender(Optional<MailAddress> sender) { + sender.ifPresent(this::sender); + return this; + } + public Builder recipients(Collection<MailAddress> recipients) { this.recipients = recipients.stream() .map(MailAddress::asString) http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java index bb3c7bc..2a7dffd 100644 --- a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java +++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java @@ -61,7 +61,7 @@ public class MailQueueItemDTOTest { .collect(Guavate.toImmutableList()); softly.assertThat(mailQueueItemDTO.getName()).isEqualTo(mail.getName()); - softly.assertThat(mailQueueItemDTO.getSender()).isEqualTo(mail.getSender().asString()); + softly.assertThat(mailQueueItemDTO.getSender()).isEqualTo(mail.getMaybeSender().get().asString()); softly.assertThat(mailQueueItemDTO.getRecipients()).isEqualTo(expectedRecipients); softly.assertThat(mailQueueItemDTO.getNextDelivery()).contains(date); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java index 5e0fc82..6e8e801 100644 --- a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java +++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java @@ -25,6 +25,7 @@ import static io.restassured.RestAssured.with; import static io.restassured.config.EncoderConfig.encoderConfig; import static io.restassured.config.RestAssuredConfig.newConfig; import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION; +import static org.apache.mailet.base.MailAddressFixture.SENDER; import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; @@ -262,7 +263,7 @@ public class MailQueueRoutesTest { .contentType(ContentType.JSON) .body(".", hasSize(1)) .body(firstMail + ".name", equalTo(mail.getName())) - .body(firstMail + ".sender", equalTo(mail.getSender().asString())) + .body(firstMail + ".sender", equalTo(SENDER.asString())) .body(firstMail + ".recipients", equalTo(expectedRecipients)); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java index defbcbc..053a2bc 100644 --- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java +++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java @@ -54,7 +54,7 @@ public class MailDto { public static MailDto fromMail(Mail mail, Set<AdditionalField> additionalFields) throws MessagingException, InaccessibleFieldException { Optional<MessageContent> messageContent = fetchMessage(additionalFields, mail); return new MailDto(mail.getName(), - Optional.ofNullable(mail.getSender()).map(MailAddress::asString), + mail.getMaybeSender().asOptional().map(MailAddress::asString), mail.getRecipients().stream().map(MailAddress::asString).collect(Guavate.toImmutableList()), Optional.ofNullable(mail.getErrorMessage()), Optional.ofNullable(mail.getState()), http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java index b54983a..b5d8b3e 100644 --- a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java +++ b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java @@ -41,6 +41,7 @@ import java.util.concurrent.TimeoutException; import javax.mail.internet.MimeMessage; import org.apache.james.core.MailAddress; +import org.apache.james.core.MaybeSender; import org.apache.james.core.builder.MimeMessageBuilder; import org.apache.james.junit.ExecutorExtension; import org.apache.james.util.concurrency.ConcurrentTestRunner; @@ -92,7 +93,7 @@ public interface MailQueueContract { } @Test - default void queueShouldPreserveNullSender() throws Exception { + default void queueShouldHandleSender() throws Exception { enQueue(FakeMail.builder() .name("name") .mimeMessage(createMimeMessage()) @@ -102,8 +103,22 @@ public interface MailQueueContract { .build()); MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue(); - assertThat(mailQueueItem.getMail().getSender()) - .isEqualTo(MailAddress.nullSender()); + assertThat(mailQueueItem.getMail().getMaybeSender()) + .isEqualTo(MaybeSender.nullSender()); + } + + @Test + default void queueShouldHandleNoSender() throws Exception { + enQueue(FakeMail.builder() + .name("name") + .mimeMessage(createMimeMessage()) + .recipients(RECIPIENT1, RECIPIENT2) + .lastUpdated(new Date()) + .build()); + + MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue(); + assertThat(mailQueueItem.getMail().getMaybeSender()) + .isEqualTo(MaybeSender.nullSender()); } @Test @@ -113,8 +128,8 @@ public interface MailQueueContract { .build()); MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue(); - assertThat(mailQueueItem.getMail().getSender()) - .isEqualTo(SENDER); + assertThat(mailQueueItem.getMail().getMaybeSender()) + .isEqualTo(MaybeSender.of(SENDER)); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java index 9795896..0684d45 100644 --- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java +++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java @@ -333,7 +333,7 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori props.put(JAMES_MAIL_REMOTEADDR, mail.getRemoteAddr()); props.put(JAMES_MAIL_REMOTEHOST, mail.getRemoteHost()); - String sender = Optional.ofNullable(mail.getSender()).map(MailAddress::asString).orElse(""); + String sender = mail.getMaybeSender().asString(""); org.apache.james.util.streams.Iterators.toStream(mail.getAttributeNames()) .forEach(attrName -> props.put(attrName, SerializationUtil.serialize(mail.getAttribute(attrName)))); http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java index b846f33..3d32cd6 100644 --- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java +++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java @@ -127,11 +127,7 @@ public class MailQueueManagement extends StandardMBean implements MailQueueManag Optional<ZonedDateTime> nextDelivery = mView.getNextDelivery(); Map<String, Object> map = new HashMap<>(); map.put(names[0], m.getName()); - String sender = null; - MailAddress senderAddress = m.getSender(); - if (senderAddress != null) { - sender = senderAddress.toString(); - } + String sender = m.getMaybeSender().asString(null); map.put(names[1], sender); map.put(names[2], m.getState()); http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java b/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java index 6120272..9704906 100644 --- a/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java +++ b/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java @@ -192,7 +192,7 @@ public class MemoryMailQueueFactory implements MailQueueFactory<ManageableMailQu .map(MailAddress::asString) .anyMatch(value::equals); case Sender: - return item.getMail().getSender() + return item.getMail().getMaybeSender() .asString() .equals(value); default: http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceDTO.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceDTO.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceDTO.java index 1c25f09..e93394d 100644 --- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceDTO.java +++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceDTO.java @@ -56,7 +56,7 @@ class MailReferenceDTO { .map(MailAddress::asString) .collect(Guavate.toImmutableList()), mail.getName(), - Optional.ofNullable(mail.getSender()).map(MailAddress::asString), + mail.getMaybeSender().asOptional().map(MailAddress::asString), mail.getState(), mail.getErrorMessage(), Optional.ofNullable(mail.getLastUpdated()).map(Date::toInstant), http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/DeleteCondition.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/DeleteCondition.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/DeleteCondition.java index 33ad227..4424750 100644 --- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/DeleteCondition.java +++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/DeleteCondition.java @@ -58,7 +58,9 @@ public interface DeleteCondition { @Override public boolean shouldBeDeleted(Mail mail) { Preconditions.checkNotNull(mail); - return mail.getSender().asString().equals(senderAsString); + return mail.getMaybeSender() + .asString() + .equals(senderAsString); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDAO.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDAO.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDAO.java index 6c3318b..aada3b9 100644 --- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDAO.java +++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDAO.java @@ -47,7 +47,6 @@ import static org.apache.james.queue.rabbitmq.view.cassandra.model.BucketedSlice import static org.apache.james.queue.rabbitmq.view.cassandra.model.BucketedSlices.Slice; import java.util.Date; -import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; @@ -58,7 +57,6 @@ import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.blob.api.BlobId; import org.apache.james.blob.mail.MimeMessagePartsId; -import org.apache.james.core.MailAddress; import org.apache.james.queue.rabbitmq.EnqueuedItem; import org.apache.james.queue.rabbitmq.MailQueueName; import org.apache.james.queue.rabbitmq.view.cassandra.model.EnqueuedItemWithSlicingContext; @@ -131,9 +129,7 @@ class EnqueuedMailsDAO { .setString(HEADER_BLOB_ID, mimeMessagePartsId.getHeaderBlobId().asString()) .setString(BODY_BLOB_ID, mimeMessagePartsId.getBodyBlobId().asString()) .setString(STATE, mail.getState()) - .setString(SENDER, Optional.ofNullable(mail.getSender()) - .map(MailAddress::asString) - .orElse(null)) + .setString(SENDER, mail.getMaybeSender().asString(null)) .setList(RECIPIENTS, asStringList(mail.getRecipients())) .setString(ERROR_MESSAGE, mail.getErrorMessage()) .setString(REMOTE_ADDR, mail.getRemoteAddr()) http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java ---------------------------------------------------------------------- diff --git a/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java b/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java index 0ae1930..e3dbe7c 100644 --- a/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java +++ b/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java @@ -113,7 +113,7 @@ public class SMTPMessageSender extends ExternalResource implements Closeable { } public SMTPMessageSender sendMessage(Mail mail) throws MessagingException, IOException { - String from = mail.getSender().asString(); + String from = mail.getMaybeSender().asString(); doHelo(); doSetSender(from); mail.getRecipients().stream() --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
