You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/10/30 02:40:41 UTC
[01/11] james-project git commit: JAMES-2557 MailetContext should
take state into account
Repository: james-project
Updated Branches:
refs/heads/master 4231ebfa7 -> 485406252
JAMES-2557 MailetContext should take state into account
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/df433578
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/df433578
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/df433578
Branch: refs/heads/master
Commit: df43357843d29f23f7accd61a6686ab32b65cc01
Parents: f39a2c1
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Oct 19 16:00:54 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:04 2018 +0700
----------------------------------------------------------------------
.../mailet/base/test/FakeMailContext.java | 2 +-
.../impl/JamesMailetContext.java | 3 +-
.../impl/JamesMailetContextTest.java | 46 ++++++++++++++++++++
3 files changed, 49 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/df433578/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
----------------------------------------------------------------------
diff --git a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
index eff41c9..8dbf7f9 100644
--- a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
+++ b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
@@ -497,7 +497,7 @@ public class FakeMailContext implements MailetContext {
@Override
public void sendMail(Mail mail) throws MessagingException {
- sendMail(mail, Mail.DEFAULT);
+ sendMail(mail, Optional.ofNullable(mail.getState()).orElse(Mail.DEFAULT));
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/df433578/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
index c309370..0f4d0cc 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
@@ -396,7 +397,7 @@ public class JamesMailetContext implements MailetContext, Configurable {
@Override
public void sendMail(Mail mail) throws MessagingException {
- sendMail(mail, Mail.DEFAULT);
+ sendMail(mail, Optional.ofNullable(mail.getState()).orElse(Mail.DEFAULT));
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/df433578/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
index f4bd07d..676a756 100644
--- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
+++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
@@ -41,6 +41,8 @@ import org.apache.james.server.core.MailImpl;
import org.apache.james.user.memory.MemoryUsersRepository;
import org.apache.james.util.MimeMessageUtil;
import org.apache.mailet.Mail;
+import org.apache.mailet.base.MailAddressFixture;
+import org.apache.mailet.base.test.FakeMail;
import org.assertj.core.api.JUnitSoftAssertions;
import org.junit.Before;
import org.junit.Rule;
@@ -317,4 +319,48 @@ public class JamesMailetContextTest {
assertThat(mailArgumentCaptor.getValue().getState()).isEqualTo(otherState);
}
+
+ @Test
+ public void sendMailForMailShouldEnqueueEmailWithOtherStateWhenSpecified() throws Exception {
+ MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
+ .addFrom(mailAddress.asString())
+ .addToRecipient(mailAddress.asString())
+ .setText("Simple text")
+ .build();
+
+ String otherState = "other";
+ testee.sendMail(FakeMail.builder()
+ .sender(MailAddressFixture.SENDER)
+ .recipient(MailAddressFixture.RECIPIENT1)
+ .mimeMessage(message)
+ .state(otherState)
+ .build());
+
+ ArgumentCaptor<Mail> mailArgumentCaptor = ArgumentCaptor.forClass(Mail.class);
+ verify(spoolMailQueue).enQueue(mailArgumentCaptor.capture());
+ verifyNoMoreInteractions(spoolMailQueue);
+
+ assertThat(mailArgumentCaptor.getValue().getState()).isEqualTo(otherState);
+ }
+
+ @Test
+ public void sendMailForMailShouldEnqueueEmailWithDefaults() throws Exception {
+ MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
+ .addFrom(mailAddress.asString())
+ .addToRecipient(mailAddress.asString())
+ .setText("Simple text")
+ .build();
+
+ testee.sendMail(FakeMail.builder()
+ .sender(MailAddressFixture.SENDER)
+ .recipient(MailAddressFixture.RECIPIENT1)
+ .mimeMessage(message)
+ .build());
+
+ ArgumentCaptor<Mail> mailArgumentCaptor = ArgumentCaptor.forClass(Mail.class);
+ verify(spoolMailQueue).enQueue(mailArgumentCaptor.capture());
+ verifyNoMoreInteractions(spoolMailQueue);
+
+ assertThat(mailArgumentCaptor.getValue().getState()).isEqualTo(Mail.DEFAULT);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[03/11] james-project git commit: JAMES-2557 Propose an object
wrapping a potentially missing sender
Posted by bt...@apache.org.
JAMES-2557 Propose an object wrapping a potentially missing sender
This object can encapsulate behaviour like transforming such senders as string.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/33d3ea3a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/33d3ea3a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/33d3ea3a
Branch: refs/heads/master
Commit: 33d3ea3a96449c33ad9b9a3bacf47b7a6730abd7
Parents: 4231ebf
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 25 11:38:32 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:04 2018 +0700
----------------------------------------------------------------------
.../java/org/apache/james/core/MaybeSender.java | 99 ++++++++++++
.../org/apache/james/core/MaybeSenderTest.java | 158 +++++++++++++++++++
2 files changed, 257 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/33d3ea3a/core/src/main/java/org/apache/james/core/MaybeSender.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/james/core/MaybeSender.java b/core/src/main/java/org/apache/james/core/MaybeSender.java
new file mode 100644
index 0000000..6e91fce
--- /dev/null
+++ b/core/src/main/java/org/apache/james/core/MaybeSender.java
@@ -0,0 +1,99 @@
+/****************************************************************
+ * 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.core;
+
+import java.util.NoSuchElementException;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+
+public class MaybeSender {
+ public static MaybeSender nullSender() {
+ return new MaybeSender(Optional.empty());
+ }
+
+ public static MaybeSender of(MailAddress mailAddress) {
+ return new MaybeSender(Optional.ofNullable(mailAddress)
+ .filter(address -> !address.isNullSender()));
+ }
+
+ private final Optional<MailAddress> mailAddress;
+
+ private MaybeSender(Optional<MailAddress> mailAddress) {
+ this.mailAddress = mailAddress;
+ }
+
+ public Optional<MailAddress> asOptional() {
+ return mailAddress;
+ }
+
+ public Stream<MailAddress> asStream() {
+ return mailAddress.map(Stream::of).orElse(Stream.of());
+ }
+
+ public ImmutableList<MailAddress> asList() {
+ return mailAddress.map(ImmutableList::of).orElse(ImmutableList.of());
+ }
+
+ public MailAddress get() throws NoSuchElementException {
+ return mailAddress.get();
+ }
+
+ public String asString() {
+ return asString(MailAddress.NULL_SENDER_AS_STRING);
+ }
+
+ public String asPrettyString() {
+ return mailAddress.map(MailAddress::asPrettyString).orElse(MailAddress.NULL_SENDER_AS_STRING);
+ }
+
+ public boolean isNullSender() {
+ return !mailAddress.isPresent();
+ }
+
+ public String asString(String forNullValue) {
+ return mailAddress.map(MailAddress::asString).orElse(forNullValue);
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof MaybeSender) {
+ MaybeSender that = (MaybeSender) o;
+
+ return Objects.equals(this.mailAddress, that.mailAddress);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(mailAddress);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("mailAddress", mailAddress)
+ .toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/33d3ea3a/core/src/test/java/org/apache/james/core/MaybeSenderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/james/core/MaybeSenderTest.java b/core/src/test/java/org/apache/james/core/MaybeSenderTest.java
new file mode 100644
index 0000000..627aacd
--- /dev/null
+++ b/core/src/test/java/org/apache/james/core/MaybeSenderTest.java
@@ -0,0 +1,158 @@
+/****************************************************************
+ * 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.core;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.NoSuchElementException;
+
+import javax.mail.internet.AddressException;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+class MaybeSenderTest {
+ private static final String MAIL_ADDRESS_STRING = "any@domain.tld";
+
+ private MailAddress mailAddress;
+
+ @BeforeEach
+ void setUp() throws AddressException {
+ mailAddress = new MailAddress(MAIL_ADDRESS_STRING);
+ }
+
+ @Test
+ void shouldMatchBeanContract() {
+ EqualsVerifier.forClass(MaybeSender.class)
+ .verify();
+ }
+
+ @Test
+ void ofShouldSanitizeNull() {
+ assertThat(MaybeSender.of(null))
+ .isEqualTo(MaybeSender.nullSender());
+ }
+
+ @Test
+ void ofShouldSanitizeNullSender() {
+ assertThat(MaybeSender.of(MailAddress.nullSender()))
+ .isEqualTo(MaybeSender.nullSender());
+ }
+
+ @Test
+ void asOptionalShouldReturnWrappedValue() {
+ assertThat(MaybeSender.of(mailAddress).asOptional())
+ .contains(mailAddress);
+ }
+
+ @Test
+ void asOptionalShouldReturnEmptyWhenNullSender() {
+ assertThat(MaybeSender.nullSender().asOptional())
+ .isEmpty();
+ }
+
+ @Test
+ void getShouldReturnWrappedValue() {
+ assertThat(MaybeSender.of(mailAddress).get())
+ .isEqualTo(mailAddress);
+ }
+
+ @Test
+ void getShouldThrowWhenNullSender() {
+ assertThatThrownBy(() -> MaybeSender.nullSender().get())
+ .isInstanceOf(NoSuchElementException.class);
+ }
+
+ @Test
+ void asListShouldReturnWrappedValue() {
+ assertThat(MaybeSender.of(mailAddress).asList())
+ .contains(mailAddress);
+ }
+
+ @Test
+ void asListShouldReturnEmptyWhenNullSender() {
+ assertThat(MaybeSender.nullSender().asList())
+ .isEmpty();
+ }
+
+ @Test
+ void asStreamShouldReturnWrappedValue() {
+ assertThat(MaybeSender.of(mailAddress).asStream())
+ .contains(mailAddress);
+ }
+
+ @Test
+ void asStreamShouldReturnEmptyWhenNullSender() {
+ assertThat(MaybeSender.nullSender().asStream())
+ .isEmpty();
+ }
+
+ @Test
+ void isNullSenderShouldReturnFalseWhenNotNullSender() {
+ assertThat(MaybeSender.of(mailAddress).isNullSender())
+ .isFalse();
+ }
+
+ @Test
+ void isNullSenderShouldReturnTrueWhenNullSender() {
+ assertThat(MaybeSender.nullSender().isNullSender())
+ .isTrue();
+ }
+
+ @Test
+ void asStringShouldReturnWrappedValue() {
+ assertThat(MaybeSender.of(mailAddress).asString())
+ .isEqualTo(MAIL_ADDRESS_STRING);
+ }
+
+ @Test
+ void asStringShouldReturnDefaultWhenNullSender() {
+ assertThat(MaybeSender.nullSender().asString())
+ .isEqualTo(MailAddress.NULL_SENDER_AS_STRING);
+ }
+
+ @Test
+ void asStringWithDefaultShouldReturnWrappedValue() {
+ assertThat(MaybeSender.of(mailAddress).asString("default"))
+ .isEqualTo(MAIL_ADDRESS_STRING);
+ }
+
+ @Test
+ void asPrettyStringShouldReturnDefaultWhenNullSender() {
+ assertThat(MaybeSender.nullSender().asPrettyString())
+ .isEqualTo(MailAddress.NULL_SENDER_AS_STRING);
+ }
+
+ @Test
+ void asPrettyStringShouldReturnWrappedValue() {
+ assertThat(MaybeSender.of(mailAddress).asPrettyString())
+ .isEqualTo("<" + MAIL_ADDRESS_STRING + ">");
+ }
+
+ @Test
+ void asStringWithDefaultShouldReturnDefaultWhenNullSender() {
+ assertThat(MaybeSender.nullSender().asString("default"))
+ .isEqualTo("default");
+ }
+
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[08/11] james-project git commit: JAMES-2557 Temporary accept use of
deprecated method in DataLine SMTP handler
Posted by bt...@apache.org.
JAMES-2557 Temporary accept use of deprecated method in DataLine SMTP handler
Fixing this requires a rework of SMTP hook APIs and management of the mail envelope,
which will be done as a second refactoring step.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d29eec78
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d29eec78
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d29eec78
Branch: refs/heads/master
Commit: d29eec784075ceb5219e9afc54f5b44205930480
Parents: 4caac5f
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 25 11:42:53 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:30 2018 +0700
----------------------------------------------------------------------
.../apache/james/smtpserver/DataLineJamesMessageHookHandler.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d29eec78/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
index 0c625c7..a051e7e 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
@@ -259,6 +259,7 @@ public class DataLineJamesMessageHookHandler implements DataLineFilter, Extensib
return ImmutableList.copyOf(mail.getRecipients());
}
+ @SuppressWarnings("deprecated") // This will be handled in a followup pull request See JAMES-2557
@Override
public MailAddress getSender() {
return mail.getSender();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[09/11] james-project git commit: JAMES-2557 Improve JamesMailContext
code quality
Posted by bt...@apache.org.
JAMES-2557 Improve JamesMailContext code quality
- rawBounce should enforce sender presence
- rawBounce can rely more on MaybeSender
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/48540625
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/48540625
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/48540625
Branch: refs/heads/master
Commit: 485406252d82c2d23a4078c76b26d6fc8973bbd7
Parents: 4d2f085
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Oct 26 12:50:58 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:30 2018 +0700
----------------------------------------------------------------------
.../impl/JamesMailetContext.java | 16 +++++--------
.../impl/JamesMailetContextTest.java | 24 ++++++++++++++++++++
2 files changed, 30 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/48540625/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
index 879d46f..9e575cd 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
@@ -62,7 +62,7 @@ import org.apache.mailet.base.RFC2822Headers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.github.fge.lambdas.Throwing;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
public class JamesMailetContext implements MailetContext, Configurable {
@@ -211,24 +211,20 @@ public class JamesMailetContext implements MailetContext, Configurable {
* @throws MessagingException if the bounce mail could not be created
*/
private MailImpl rawBounce(Mail mail, String bounceText) throws MessagingException {
- // This sends a message to the james component that is a bounce of the
- // sent message
+ 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();
- InternetAddress[] addr = mail.getMaybeSender().asOptional()
- .map(MailAddress::asString)
- .map(Throwing.function((String s) -> new InternetAddress(s)).sneakyThrow())
- .map(address -> new InternetAddress[]{address})
- .orElse(new InternetAddress[0]);
+ MailAddress sender = mail.getMaybeSender().get();
- reply.setRecipients(Message.RecipientType.TO, addr);
+ 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(), new MailAddress(mail.getRecipients().iterator().next().toString()), recipients, reply);
+ return new MailImpl("replyTo-" + mail.getName(), sender, recipients, reply);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/48540625/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
index 676a756..f24a5d1 100644
--- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
+++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import java.util.concurrent.TimeUnit;
@@ -180,6 +181,29 @@ public class JamesMailetContextTest {
}
@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 void bouncingToNoSenderShouldBeANoop() throws Exception {
+ MailImpl mail = new MailImpl();
+ mail.setRecipients(ImmutableList.of(mailAddress));
+ mail.setMessage(MimeMessageUtil.defaultMimeMessage());
+
+ testee.bounce(mail, "message");
+
+ verifyZeroInteractions(spoolMailQueue);
+ }
+
+ @Test
public void bounceShouldEnqueueEmailWithRootState() throws Exception {
MailImpl mail = new MailImpl();
mail.setSender(mailAddress);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[04/11] james-project git commit: JAMES-2557 Use Mail::getMaybeSender
everywhere
Posted by bt...@apache.org.
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[07/11] james-project git commit: JAMES-2557 Explicitly add
preconditions in FakeMail#Builder
Posted by bt...@apache.org.
JAMES-2557 Explicitly add preconditions in FakeMail#Builder
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dbb6074b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dbb6074b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dbb6074b
Branch: refs/heads/master
Commit: dbb6074b996ef9529cd257fb4cc0b3a7371c9899
Parents: aaf1767
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 25 13:52:43 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:09 2018 +0700
----------------------------------------------------------------------
.../src/main/java/org/apache/mailet/base/test/FakeMail.java | 9 +++++++++
1 file changed, 9 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/dbb6074b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
----------------------------------------------------------------------
diff --git a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
index 895256e..43281a8 100644
--- a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
+++ b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
@@ -124,16 +124,19 @@ public class FakeMail implements Mail, Serializable {
}
public Builder fileName(String fileName) {
+ Preconditions.checkNotNull(fileName,"'fileName' can not be null");
this.fileName = Optional.of(fileName);
return this;
}
public Builder mimeMessage(MimeMessage mimeMessage) {
+ Preconditions.checkNotNull(mimeMessage, "'mimeMessage' can not be null");
this.mimeMessage = Optional.of(mimeMessage);
return this;
}
public Builder mimeMessage(MimeMessageBuilder mimeMessage) throws MessagingException {
+ Preconditions.checkNotNull(mimeMessage, "'mimeMessage' can not be null");
this.mimeMessage = Optional.of(mimeMessage.build());
return this;
}
@@ -152,6 +155,7 @@ public class FakeMail implements Mail, Serializable {
}
public Builder recipients(String... recipients) {
+ Preconditions.checkNotNull(recipients, "'recipients' can not be null");
return recipients(Arrays.stream(recipients)
.map(Throwing.function(MailAddress::new))
.collect(Guavate.toImmutableList()));
@@ -166,11 +170,13 @@ public class FakeMail implements Mail, Serializable {
}
public Builder name(String name) {
+ Preconditions.checkNotNull(name, "'name' can not be null");
this.name = Optional.of(name);
return this;
}
public Builder sender(MailAddress sender) {
+ Preconditions.checkNotNull(sender, "'sender' can not be null");
this.sender = Optional.of(sender);
return this;
}
@@ -180,16 +186,19 @@ public class FakeMail implements Mail, Serializable {
}
public Builder state(String state) {
+ Preconditions.checkNotNull(state, "'state' can not be null");
this.state = Optional.of(state);
return this;
}
public Builder errorMessage(String errorMessage) {
+ Preconditions.checkNotNull(errorMessage, "'errorMessage' can not be null");
this.errorMessage = Optional.of(errorMessage);
return this;
}
public Builder lastUpdated(Date lastUpdated) {
+ Preconditions.checkNotNull(lastUpdated, "'lastUpdated' can not be null");
this.lastUpdated = Optional.of(lastUpdated);
return this;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[11/11] james-project git commit: JAMES-2557 Solve generic mail
sending with a duplicate method
Posted by bt...@apache.org.
JAMES-2557 Solve generic mail sending with a duplicate method
We need a generic way to duplicate an email. This allows then to mutate the duplicated and sends arbitrary emails from the generic mailet context.
This is compulsory to allow UseRecipientHeaders to work when no sender is specified, which is not handled with other APIs.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4caac5f1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4caac5f1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4caac5f1
Branch: refs/heads/master
Commit: 4caac5f104f59a80b2a884e3f7effa46ee7190a0
Parents: dbb6074
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Oct 19 11:13:25 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:30 2018 +0700
----------------------------------------------------------------------
.../src/main/java/org/apache/mailet/Mail.java | 6 +++
.../transport/mailets/UseHeaderRecipients.java | 2 +-
.../org/apache/mailet/base/test/FakeMail.java | 53 ++++++++++++++++++--
.../org/apache/james/server/core/MailImpl.java | 5 ++
4 files changed, 60 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/4caac5f1/mailet/api/src/main/java/org/apache/mailet/Mail.java
----------------------------------------------------------------------
diff --git a/mailet/api/src/main/java/org/apache/mailet/Mail.java b/mailet/api/src/main/java/org/apache/mailet/Mail.java
index 4b98f30..c1bccd0 100644
--- a/mailet/api/src/main/java/org/apache/mailet/Mail.java
+++ b/mailet/api/src/main/java/org/apache/mailet/Mail.java
@@ -157,6 +157,12 @@ public interface Mail extends Serializable, Cloneable {
default boolean hasSender() {
return !getMaybeSender().isNullSender();
}
+
+ /**
+ * @since Mailet API v3.2.0
+ * @return A copy of this email. Implementation can affect a variation of the initial mail name property.
+ */
+ Mail duplicate() throws MessagingException;
/**
* Returns the current state of the message, such as GHOST, ERROR or DEFAULT.
http://git-wip-us.apache.org/repos/asf/james-project/blob/4caac5f1/mailet/standard/src/main/java/org/apache/james/transport/mailets/UseHeaderRecipients.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/UseHeaderRecipients.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/UseHeaderRecipients.java
index 85c6887..82a469d 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/UseHeaderRecipients.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/UseHeaderRecipients.java
@@ -106,7 +106,7 @@ public class UseHeaderRecipients extends GenericMailet {
}
// Return email to the "root" process.
- getMailetContext().sendMail(mail.getSender(), mail.getRecipients(), mail.getMessage());
+ getMailetContext().sendMail(mail.duplicate());
mail.setState(Mail.GHOST);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4caac5f1/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
----------------------------------------------------------------------
diff --git a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
index 43281a8..02cb868 100644
--- a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
+++ b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
@@ -37,6 +37,7 @@ import javax.mail.internet.InternetAddress;
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.util.MimeMessageUtil;
import org.apache.mailet.Mail;
@@ -171,13 +172,23 @@ public class FakeMail implements Mail, Serializable {
public Builder name(String name) {
Preconditions.checkNotNull(name, "'name' can not be null");
- this.name = Optional.of(name);
+ name(Optional.of(name));
+ return this;
+ }
+
+ public Builder name(Optional<String> name) {
+ this.name = name;
return this;
}
public Builder sender(MailAddress sender) {
Preconditions.checkNotNull(sender, "'sender' can not be null");
- this.sender = Optional.of(sender);
+ sender(MaybeSender.of(sender));
+ return this;
+ }
+
+ public Builder sender(MaybeSender sender) {
+ this.sender = sender.asOptional();
return this;
}
@@ -187,19 +198,34 @@ public class FakeMail implements Mail, Serializable {
public Builder state(String state) {
Preconditions.checkNotNull(state, "'state' can not be null");
- this.state = Optional.of(state);
+ state(Optional.of(state));
+ return this;
+ }
+
+ public Builder state(Optional<String> state) {
+ this.state = state;
return this;
}
public Builder errorMessage(String errorMessage) {
Preconditions.checkNotNull(errorMessage, "'errorMessage' can not be null");
- this.errorMessage = Optional.of(errorMessage);
+ errorMessage(Optional.of(errorMessage));
+ return this;
+ }
+
+ public Builder errorMessage(Optional<String> errorMessage) {
+ this.errorMessage = errorMessage;
return this;
}
public Builder lastUpdated(Date lastUpdated) {
Preconditions.checkNotNull(lastUpdated, "'lastUpdated' can not be null");
- this.lastUpdated = Optional.of(lastUpdated);
+ lastUpdated(Optional.of(lastUpdated));
+ return this;
+ }
+
+ public Builder lastUpdated(Optional<Date> lastUpdated) {
+ this.lastUpdated = lastUpdated;
return this;
}
@@ -284,6 +310,23 @@ public class FakeMail implements Mail, Serializable {
}
@Override
+ public Mail duplicate() throws MessagingException {
+ return builder()
+ .mimeMessage(msg)
+ .recipients(ImmutableList.copyOf(recipients))
+ .name(Optional.ofNullable(name))
+ .sender(MaybeSender.of(sender))
+ .state(Optional.ofNullable(state))
+ .errorMessage(Optional.ofNullable(errorMessage))
+ .lastUpdated(Optional.ofNullable(lastUpdated))
+ .attributes(attributes)
+ .size(size)
+ .remoteAddr(remoteAddr)
+ .remoteHost(remoteHost)
+ .build();
+ }
+
+ @Override
public String getName() {
return name;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4caac5f1/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java b/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
index ae9c853..cd0fc57 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
@@ -797,4 +797,9 @@ public class MailImpl implements Disposable, Mail {
public void addAllSpecificHeaderForRecipient(PerRecipientHeaders perRecipientHeaders) {
perRecipientSpecificHeaders.addAll(perRecipientHeaders);
}
+
+ @Override
+ public Mail duplicate() throws MessagingException {
+ return MailImpl.duplicate(this);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[02/11] james-project git commit: JAMES-2557 Propose an update of the
Mail API to handle null sender
Posted by bt...@apache.org.
JAMES-2557 Propose an update of the Mail API to handle null sender
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f39a2c1f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f39a2c1f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f39a2c1f
Branch: refs/heads/master
Commit: f39a2c1f948806a335a2b07e9e1a8ab6e91cc990
Parents: 33d3ea3
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Oct 19 08:37:54 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:04 2018 +0700
----------------------------------------------------------------------
.../src/main/java/org/apache/mailet/Mail.java | 33 ++++++++++
.../apache/mailet/base/test/FakeMailTest.java | 63 ++++++++++++++++++++
.../apache/james/server/core/MailImplTest.java | 59 ++++++++++++++++++
3 files changed, 155 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/f39a2c1f/mailet/api/src/main/java/org/apache/mailet/Mail.java
----------------------------------------------------------------------
diff --git a/mailet/api/src/main/java/org/apache/mailet/Mail.java b/mailet/api/src/main/java/org/apache/mailet/Mail.java
index 23a0918..4b98f30 100644
--- a/mailet/api/src/main/java/org/apache/mailet/Mail.java
+++ b/mailet/api/src/main/java/org/apache/mailet/Mail.java
@@ -19,6 +19,7 @@
package org.apache.mailet;
+
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
@@ -28,6 +29,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.mailet.PerRecipientHeaders.Header;
/**
@@ -121,9 +123,40 @@ public interface Mail extends Serializable, Cloneable {
* Returns the sender of the message, as specified by the SMTP "MAIL FROM" command,
* or internally defined.
*
+ * @deprecated @see {@link #getMaybeSender()} and {@link MaybeSender}
+ *
+ * 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 the sender of this message
*/
+ @Deprecated
MailAddress getSender();
+
+ /**
+ * Returns the sender of the message, as specified by the SMTP "MAIL FROM" command,
+ * or internally defined.
+ *
+ * 'null' or {@link MailAddress#nullSender()} are handled with {@link MaybeSender#nullSender()}.
+ *
+ * @since Mailet API v3.2.0
+ * @return the sender of this message wrapped in an optional
+ */
+ @SuppressWarnings("deprecated")
+ default MaybeSender getMaybeSender() {
+ return MaybeSender.of(getSender());
+ }
+
+ /**
+ * Returns if this message has a sender.
+ *
+ * {@link MaybeSender#nullSender()} will be considered as no sender.
+ *
+ * @since Mailet API v3.2.0
+ */
+ default boolean hasSender() {
+ return !getMaybeSender().isNullSender();
+ }
/**
* Returns the current state of the message, such as GHOST, ERROR or DEFAULT.
http://git-wip-us.apache.org/repos/asf/james-project/blob/f39a2c1f/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
----------------------------------------------------------------------
diff --git a/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java b/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
index fc0c03c..6dc3dbf 100644
--- a/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
+++ b/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
@@ -19,10 +19,15 @@
package org.apache.mailet.base.test;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
+import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
+import org.apache.james.core.MailAddress;
+import org.apache.james.core.MaybeSender;
+import org.apache.mailet.base.MailAddressFixture;
import org.junit.Test;
import nl.jqno.equalsverifier.EqualsVerifier;
@@ -38,4 +43,62 @@ public class FakeMailTest {
.verify();
}
+ @Test
+ public void getMaybeSenderShouldHandleNullSender() throws MessagingException {
+ assertThat(
+ FakeMail.builder()
+ .sender(MailAddress.nullSender())
+ .build()
+ .getMaybeSender())
+ .isEqualTo(MaybeSender.nullSender());
+ }
+
+ @Test
+ public void getMaybeSenderShouldHandleNoSender() throws MessagingException {
+ assertThat(
+ FakeMail.builder()
+ .build()
+ .getMaybeSender())
+ .isEqualTo(MaybeSender.nullSender());
+ }
+
+ @Test
+ public void getMaybeSenderShouldHandleSender() throws MessagingException {
+ assertThat(
+ FakeMail.builder()
+ .sender(MailAddressFixture.SENDER)
+ .build()
+ .getMaybeSender())
+ .isEqualTo(MaybeSender.of(MailAddressFixture.SENDER));
+ }
+
+ @Test
+ public void hasSenderShouldReturnFalseWhenSenderIsNull() throws MessagingException {
+ assertThat(
+ FakeMail.builder()
+ .sender(MailAddress.nullSender())
+ .build()
+ .hasSender())
+ .isFalse();
+ }
+
+ @Test
+ public void hasSenderShouldReturnFalseWhenSenderIsNotSpecified() throws MessagingException {
+ assertThat(
+ FakeMail.builder()
+ .build()
+ .hasSender())
+ .isFalse();
+ }
+
+ @Test
+ public void hasSenderShouldReturnTrueWhenSenderIsSpecified() throws MessagingException {
+ assertThat(
+ FakeMail.builder()
+ .sender(MailAddressFixture.SENDER)
+ .build()
+ .hasSender())
+ .isTrue();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f39a2c1f/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
index 3cbaabf..06d9e16 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
@@ -33,6 +33,7 @@ import javax.mail.internet.MimeMessage;
import org.apache.james.core.MailAddress;
import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.mailet.Mail;
+import org.apache.mailet.base.MailAddressFixture;
import org.apache.mailet.base.test.MailUtil;
import org.junit.Before;
import org.junit.Test;
@@ -209,4 +210,62 @@ public class MailImplTest {
public void deriveNewNameShouldGenerateNotEqualsCurrentName() throws MessagingException {
assertThat(MailImpl.deriveNewName("current")).isNotEqualTo("current");
}
+
+ @Test
+ public void getMaybeSenderShouldHandleNullSender() {
+ assertThat(
+ MailImpl.builder()
+ .sender(MailAddress.nullSender())
+ .build()
+ .getMaybeSender())
+ .isEqualTo(MaybeSender.nullSender());
+ }
+
+ @Test
+ public void getMaybeSenderShouldHandleNoSender() {
+ assertThat(
+ MailImpl.builder()
+ .build()
+ .getMaybeSender())
+ .isEqualTo(MaybeSender.nullSender());
+ }
+
+ @Test
+ public void getMaybeSenderShouldHandleSender() {
+ assertThat(
+ MailImpl.builder()
+ .sender(MailAddressFixture.SENDER)
+ .build()
+ .getMaybeSender())
+ .isEqualTo(MaybeSender.of(MailAddressFixture.SENDER));
+ }
+
+ @Test
+ public void hasSenderShouldReturnFalseWhenSenderIsNull() {
+ assertThat(
+ MailImpl.builder()
+ .sender(MailAddress.nullSender())
+ .build()
+ .hasSender())
+ .isFalse();
+ }
+
+ @Test
+ public void hasSenderShouldReturnFalseWhenSenderIsNotSpecified() {
+ assertThat(
+ MailImpl.builder()
+ .build()
+ .hasSender())
+ .isFalse();
+ }
+
+ @Test
+ public void hasSenderShouldReturnTrueWhenSenderIsSpecified() {
+ assertThat(
+ MailImpl.builder()
+ .sender(MailAddressFixture.SENDER)
+ .build()
+ .hasSender())
+ .isTrue();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[05/11] james-project git commit: JAMES-2557 Use Mail::getMaybeSender
everywhere
Posted by bt...@apache.org.
JAMES-2557 Use Mail::getMaybeSender everywhere
Note that dificulty arised when trying to send a mail without sender using the MailetContext.
The retained solution is to pass a mail with the right target processor specified.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8ce35148
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8ce35148
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8ce35148
Branch: refs/heads/master
Commit: 8ce351489a6ade4411170307cb6db0bba638e209
Parents: df43357
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 25 13:56:09 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:08 2018 +0700
----------------------------------------------------------------------
.../custom/mailets/SendPromotionCode.java | 2 +-
.../james/ai/classic/BayesianAnalysis.java | 12 +++---
.../base/AutomaticallySentMailDetectorImpl.java | 22 +++++------
.../james/transport/mailets/AbstractSign.java | 18 ++++-----
.../james/transport/mailets/SMIMESign.java | 2 +-
.../apache/james/transport/mailets/Sign.java | 2 +-
.../transport/mailets/ICALToJsonAttribute.java | 2 +-
.../james/transport/mailets/ClamAVScan.java | 2 +-
.../transport/mailets/ContactExtractor.java | 5 +--
.../james/transport/mailets/ServerTime.java | 6 ++-
.../matchers/AbstractQuotaMatcher.java | 19 ++++++----
.../james/transport/matchers/RecipientIs.java | 5 ++-
.../james/transport/matchers/SenderHostIs.java | 9 ++---
.../transport/matchers/SenderHostIsLocal.java | 11 +++---
.../james/transport/matchers/SenderIs.java | 7 ++--
.../james/transport/matchers/SenderIsLocal.java | 10 ++---
.../james/transport/matchers/SenderIsNull.java | 12 ++----
.../james/transport/matchers/SenderIsRegex.java | 6 +--
.../utils/MailAddressCollectionReader.java | 9 +++--
.../james/transport/matchers/SenderIsTest.java | 5 ++-
.../util/MailAddressCollectionReaderTest.java | 16 ++++----
.../org/apache/mailet/base/test/FakeMail.java | 15 --------
.../mailet/base/test/FakeMailContext.java | 7 +++-
.../org/apache/james/server/core/MailImpl.java | 15 +++++++-
.../apache/james/server/core/MailImplTest.java | 5 ++-
.../org/apache/james/util/OptionalUtils.java | 13 +++++++
.../mailrepository/jcr/JCRMailRepository.java | 7 ++--
.../mailrepository/jdbc/JDBCMailRepository.java | 8 ++--
.../impl/JamesMailetContext.java | 15 +++++---
.../impl/camel/CamelProcessor.java | 2 +-
.../impl/camel/MatcherSplitter.java | 2 +-
.../transport/mailets/BayesianAnalysis.java | 17 +++++----
.../apache/james/transport/mailets/Bounce.java | 4 +-
.../james/transport/mailets/DSNBounce.java | 13 ++++---
.../mailets/RecipientRewriteTableProcessor.java | 26 ++++++++++---
.../james/transport/mailets/RemoteDelivery.java | 2 +-
.../org/apache/james/transport/mailets/SPF.java | 9 +----
.../mailets/ToSenderDomainRepository.java | 10 ++++-
.../james/transport/mailets/ToSenderFolder.java | 10 +++--
.../transport/mailets/WhiteListManager.java | 12 +++---
.../mailets/delivery/DeliveryUtils.java | 34 -----------------
.../mailets/delivery/MailDispatcher.java | 23 +++++++----
.../mailets/delivery/SimpleMailStore.java | 6 +--
.../mailets/jsieve/RedirectAction.java | 1 +
.../mailets/jsieve/SieveMailAdapter.java | 3 +-
.../transport/mailets/jsieve/VacationReply.java | 16 ++++----
.../mailets/managesieve/ManageSieveMailet.java | 12 +++---
.../mailets/redirect/NotifyMailetsMessage.java | 2 +-
.../mailets/redirect/ProcessRedirectNotify.java | 8 ++--
.../mailets/remote/delivery/Bouncer.java | 2 +-
.../mailets/remote/delivery/MailDelivrer.java | 2 +-
.../remote/delivery/MailDelivrerToHost.java | 7 +---
.../matchers/AbstractSQLWhitelistMatcher.java | 4 +-
.../james/transport/matchers/IsInWhiteList.java | 5 ++-
.../transport/matchers/IsSenderInRRTLoop.java | 4 +-
.../transport/matchers/SenderInFakeDomain.java | 4 +-
.../james/transport/matchers/dlp/Dlp.java | 5 +--
.../transport/matchers/dlp/DlpDomainRules.java | 4 +-
.../james/transport/util/ReplyToUtils.java | 6 +--
.../transport/util/SpecialAddressesUtils.java | 20 +++-------
.../james/samples/mailets/HelloWorldMailet.java | 9 ++---
.../samples/mailets/InstrumentationMailet.java | 4 +-
.../RecipientRewriteTableProcessorTest.java | 20 +++++-----
.../mailets/delivery/DeliveryUtilsTest.java | 40 --------------------
.../mailrepository/MailRepositoryContract.java | 3 +-
.../CassandraMailRepositoryMailDAO.java | 4 +-
.../CassandraMailRepositoryMailDAOTest.java | 2 +-
.../james/fetchmail/MessageProcessor.java | 2 +-
.../james/jmap/mailet/VacationMailet.java | 9 +++--
.../apache/james/jmap/mailet/VacationReply.java | 8 ++--
.../methods/SetMessagesUpdateProcessor.java | 9 +++--
.../apache/james/jmap/send/MailFactoryTest.java | 3 +-
.../james/smtpserver/SendMailHandler.java | 2 +-
.../apache/james/smtpserver/SMTPServerTest.java | 2 +-
.../james/webadmin/dto/MailQueueItemDTO.java | 10 +++--
.../webadmin/dto/MailQueueItemDTOTest.java | 2 +-
.../webadmin/routes/MailQueueRoutesTest.java | 3 +-
.../org/apache/james/webadmin/dto/MailDto.java | 2 +-
.../james/queue/api/MailQueueContract.java | 25 +++++++++---
.../apache/james/queue/jms/JMSMailQueue.java | 2 +-
.../queue/library/MailQueueManagement.java | 6 +--
.../queue/memory/MemoryMailQueueFactory.java | 2 +-
.../james/queue/rabbitmq/MailReferenceDTO.java | 2 +-
.../rabbitmq/view/api/DeleteCondition.java | 4 +-
.../view/cassandra/EnqueuedMailsDAO.java | 6 +--
.../apache/james/utils/SMTPMessageSender.java | 2 +-
86 files changed, 350 insertions(+), 375 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/SendPromotionCode.java
----------------------------------------------------------------------
diff --git a/examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/SendPromotionCode.java b/examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/SendPromotionCode.java
index 898b7cd..4ad2b07 100644
--- a/examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/SendPromotionCode.java
+++ b/examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/SendPromotionCode.java
@@ -45,7 +45,7 @@ public class SendPromotionCode extends GenericMailet {
"Here is the following promotion code that you can use on your next order: " + promotionCode);
MailAddress sender = getMailetContext().getPostmaster();
- ImmutableList<MailAddress> recipients = ImmutableList.of(mail.getSender());
+ ImmutableList<MailAddress> recipients = mail.getMaybeSender().asList();
getMailetContext()
.sendMail(sender, recipients, response);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
----------------------------------------------------------------------
diff --git a/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java b/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
index c4be663..a91d178 100644
--- a/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
+++ b/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
@@ -316,12 +316,7 @@ public class BayesianAnalysis extends GenericMailet {
probabilityForm.applyPattern("##0.##%");
String probabilityString = probabilityForm.format(probability);
- String senderString;
- if (mail.getSender() == null) {
- senderString = "null";
- } else {
- senderString = mail.getSender().toString();
- }
+ String senderString = mail.getMaybeSender().asString("null");
if (probability > 0.1) {
final Collection<MailAddress> recipients = mail.getRecipients();
if (LOGGER.isDebugEnabled()) {
@@ -343,7 +338,10 @@ public class BayesianAnalysis extends GenericMailet {
}
private boolean isSenderLocal(Mail mail) {
- return mail.getSender() != null && getMailetContext().isLocalServer(mail.getSender().getDomain());
+ return mail.getMaybeSender().asOptional()
+ .map(MailAddress::getDomain)
+ .map(domain -> getMailetContext().isLocalServer(domain))
+ .orElse(false);
}
void loadData(Connection conn) throws java.sql.SQLException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetectorImpl.java
----------------------------------------------------------------------
diff --git a/mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetectorImpl.java b/mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetectorImpl.java
index 43645a3..f7cb0af 100644
--- a/mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetectorImpl.java
+++ b/mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetectorImpl.java
@@ -48,7 +48,7 @@ public class AutomaticallySentMailDetectorImpl implements AutomaticallySentMailD
@Override
public boolean isAutomaticallySent(Mail mail) throws MessagingException {
- return mail.getSender() == null ||
+ return !mail.hasSender() ||
isMailingList(mail) ||
isAutoSubmitted(mail) ||
isMdnSentAutomatically(mail);
@@ -61,17 +61,15 @@ public class AutomaticallySentMailDetectorImpl implements AutomaticallySentMailD
}
private boolean senderIsMailingList(Mail mail) {
- MailAddress sender = mail.getSender();
- if (sender == null) {
- return false;
- }
-
- String localPart = sender.getLocalPart();
- return localPart.startsWith("owner-")
- || localPart.endsWith("-request")
- || localPart.equalsIgnoreCase("MAILER-DAEMON")
- || localPart.equalsIgnoreCase("LISTSERV")
- || localPart.equalsIgnoreCase("majordomo");
+ 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 boolean headerIsMailingList(Mail mail) throws MessagingException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
----------------------------------------------------------------------
diff --git a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
index a1cbb19..461250d 100644
--- a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
+++ b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
@@ -495,7 +495,7 @@ public abstract class AbstractSign extends GenericMailet {
if (isRebuildFrom()) {
// builds a new "mixed" "From:" header
- InternetAddress modifiedFromIA = new InternetAddress(getKeyHolder().getSignerAddress(), mail.getSender().toString());
+ InternetAddress modifiedFromIA = new InternetAddress(getKeyHolder().getSignerAddress(), mail.getMaybeSender().asString());
newMessage.setFrom(modifiedFromIA);
// if the original "ReplyTo:" header is missing sets it to the original "From:" header
@@ -521,7 +521,7 @@ public abstract class AbstractSign extends GenericMailet {
mail.setAttribute(SMIMEAttributeNames.SMIME_SIGNER_ADDRESS, getKeyHolder().getSignerAddress());
if (isDebug()) {
- LOGGER.debug("Message signed, reverse-path: {}, Id: {}", mail.getSender(), messageId);
+ LOGGER.debug("Message signed, reverse-path: {}, Id: {}", mail.getMaybeSender().asString(), messageId);
}
} catch (MessagingException me) {
@@ -554,19 +554,18 @@ public abstract class AbstractSign extends GenericMailet {
* @return True if can be signed.
*/
protected boolean isOkToSign(Mail mail) throws MessagingException {
-
- MailAddress reversePath = mail.getSender();
-
// Is it a bounce?
- if (reversePath == null) {
+ if (!mail.hasSender()) {
LOGGER.info("Can not sign: no sender");
return false;
}
+
+ MailAddress reversePath = mail.getMaybeSender().get();
String authUser = (String) mail.getAttribute(Mail.SMTP_AUTH_USER_ATTRIBUTE_NAME);
// was the sender user SMTP authorized?
if (authUser == null) {
- LOGGER.info("Can not sign mail for sender <{}> as he is not a SMTP authenticated user", mail.getSender());
+ LOGGER.info("Can not sign mail for sender <{}> as he is not a SMTP authenticated user", mail.getMaybeSender().asString());
return false;
}
@@ -627,11 +626,10 @@ public abstract class AbstractSign extends GenericMailet {
*/
protected final boolean fromAddressSameAsReverse(Mail mail) {
- MailAddress reversePath = mail.getSender();
-
- if (reversePath == null) {
+ if (!mail.hasSender()) {
return false;
}
+ MailAddress reversePath = mail.getMaybeSender().get();
try {
InternetAddress[] fromArray = (InternetAddress[]) mail.getMessage().getFrom();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMESign.java
----------------------------------------------------------------------
diff --git a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMESign.java b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMESign.java
index dad9cb9..e2f0821 100644
--- a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMESign.java
+++ b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMESign.java
@@ -202,7 +202,7 @@ public class SMIMESign extends Sign {
signatureReason.setText(getReplacedExplanationText(getExplanationText(),
getSignerName(),
getKeyHolder().getSignerAddress(),
- mail.getSender().toString(),
+ mail.getMaybeSender().asString(),
headers));
signatureReason.setFileName("SignatureExplanation.txt");
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/crypto/src/main/java/org/apache/james/transport/mailets/Sign.java
----------------------------------------------------------------------
diff --git a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/Sign.java b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/Sign.java
index ecf8cd0..16dec08 100644
--- a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/Sign.java
+++ b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/Sign.java
@@ -192,7 +192,7 @@ public class Sign extends AbstractSign {
signatureReason.setText(getReplacedExplanationText(getExplanationText(),
getSignerName(),
getKeyHolder().getSignerAddress(),
- mail.getSender().toString(),
+ mail.getMaybeSender().asString(),
headers));
signatureReason.setFileName("SignatureExplanation.txt");
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
----------------------------------------------------------------------
diff --git a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
index 5b95106..f1605bb 100644
--- a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
+++ b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
@@ -220,7 +220,7 @@ public class ICALToJsonAttribute extends GenericMailet {
.map(address -> (InternetAddress) address)
.map(InternetAddress::getAddress)
.findFirst();
- Optional<String> fromEnvelope = Optional.ofNullable(mail.getSender())
+ Optional<String> fromEnvelope = mail.getMaybeSender().asOptional()
.map(MailAddress::asString);
return OptionalUtils.or(
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java
index 9233b21..79c6e53 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java
@@ -821,7 +821,7 @@ public class ClamAVScan extends GenericMailet {
PrintWriter out = new PrintWriter(sout, true);
out.print("Mail details:");
- out.print(" MAIL FROM: " + mail.getSender());
+ out.print(" MAIL FROM: " + mail.getMaybeSender().asString());
Iterator<MailAddress> rcptTo = mail.getRecipients().iterator();
out.print(", RCPT TO: " + rcptTo.next());
while (rcptTo.hasNext()) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
index f52bbab..64e0524 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
@@ -18,7 +18,6 @@
****************************************************************/
package org.apache.james.transport.mailets;
-import java.io.IOException;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Stream;
@@ -101,11 +100,11 @@ public class ContactExtractor extends GenericMailet implements Mailet {
}
@VisibleForTesting
- Optional<String> extractContacts(Mail mail) throws MessagingException, IOException {
+ Optional<String> extractContacts(Mail mail) throws MessagingException {
ImmutableList<String> allRecipients = getAllRecipients(mail.getMessage());
if (hasRecipient(allRecipients)) {
- return Optional.of(mail.getSender())
+ return mail.getMaybeSender().asOptional()
.map(MailAddress::asString)
.map(sender -> new ExtractedContacts(sender, allRecipients))
.map(Throwing.function(extractedContacts -> objectMapper.writeValueAsString(extractedContacts)));
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/mailets/ServerTime.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ServerTime.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ServerTime.java
index bf7ed37..7dc52d3 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ServerTime.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ServerTime.java
@@ -46,6 +46,10 @@ public class ServerTime extends GenericMailet {
*/
@Override
public void service(Mail mail) throws javax.mail.MessagingException {
+ if (!mail.hasSender()) {
+ return;
+ }
+
MimeMessage response = (MimeMessage)mail.getMessage().reply(false);
response.setSubject("The time is now...");
String textBuffer = "This mail server thinks it's " + (new java.util.Date()).toString() + ".";
@@ -61,7 +65,7 @@ public class ServerTime extends GenericMailet {
}
if (response.getAllRecipients() == null) {
- response.setRecipients(MimeMessage.RecipientType.TO, mail.getSender().toString());
+ response.setRecipients(MimeMessage.RecipientType.TO, mail.getMaybeSender().get().toString());
}
response.saveChanges();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/AbstractQuotaMatcher.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/AbstractQuotaMatcher.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/AbstractQuotaMatcher.java
index e097e8e..219fadd 100755
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/AbstractQuotaMatcher.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/AbstractQuotaMatcher.java
@@ -17,8 +17,6 @@
* under the License. *
****************************************************************/
-
-
package org.apache.james.transport.matchers;
import java.util.ArrayList;
@@ -27,6 +25,7 @@ import java.util.Collection;
import javax.mail.MessagingException;
import org.apache.james.core.MailAddress;
+import org.apache.james.core.MaybeSender;
import org.apache.mailet.Experimental;
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMatcher;
@@ -57,7 +56,7 @@ public abstract class AbstractQuotaMatcher extends GenericMatcher {
@Override
public final Collection<MailAddress> match(Mail mail) throws MessagingException {
Collection<MailAddress> matching = null;
- if (isSenderChecked(mail.getSender())) {
+ if (isSenderChecked(mail.getMaybeSender())) {
matching = new ArrayList<>();
for (MailAddress recipient : mail.getRecipients()) {
if (isRecipientChecked(recipient) && isOverQuota(recipient, mail)) {
@@ -97,9 +96,15 @@ public abstract class AbstractQuotaMatcher extends GenericMatcher {
* to its check.
*
* @param sender the sender to check
- */
- protected boolean isSenderChecked(MailAddress sender) throws MessagingException {
- return !(sender == null || getMailetContext().getPostmaster().equals(sender));
+ */
+ private boolean isSenderChecked(MaybeSender sender) {
+ return sender.asOptional()
+ .filter(mailAddress -> !isPostmaster(mailAddress))
+ .isPresent();
+ }
+
+ private boolean isPostmaster(MailAddress mailAddress) {
+ return getMailetContext().getPostmaster().equals(mailAddress);
}
/**
@@ -111,7 +116,7 @@ public abstract class AbstractQuotaMatcher extends GenericMatcher {
* @param recipient the recipient to check
*/
protected boolean isRecipientChecked(MailAddress recipient) throws MessagingException {
- return !(getMailetContext().getPostmaster().equals(recipient));
+ return !(isPostmaster(recipient));
}
/**
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIs.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIs.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIs.java
index 5d53105..69a4b44 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIs.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIs.java
@@ -20,6 +20,7 @@
package org.apache.james.transport.matchers;
import java.util.Collection;
+import java.util.Optional;
import javax.mail.MessagingException;
@@ -43,7 +44,7 @@ import com.google.common.base.Strings;
*/
public class RecipientIs extends GenericRecipientMatcher {
- private Collection<MailAddress> recipients;
+ private Collection<Optional<MailAddress>> recipients;
@Override
public void init() throws javax.mail.MessagingException {
@@ -58,6 +59,6 @@ public class RecipientIs extends GenericRecipientMatcher {
@Override
public boolean matchRecipient(MailAddress recipient) {
- return recipients.contains(recipient);
+ return recipients.contains(Optional.of(recipient));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIs.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIs.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIs.java
index c9caffb..48eaf0f 100755
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIs.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIs.java
@@ -78,7 +78,9 @@ public class SenderHostIs extends GenericMatcher {
@Override
public Collection<MailAddress> match(Mail mail) {
try {
- if (hasSender(mail) && senderHosts.contains(mail.getSender().getDomain())) {
+ if (mail.getMaybeSender().asOptional()
+ .map(mailAddress -> senderHosts.contains(mailAddress.getDomain()))
+ .orElse(false)) {
return mail.getRecipients();
}
} catch (Exception e) {
@@ -87,9 +89,4 @@ public class SenderHostIs extends GenericMatcher {
return null; //No match.
}
-
- private boolean hasSender(Mail mail) {
- return mail.getSender() != null
- && !mail.getSender().isNullSender();
- }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIsLocal.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIsLocal.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIsLocal.java
index a248c08..996f2d0 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIsLocal.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIsLocal.java
@@ -39,18 +39,17 @@ import org.apache.mailet.base.GenericMatcher;
public class SenderHostIsLocal extends GenericMatcher {
@Override
public Collection<MailAddress> match(Mail mail) {
- if (mail.getSender() != null && isLocalServer(mail)) {
+ if (mail.getMaybeSender().asOptional()
+ .map(this::isLocalServer)
+ .orElse(false)) {
return mail.getRecipients();
}
return null;
}
- private boolean isLocalServer(Mail mail) {
- if (mail.getSender().isNullSender()) {
- return false;
- }
- return this.getMailetContext().isLocalServer(mail.getSender().getDomain());
+ private boolean isLocalServer(MailAddress sender) {
+ return this.getMailetContext().isLocalServer(sender.getDomain());
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIs.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIs.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIs.java
index 821692d..0d42e42 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIs.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIs.java
@@ -47,10 +47,10 @@ import com.google.common.base.Strings;
*/
public class SenderIs extends GenericMatcher {
- private Set<MailAddress> senders;
+ private Set<Optional<MailAddress>> senders;
@VisibleForTesting
- Set<MailAddress> getSenders() {
+ Set<Optional<MailAddress>> getSenders() {
return senders;
}
@@ -67,8 +67,7 @@ public class SenderIs extends GenericMatcher {
@Override
public Collection<MailAddress> match(Mail mail) {
- MailAddress sanitizedSender = Optional.ofNullable(mail.getSender()).orElse(MailAddress.nullSender());
- if (senders.contains(sanitizedSender)) {
+ if (senders.contains(mail.getMaybeSender().asOptional())) {
return mail.getRecipients();
} else {
return null;
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsLocal.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsLocal.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsLocal.java
index 925c596..fcd388b 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsLocal.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsLocal.java
@@ -19,7 +19,6 @@
package org.apache.james.transport.matchers;
import java.util.Collection;
-import java.util.Optional;
import org.apache.james.core.MailAddress;
import org.apache.mailet.Mail;
@@ -32,17 +31,16 @@ public class SenderIsLocal extends GenericMatcher {
@Override
public final Collection<MailAddress> match(Mail mail) {
- if (isLocal(mail.getSender())) {
+ if (mail.getMaybeSender().asOptional()
+ .map(this::isLocal)
+ .orElse(false)) {
return mail.getRecipients();
}
return null;
}
private boolean isLocal(MailAddress mailAddress) {
- return Optional.ofNullable(mailAddress)
- .filter(address -> !address.isNullSender())
- .map(address -> getMailetContext().isLocalEmail(address))
- .orElse(false);
+ return getMailetContext().isLocalEmail(mailAddress);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsNull.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsNull.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsNull.java
index 6fba3c2..1b48fda 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsNull.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsNull.java
@@ -35,18 +35,12 @@ import org.apache.mailet.base.GenericMatcher;
* @since 2.2.0
*/
public class SenderIsNull extends GenericMatcher {
-
@Override
public Collection<MailAddress> match(Mail mail) {
- if (isNullSender(mail)) {
- return mail.getRecipients();
- } else {
+ if (mail.hasSender()) {
return null;
+ } else {
+ return mail.getRecipients();
}
}
-
- private boolean isNullSender(Mail mail) {
- return mail.getSender() == null
- || mail.getSender().isNullSender();
- }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsRegex.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsRegex.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsRegex.java
index a72272f..ef308d5 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsRegex.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsRegex.java
@@ -74,11 +74,7 @@ public class SenderIsRegex extends GenericMatcher {
@Override
public Collection<MailAddress> match(Mail mail) {
- MailAddress mailAddress = mail.getSender();
- if (mailAddress == null) {
- return null;
- }
- String senderString = mailAddress.asString();
+ String senderString = mail.getMaybeSender().asString();
if (pattern.matcher(senderString).matches()) {
return mail.getRecipients();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/main/java/org/apache/james/transport/matchers/utils/MailAddressCollectionReader.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/utils/MailAddressCollectionReader.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/utils/MailAddressCollectionReader.java
index e0ea2fd..733d4dc 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/utils/MailAddressCollectionReader.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/utils/MailAddressCollectionReader.java
@@ -19,6 +19,7 @@
package org.apache.james.transport.matchers.utils;
+import java.util.Optional;
import java.util.Set;
import javax.mail.internet.AddressException;
@@ -33,7 +34,7 @@ import com.google.common.base.Strings;
public class MailAddressCollectionReader {
- public static Set<MailAddress> read(String condition) {
+ public static Set<Optional<MailAddress>> read(String condition) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(condition));
return Splitter.onPattern("(,| |\t)").splitToList(condition)
.stream()
@@ -42,12 +43,12 @@ public class MailAddressCollectionReader {
.collect(Guavate.toImmutableSet());
}
- private static MailAddress getMailAddress(String s) {
+ private static Optional<MailAddress> getMailAddress(String s) {
try {
if (s.equals(MailAddress.NULL_SENDER_AS_STRING)) {
- return MailAddress.nullSender();
+ return Optional.empty();
}
- return new MailAddress(s);
+ return Optional.of(new MailAddress(s));
} catch (AddressException e) {
throw new RuntimeException(e);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsTest.java b/mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsTest.java
index ac9ae53..385bd68 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsTest.java
@@ -23,6 +23,8 @@ package org.apache.james.transport.matchers;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import java.util.Optional;
+
import javax.mail.MessagingException;
import org.apache.james.core.MailAddress;
@@ -154,7 +156,8 @@ class SenderIsTest {
.condition(mailAddress + ", " + SENDER_NAME)
.build());
- assertThat(matcher.getSenders()).containsExactly(new MailAddress(mailAddress), new MailAddress(SENDER_NAME));
+ assertThat(matcher.getSenders()).containsExactly(Optional.of(new MailAddress(mailAddress)),
+ Optional.of(new MailAddress(SENDER_NAME)));
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/standard/src/test/java/org/apache/james/transport/matchers/util/MailAddressCollectionReaderTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/matchers/util/MailAddressCollectionReaderTest.java b/mailet/standard/src/test/java/org/apache/james/transport/matchers/util/MailAddressCollectionReaderTest.java
index 6bad784..e75aa2e 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/matchers/util/MailAddressCollectionReaderTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/matchers/util/MailAddressCollectionReaderTest.java
@@ -22,6 +22,8 @@ package org.apache.james.transport.matchers.util;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import java.util.Optional;
+
import org.apache.james.core.MailAddress;
import org.apache.james.transport.matchers.utils.MailAddressCollectionReader;
import org.junit.jupiter.api.Test;
@@ -57,13 +59,13 @@ class MailAddressCollectionReaderTest {
MailAddress mailAddress = new MailAddress("valid@apache.org");
assertThat(MailAddressCollectionReader.read(mailAddress.toString()))
- .containsExactly(mailAddress);
+ .containsExactly(Optional.of(mailAddress));
}
@Test
void readShouldParseNullSender() {
assertThat(MailAddressCollectionReader.read("<>"))
- .containsExactly(MailAddress.nullSender());
+ .containsExactly(Optional.empty());
}
@Test
@@ -72,7 +74,7 @@ class MailAddressCollectionReaderTest {
MailAddress mailAddress2 = new MailAddress("bis@apache.org");
assertThat(MailAddressCollectionReader.read(mailAddress1.toString() + "," + mailAddress2.toString()))
- .containsExactly(mailAddress1, mailAddress2);
+ .containsExactly(Optional.of(mailAddress1), Optional.of(mailAddress2));
}
@Test
@@ -81,7 +83,7 @@ class MailAddressCollectionReaderTest {
MailAddress mailAddress2 = new MailAddress("bis@apache.org");
assertThat(MailAddressCollectionReader.read(mailAddress1.toString() + " " + mailAddress2.toString()))
- .containsExactly(mailAddress1, mailAddress2);
+ .containsExactly(Optional.of(mailAddress1), Optional.of(mailAddress2));
}
@Test
@@ -90,7 +92,7 @@ class MailAddressCollectionReaderTest {
MailAddress mailAddress2 = new MailAddress("bis@apache.org");
assertThat(MailAddressCollectionReader.read(mailAddress1.toString() + "\t" + mailAddress2.toString()))
- .containsExactly(mailAddress1, mailAddress2);
+ .containsExactly(Optional.of(mailAddress1), Optional.of(mailAddress2));
}
@@ -100,7 +102,7 @@ class MailAddressCollectionReaderTest {
MailAddress mailAddress2 = new MailAddress("bis@apache.org");
assertThat(MailAddressCollectionReader.read(mailAddress1.toString() + ",\t \t,\t \t " + mailAddress2.toString()))
- .containsExactly(mailAddress1, mailAddress2);
+ .containsExactly(Optional.of(mailAddress1), Optional.of(mailAddress2));
}
@Test
@@ -108,7 +110,7 @@ class MailAddressCollectionReaderTest {
MailAddress mailAddress = new MailAddress("valid@apache.org");
assertThat(MailAddressCollectionReader.read(mailAddress.toString() + ", " + mailAddress.toString()))
- .containsExactly(mailAddress);
+ .containsExactly(Optional.of(mailAddress));
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
----------------------------------------------------------------------
diff --git a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
index 6791a1f..895256e 100644
--- a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
+++ b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
@@ -72,21 +72,6 @@ public class FakeMail implements Mail, Serializable {
.build();
}
- public static FakeMail fromMail(Mail mail) throws MessagingException {
- return new FakeMail(mail.getMessage(),
- Lists.newArrayList(mail.getRecipients()),
- mail.getName(),
- mail.getSender(),
- mail.getState(),
- mail.getErrorMessage(),
- mail.getLastUpdated(),
- attributes(mail),
- mail.getMessageSize(),
- mail.getRemoteAddr(),
- mail.getRemoteHost(),
- mail.getPerRecipientSpecificHeaders());
- }
-
public static FakeMail from(MimeMessage message) throws MessagingException {
return builder()
.mimeMessage(message)
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
----------------------------------------------------------------------
diff --git a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
index 8dbf7f9..7fbb014 100644
--- a/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
+++ b/mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
@@ -64,7 +64,7 @@ public class FakeMailContext implements MailetContext {
public static SentMail.Builder fromMail(Mail mail) throws MessagingException {
return sentMailBuilder()
- .sender(mail.getSender())
+ .sender(mail.getMaybeSender().asOptional())
.recipients(mail.getRecipients())
.message(mail.getMessage())
.state(mail.getState())
@@ -133,6 +133,11 @@ public class FakeMailContext implements MailetContext {
return this;
}
+ public Builder sender(Optional<MailAddress> sender) {
+ sender.ifPresent(this::sender);
+ return this;
+ }
+
public Builder sender(String sender) throws AddressException {
return sender(new MailAddress(sender));
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java b/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
index af13b67..ae9c853 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
@@ -47,6 +47,7 @@ import javax.mail.internet.ParseException;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.james.core.MailAddress;
+import org.apache.james.core.MaybeSender;
import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.james.lifecycle.api.Disposable;
import org.apache.james.lifecycle.api.LifecycleUtil;
@@ -176,7 +177,17 @@ public class MailImpl implements Disposable, Mail {
}
public Builder sender(MailAddress sender) {
- this.sender = Optional.ofNullable(sender);
+ return sender(Optional.ofNullable(sender));
+ }
+
+ public Builder sender(Optional<MailAddress> sender) {
+ this.sender = sender;
+ return this;
+ }
+
+
+ public Builder sender(MaybeSender sender) {
+ this.sender = sender.asOptional();
return this;
}
@@ -387,7 +398,7 @@ public class MailImpl implements Disposable, Mail {
}
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"unchecked", "deprecated"})
private MailImpl(Mail mail, String newName) throws MessagingException {
this(newName, mail.getSender(), mail.getRecipients(), mail.getMessage());
setRemoteHost(mail.getRemoteHost());
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
index 06d9e16..62d2f1e 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
@@ -31,6 +31,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.mailet.Mail;
import org.apache.mailet.base.MailAddressFixture;
@@ -64,7 +65,7 @@ public class MailImplTest {
assertThat(mail.getRemoteHost()).describedAs("initial remote host is localhost").isEqualTo("localhost");
assertThat(mail.getState()).describedAs("default initial state").isEqualTo(Mail.DEFAULT);
assertThat(mail.getMessage()).isNull();
- assertThat(mail.getSender()).isNull();
+ assertThat(mail.getMaybeSender()).isEqualTo(MaybeSender.nullSender());
assertThat(mail.getName()).isNull();
}
@@ -97,7 +98,7 @@ public class MailImplTest {
MailAddress senderMailAddress = new MailAddress(sender);
MailImpl mail = new MailImpl(name, senderMailAddress, recipients);
- assertThat(mail.getSender().asString()).isEqualTo(sender);
+ assertThat(mail.getMaybeSender().get().asString()).isEqualTo(sender);
assertThat(mail.getName()).isEqualTo(name);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java b/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java
index 4a3449c..4d458cd 100644
--- a/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java
+++ b/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java
@@ -23,6 +23,9 @@ import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Stream;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
public class OptionalUtils {
@FunctionalInterface
@@ -42,6 +45,16 @@ public class OptionalUtils {
.orElse(Stream.of());
}
+ public static <T> ImmutableList<T> toList(Optional<T> optional) {
+ return optional.map(ImmutableList::of)
+ .orElse(ImmutableList.of());
+ }
+
+ public static <T> ImmutableSet<T> toSet(Optional<T> optional) {
+ return optional.map(ImmutableSet::of)
+ .orElse(ImmutableSet.of());
+ }
+
@SafeVarargs
public static <T> Optional<T> or(Optional<T>... optionals) {
return orStream(Arrays.stream(optionals));
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/data/data-jcr/src/main/java/org/apache/james/mailrepository/jcr/JCRMailRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-jcr/src/main/java/org/apache/james/mailrepository/jcr/JCRMailRepository.java b/server/data/data-jcr/src/main/java/org/apache/james/mailrepository/jcr/JCRMailRepository.java
index c2f8218..a546847 100644
--- a/server/data/data-jcr/src/main/java/org/apache/james/mailrepository/jcr/JCRMailRepository.java
+++ b/server/data/data-jcr/src/main/java/org/apache/james/mailrepository/jcr/JCRMailRepository.java
@@ -58,6 +58,7 @@ import org.apache.jackrabbit.commons.cnd.CndImporter;
import org.apache.jackrabbit.util.ISO9075;
import org.apache.jackrabbit.util.Text;
import org.apache.james.core.MailAddress;
+import org.apache.james.core.MaybeSender;
import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepository;
import org.apache.james.mailrepository.lib.AbstractMailRepository;
@@ -210,7 +211,7 @@ public class JCRMailRepository extends AbstractMailRepository implements MailRep
setError(node, mail.getErrorMessage());
setRemoteHost(node, mail.getRemoteHost());
setRemoteAddr(node, mail.getRemoteAddr());
- setSender(node, mail.getSender());
+ setSender(node, mail.getMaybeSender());
setRecipients(node, mail.getRecipients());
setMessage(node, mail.getMessage());
setAttributes(node, mail);
@@ -417,8 +418,8 @@ public class JCRMailRepository extends AbstractMailRepository implements MailRep
* @throws RepositoryException
* if a repository error occurs
*/
- private void setSender(Node node, MailAddress sender) throws RepositoryException {
- node.setProperty("james:sender", sender.toString());
+ private void setSender(Node node, MaybeSender sender) throws RepositoryException {
+ node.setProperty("james:sender", sender.asString());
}
/**
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java b/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
index 0c95dd5..4839de7 100644
--- a/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
+++ b/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
@@ -435,10 +435,10 @@ public class JDBCMailRepository extends AbstractMailRepository {
updateMessage = conn.prepareStatement(sqlQueries.getSqlString("updateMessageSQL", true));
updateMessage.setString(1, mc.getState());
updateMessage.setString(2, mc.getErrorMessage());
- if (mc.getSender() == null) {
+ if (mc.getMaybeSender().isNullSender()) {
updateMessage.setNull(3, java.sql.Types.VARCHAR);
} else {
- updateMessage.setString(3, mc.getSender().toString());
+ updateMessage.setString(3, mc.getMaybeSender().get().toString());
}
StringBuilder recipients = new StringBuilder();
for (Iterator<MailAddress> i = mc.getRecipients().iterator(); i.hasNext();) {
@@ -529,10 +529,10 @@ public class JDBCMailRepository extends AbstractMailRepository {
insertMessage.setString(2, repositoryName);
insertMessage.setString(3, mc.getState());
insertMessage.setString(4, mc.getErrorMessage());
- if (mc.getSender() == null) {
+ if (mc.getMaybeSender().isNullSender()) {
insertMessage.setNull(5, Types.VARCHAR);
} else {
- insertMessage.setString(5, mc.getSender().toString());
+ insertMessage.setString(5, mc.getMaybeSender().get().toString());
}
StringBuilder recipients = new StringBuilder();
for (Iterator<MailAddress> i = mc.getRecipients().iterator(); i.hasNext();) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
index 0f4d0cc..879d46f 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
@@ -62,6 +62,7 @@ import org.apache.mailet.base.RFC2822Headers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.github.fge.lambdas.Throwing;
import com.google.common.collect.ImmutableSet;
public class JamesMailetContext implements MailetContext, Configurable {
@@ -173,13 +174,13 @@ public class JamesMailetContext implements MailetContext, Configurable {
*/
@Override
public void bounce(Mail mail, String message, MailAddress bouncer) throws MessagingException {
- if (mail.getSender() == null) {
+ if (!mail.hasSender()) {
LOGGER.info("Mail to be bounced contains a null (<>) reverse path. No bounce will be sent.");
return;
} else {
// Bounce message goes to the reverse path, not to the Reply-To
// address
- LOGGER.info("Processing a bounce request for a message with a reverse path of {}", mail.getSender());
+ LOGGER.info("Processing a bounce request for a message with a reverse path of {}", mail.getMaybeSender());
}
MailImpl reply = rawBounce(mail, message);
@@ -216,9 +217,13 @@ public class JamesMailetContext implements MailetContext, Configurable {
MimeMessage reply = (MimeMessage) original.reply(false);
reply.setSubject("Re: " + original.getSubject());
reply.setSentDate(new Date());
- Collection<MailAddress> recipients = new HashSet<>();
- recipients.add(mail.getSender());
- InternetAddress[] addr = {new InternetAddress(mail.getSender().toString())};
+ Collection<MailAddress> recipients = mail.getMaybeSender().asList();
+ InternetAddress[] addr = mail.getMaybeSender().asOptional()
+ .map(MailAddress::asString)
+ .map(Throwing.function((String s) -> new InternetAddress(s)).sneakyThrow())
+ .map(address -> new InternetAddress[]{address})
+ .orElse(new InternetAddress[0]);
+
reply.setRecipients(Message.RecipientType.TO, addr);
reply.setFrom(new InternetAddress(mail.getRecipients().iterator().next().toString()));
reply.setText(bounceText);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelProcessor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelProcessor.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelProcessor.java
index a1ae59a..779545c 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelProcessor.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelProcessor.java
@@ -75,7 +75,7 @@ public class CamelProcessor {
.addContext("mailet", mailet.getClass().getSimpleName())
.addContext("mail", mail.getName())
.addContext("recipients", ImmutableList.copyOf(mail.getRecipients()))
- .addContext("sender", mail.getSender())
+ .addContext("sender", mail.getMaybeSender())
.build()) {
MailetPipelineLogging.logBeginOfMailetProcess(mailet, mail);
mailet.service(mail);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java
index 21d721a..7f328fe 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java
@@ -103,7 +103,7 @@ public class MatcherSplitter {
.addContext("state", mail.getState())
.addContext("mail", mail.getName())
.addContext("recipients", ImmutableList.copyOf(mail.getRecipients()))
- .addContext("sender", mail.getSender())
+ .addContext("sender", mail.getMaybeSender())
.build()) {
// call the matcher
matchedRcpts = matcher.match(mail);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java
index 7e9c29a..bd84484 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java
@@ -294,7 +294,7 @@ public class BayesianAnalysis extends GenericMailet {
if (ignoreLocalSender) {
// ignore the message if the sender is local
- if (mail.getSender() != null && getMailetContext().isLocalServer(mail.getSender().getDomain())) {
+ if (isSenderLocal(mail)) {
return;
}
}
@@ -323,12 +323,8 @@ public class BayesianAnalysis extends GenericMailet {
probabilityForm.applyPattern("##0.##%");
String probabilityString = probabilityForm.format(probability);
- String senderString;
- if (mail.getSender() == null) {
- senderString = "null";
- } else {
- senderString = mail.getSender().toString();
- }
+ String senderString = mail.getMaybeSender().asString("null");
+
if (probability > 0.1) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(headerName + ": " + probabilityString + "; From: " + senderString + "; Recipient(s): " + getAddressesString(mail.getRecipients()));
@@ -348,6 +344,13 @@ public class BayesianAnalysis extends GenericMailet {
}
}
+ private boolean isSenderLocal(Mail mail) {
+ return mail.getMaybeSender().asOptional()
+ .map(MailAddress::getDomain)
+ .map(domain -> getMailetContext().isLocalServer(domain))
+ .orElse(false);
+ }
+
private void loadData(Connection conn) throws java.sql.SQLException {
try {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
index 0d2d1a6..f2072d8 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
@@ -237,11 +237,11 @@ public class Bounce extends GenericMailet implements RedirectNotify {
@Override
public void service(Mail originalMail) throws MessagingException {
- if (originalMail.getSender() == null) {
+ if (!originalMail.hasSender()) {
passThrough(originalMail);
} else {
if (getInitParameters().isDebug()) {
- LOGGER.debug("Processing a bounce request for a message with a reverse path. The bounce will be sent to {}", originalMail.getSender());
+ LOGGER.debug("Processing a bounce request for a message with a reverse path. The bounce will be sent to {}", originalMail.getMaybeSender());
}
ProcessRedirectNotify.from(this).process(originalMail);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
index d03f391..6f10b51 100755
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
@@ -35,6 +35,7 @@ import javax.mail.internet.MimeMessage;
import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.james.core.MailAddress;
+import org.apache.james.core.MaybeSender;
import org.apache.james.dnsservice.api.DNSService;
import org.apache.james.javax.MimeMultipartReport;
import org.apache.james.server.core.MailImpl;
@@ -250,7 +251,7 @@ public class DSNBounce extends GenericMailet implements RedirectNotify {
if (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());
}
newMail.setMessage(createBounceMessage(originalMail));
@@ -279,7 +280,7 @@ public class DSNBounce extends GenericMailet implements RedirectNotify {
}
private boolean hasSender(Mail originalMail) {
- if (originalMail.getSender() == null) {
+ if (!originalMail.hasSender()) {
if (getInitParameters().isDebug()) {
LOGGER.info("Processing a bounce request for a message with an empty reverse-path. No bounce will be sent.");
}
@@ -313,12 +314,12 @@ public class DSNBounce extends GenericMailet implements RedirectNotify {
}
private List<MailAddress> getSenderAsList(Mail originalMail) {
- MailAddress reversePath = originalMail.getSender();
+ 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);
+ LOGGER.debug("Processing a bounce request for a message with a reverse path. The bounce will be sent to {}", reversePath.asString());
}
-
- return ImmutableList.of(reversePath);
+ return reversePath.asList();
}
private MimeMessage createBounceMessage(Mail originalMail) throws MessagingException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
index 12f1c5d..a986733 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
@@ -35,6 +35,7 @@ import org.apache.james.rrt.api.RecipientRewriteTable.ErrorMappingException;
import org.apache.james.rrt.api.RecipientRewriteTableException;
import org.apache.james.rrt.lib.Mapping;
import org.apache.james.rrt.lib.Mappings;
+import org.apache.james.server.core.MailImpl;
import org.apache.james.util.MemoizedSupplier;
import org.apache.james.util.OptionalUtils;
import org.apache.mailet.Mail;
@@ -127,7 +128,14 @@ public class RecipientRewriteTableProcessor {
RrtExecutionResult executionResults = executeRrtFor(mail);
if (!executionResults.recipientWithError.isEmpty()) {
- mailetContext.sendMail(mail.getSender(), executionResults.recipientWithError, mail.getMessage(), errorProcessor);
+ MailImpl newMail = MailImpl.builder()
+ .name(mail.getName())
+ .sender(mail.getMaybeSender())
+ .recipients(executionResults.recipientWithError)
+ .mimeMessage(mail.getMessage())
+ .state(errorProcessor)
+ .build();
+ mailetContext.sendMail(newMail);
}
if (executionResults.newRecipients.isEmpty()) {
@@ -155,7 +163,7 @@ public class RecipientRewriteTableProcessor {
Mappings mappings = virtualTableStore.getMappings(recipient.getLocalPart(), recipient.getDomain());
if (mappings != null && !mappings.isEmpty()) {
- List<MailAddress> newMailAddresses = handleMappings(mappings, mail.getSender(), recipient, mail.getMessage());
+ List<MailAddress> newMailAddresses = handleMappings(mappings, mail, recipient, mail.getMessage());
return RrtExecutionResult.success(newMailAddresses);
}
return RrtExecutionResult.success(recipient);
@@ -166,14 +174,14 @@ public class RecipientRewriteTableProcessor {
}
@VisibleForTesting
- List<MailAddress> handleMappings(Mappings mappings, MailAddress sender, MailAddress recipient, MimeMessage message) throws MessagingException {
+ List<MailAddress> handleMappings(Mappings mappings, Mail mail, MailAddress recipient, MimeMessage message) throws MessagingException {
ImmutableList<MailAddress> mailAddresses = mappings.asStream()
.map(mapping -> mapping.appendDomainIfNone(defaultDomainSupplier))
.map(Mapping::asMailAddress)
.flatMap(OptionalUtils::toStream)
.collect(Guavate.toImmutableList());
- forwardToRemoteAddress(sender, recipient, message, mailAddresses);
+ forwardToRemoteAddress(mail, recipient, message, mailAddresses);
return getLocalAddresses(mailAddresses);
}
@@ -184,14 +192,20 @@ public class RecipientRewriteTableProcessor {
.collect(Guavate.toImmutableList());
}
- private void forwardToRemoteAddress(MailAddress sender, MailAddress recipient, MimeMessage message, ImmutableList<MailAddress> mailAddresses) {
+ private void forwardToRemoteAddress(Mail mail, MailAddress recipient, MimeMessage message, ImmutableList<MailAddress> mailAddresses) {
ImmutableList<MailAddress> remoteAddresses = mailAddresses.stream()
.filter(mailAddress -> !mailetContext.isLocalServer(mailAddress.getDomain()))
.collect(Guavate.toImmutableList());
if (!remoteAddresses.isEmpty()) {
try {
- mailetContext.sendMail(sender, remoteAddresses, message);
+ mailetContext.sendMail(
+ MailImpl.builder()
+ .name(mail.getName())
+ .sender(mail.getMaybeSender())
+ .recipients(remoteAddresses)
+ .mimeMessage(message)
+ .build());
LOGGER.info("Mail for {} forwarded to {}", recipient, remoteAddresses);
} catch (MessagingException ex) {
LOGGER.warn("Error forwarding mail to {}", remoteAddresses);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
index 238fed8..48bcf65 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
@@ -204,7 +204,7 @@ public class RemoteDelivery extends GenericMailet {
serviceWithGateway(mail);
}
} else {
- LOGGER.debug("Mail {} from {} has no recipients and can not be remotely delivered", mail.getName(), mail.getSender());
+ LOGGER.debug("Mail {} from {} has no recipients and can not be remotely delivered", mail.getName(), mail.getMaybeSender());
}
mail.setState(Mail.GHOST);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
index 277cee3..3c71efd 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
@@ -22,7 +22,6 @@ package org.apache.james.transport.mailets;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
-import org.apache.james.core.MailAddress;
import org.apache.james.jspf.core.Logger;
import org.apache.james.jspf.executor.SPFResult;
import org.apache.james.jspf.impl.DefaultSPF;
@@ -71,17 +70,11 @@ public class SPF extends GenericMailet {
@Override
public void service(Mail mail) throws MessagingException {
- String sender;
- MailAddress senderAddr = mail.getSender();
String remoteAddr = mail.getRemoteAddr();
String helo = mail.getRemoteHost();
if (!remoteAddr.equals("127.0.0.1")) {
- if (senderAddr != null) {
- sender = senderAddr.toString();
- } else {
- sender = "";
- }
+ String sender = mail.getMaybeSender().asString("");
SPFResult result = spf.checkSPF(remoteAddr, sender, helo);
mail.setAttribute(EXPLANATION_ATTRIBUTE, result.getExplanation());
mail.setAttribute(RESULT_ATTRIBUTE, result.getResult());
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderDomainRepository.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderDomainRepository.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderDomainRepository.java
index 2dce4e6..b3b3b7f 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderDomainRepository.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderDomainRepository.java
@@ -24,6 +24,8 @@ import java.util.Optional;
import javax.inject.Inject;
import javax.mail.MessagingException;
+import org.apache.james.core.Domain;
+import org.apache.james.core.MailAddress;
import org.apache.james.mailrepository.api.MailRepository;
import org.apache.james.mailrepository.api.MailRepositoryStore;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
@@ -89,7 +91,13 @@ public class ToSenderDomainRepository extends GenericMailet {
@Override
public void service(Mail mail) throws MessagingException {
- MailRepositoryUrl repositoryUrl = MailRepositoryUrl.from(urlPrefix + mail.getSender().getDomain().asString());
+ String domain = mail.getMaybeSender()
+ .asOptional()
+ .map(MailAddress::getDomain)
+ .map(Domain::asString)
+ .orElse("");
+
+ MailRepositoryUrl repositoryUrl = MailRepositoryUrl.from(urlPrefix + domain);
store(mail, repositoryUrl);
if (!passThrough) {
mail.setState(Mail.GHOST);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
index 10e52ea..6340be4 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
@@ -79,12 +79,14 @@ public class ToSenderFolder extends GenericMailet {
}
private void doService(Mail mail) throws MessagingException {
- MailAddress sender = mail.getSender();
- String username = retrieveUser(sender);
+ if (mail.hasSender()) {
+ MailAddress sender = mail.getMaybeSender().get();
+ String username = retrieveUser(sender);
- mailboxAppender.append(mail.getMessage(), username, folder);
+ mailboxAppender.append(mail.getMessage(), username, folder);
- LOGGER.error("Local delivery with ToSenderFolder mailet for mail {} with sender {} in folder {}", mail.getName(), sender, folder);
+ LOGGER.error("Local delivery with ToSenderFolder mailet for mail {} with sender {} in folder {}", mail.getName(), sender, folder);
+ }
}
private String retrieveUser(MailAddress sender) throws MessagingException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java
index 58b0418..0249c7a 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java
@@ -244,10 +244,10 @@ public class WhiteListManager extends GenericMailet {
public void service(Mail mail) throws MessagingException {
// check if it's a local sender
- MailAddress senderMailAddress = mail.getSender();
- if (senderMailAddress == null) {
+ if (!mail.hasSender()) {
return;
}
+ MailAddress senderMailAddress = mail.getMaybeSender().get();
if (!getMailetContext().isLocalEmail(senderMailAddress)) {
// not a local sender, so return
return;
@@ -375,7 +375,7 @@ public class WhiteListManager extends GenericMailet {
* Manages a display request.
*/
private void manageDisplayRequest(Mail mail) throws MessagingException {
- MailAddress senderMailAddress = mail.getSender();
+ MailAddress senderMailAddress = mail.getMaybeSender().get();
String senderUser = senderMailAddress.getLocalPart().toLowerCase(Locale.US);
Domain senderHost = senderMailAddress.getDomain();
@@ -423,7 +423,7 @@ public class WhiteListManager extends GenericMailet {
* Manages an insert request.
*/
private void manageInsertRequest(Mail mail) throws MessagingException {
- MailAddress senderMailAddress = mail.getSender();
+ MailAddress senderMailAddress = mail.getMaybeSender().get();
String senderUser = senderMailAddress.getLocalPart().toLowerCase(Locale.US);
Domain senderHost = senderMailAddress.getDomain();
@@ -544,7 +544,7 @@ public class WhiteListManager extends GenericMailet {
* Manages a remove request.
*/
private void manageRemoveRequest(Mail mail) throws MessagingException {
- MailAddress senderMailAddress = mail.getSender();
+ MailAddress senderMailAddress = mail.getMaybeSender().get();
String senderUser = senderMailAddress.getLocalPart().toLowerCase(Locale.US);
Domain senderHost = senderMailAddress.getDomain();
@@ -665,7 +665,7 @@ public class WhiteListManager extends GenericMailet {
try {
MailAddress notifier = getMailetContext().getPostmaster();
- MailAddress senderMailAddress = mail.getSender();
+ MailAddress senderMailAddress = mail.getMaybeSender().get();
MimeMessage message = mail.getMessage();
// Create the reply message
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java
deleted file mode 100644
index 3385f38..0000000
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java
+++ /dev/null
@@ -1,34 +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 org.apache.james.core.MailAddress;
-
-public class DeliveryUtils {
-
- public static String prettyPrint(MailAddress mailAddress) {
- if (mailAddress != null) {
- return mailAddress.asPrettyString();
- } else {
- return "<>";
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
index 502e160..bbc575f 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
@@ -28,6 +28,7 @@ import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.apache.james.core.MailAddress;
+import org.apache.james.server.core.MailImpl;
import org.apache.mailet.Mail;
import org.apache.mailet.MailetContext;
import org.apache.mailet.PerRecipientHeaders.Header;
@@ -68,7 +69,7 @@ public class MailDispatcher {
return this;
}
- public MailDispatcher build() throws MessagingException {
+ public MailDispatcher build() {
Preconditions.checkNotNull(mailStore);
Preconditions.checkNotNull(mailetContext);
return new MailDispatcher(mailStore, consume.orElse(CONSUME), mailetContext);
@@ -87,7 +88,7 @@ public class MailDispatcher {
}
public void dispatch(Mail mail) throws MessagingException {
- Collection<MailAddress> errors = customizeHeadersAndDeliver(mail);
+ List<MailAddress> errors = customizeHeadersAndDeliver(mail);
if (!errors.isEmpty()) {
// If there were errors, we redirect the email to the ERROR
// processor.
@@ -96,7 +97,13 @@ public class MailDispatcher {
// the sender. Note that this email doesn't include any details
// regarding the details of the failure(s).
// In the future we may wish to address this.
- mailetContext.sendMail(mail.getSender(), errors, mail.getMessage(), Mail.ERROR);
+ Mail newMail = MailImpl.builder()
+ .sender(mail.getMaybeSender())
+ .recipients(errors)
+ .mimeMessage(mail.getMessage())
+ .state(Mail.ERROR)
+ .build();
+ mailetContext.sendMail(newMail);
}
if (consume) {
// Consume this message
@@ -104,19 +111,19 @@ public class MailDispatcher {
}
}
- private Collection<MailAddress> customizeHeadersAndDeliver(Mail mail) throws MessagingException {
+ private List<MailAddress> customizeHeadersAndDeliver(Mail mail) throws MessagingException {
MimeMessage message = mail.getMessage();
// Set Return-Path and remove all other Return-Path headers from the message
// This only works because there is a placeholder inserted by MimeMessageWrapper
- message.setHeader(RFC2822Headers.RETURN_PATH, DeliveryUtils.prettyPrint(mail.getSender()));
+ message.setHeader(RFC2822Headers.RETURN_PATH, mail.getMaybeSender().asPrettyString());
- Collection<MailAddress> errors = deliver(mail, message);
+ List<MailAddress> errors = deliver(mail, message);
return errors;
}
- private Collection<MailAddress> deliver(Mail mail, MimeMessage message) {
- Collection<MailAddress> errors = new ArrayList<>();
+ private List<MailAddress> deliver(Mail mail, MimeMessage message) {
+ List<MailAddress> errors = new ArrayList<>();
for (MailAddress recipient : mail.getRecipients()) {
try {
Map<String, List<String>> savedHeaders = saveHeaders(mail, recipient);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java
index 2db2bf1..41708b8 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java
@@ -66,7 +66,7 @@ public class SimpleMailStore implements MailStore {
return this;
}
- public SimpleMailStore build() throws MessagingException {
+ public SimpleMailStore build() {
Preconditions.checkNotNull(usersRepos);
Preconditions.checkNotNull(folder);
Preconditions.checkNotNull(mailboxAppender);
@@ -96,7 +96,7 @@ public class SimpleMailStore implements MailStore {
metric.increment();
LOGGER.info("Local delivered mail {} successfully from {} to {} in folder {} with composedMessageId {}", mail.getName(),
- DeliveryUtils.prettyPrint(mail.getSender()), DeliveryUtils.prettyPrint(recipient), locatedFolder, composedMessageId);
+ mail.getMaybeSender().asString(), recipient.asPrettyString(), locatedFolder, composedMessageId);
}
private String locateFolder(String username, Mail mail) {
@@ -106,7 +106,7 @@ public class SimpleMailStore implements MailStore {
return folder;
}
- private String computeUsername(MailAddress recipient) throws MessagingException {
+ private String computeUsername(MailAddress recipient) {
try {
return usersRepository.getUser(recipient);
} catch (UsersRepositoryException e) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ce35148/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
index 4fff11e..378a77e 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
@@ -59,6 +59,7 @@ public class RedirectAction implements MailAction {
*/
public void execute(ActionRedirect anAction, Mail aMail, ActionContext context) throws MessagingException {
ActionUtils.detectAndHandleLocalLooping(aMail, context, "redirect");
+
Collection<MailAddress> recipients = new ArrayList<>(1);
recipients.add(new MailAddress(new InternetAddress(anAction.getAddress())));
MailAddress sender = aMail.getSender();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[06/11] james-project git commit: JAMES-2557 Sieve connector should
allow to post raw emails
Posted by bt...@apache.org.
JAMES-2557 Sieve connector should allow to post raw emails
This allow:
- Using the more explicit MailImpl builder
- Handling null sender by default
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/aaf17678
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/aaf17678
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/aaf17678
Branch: refs/heads/master
Commit: aaf176780e6b5177acf214ee010ae96820eef1c1
Parents: 8ce3514
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Oct 19 11:04:00 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:08 2018 +0700
----------------------------------------------------------------------
.../transport/mailets/jsieve/ActionContext.java | 6 +-----
.../mailets/jsieve/RedirectAction.java | 15 +++++++------
.../transport/mailets/jsieve/RejectAction.java | 22 ++++++++++++--------
.../mailets/jsieve/SieveMailAdapter.java | 5 ++---
.../mailets/jsieve/VacationAction.java | 8 ++++++-
5 files changed, 30 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
index 062772e..b85ada7 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
@@ -19,10 +19,8 @@
package org.apache.james.transport.mailets.jsieve;
import java.time.ZonedDateTime;
-import java.util.Collection;
import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
import org.apache.james.core.MailAddress;
import org.apache.mailet.Mail;
@@ -60,12 +58,10 @@ public interface ActionContext {
/**
* Posts the given mail.
- * @param sender possibly null
- * @param recipients not null
* @param mail not null
* @throws MessagingException when mail cannot be posted
*/
- public void post(MailAddress sender, Collection<MailAddress> recipients, MimeMessage mail) throws MessagingException;
+ public void post(Mail mail) throws MessagingException;
/**
* Gets name (including version) of this server.
http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
index 378a77e..1df00ca 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
@@ -18,13 +18,10 @@
****************************************************************/
package org.apache.james.transport.mailets.jsieve;
-import java.util.ArrayList;
-import java.util.Collection;
-
import javax.mail.MessagingException;
-import javax.mail.internet.InternetAddress;
import org.apache.james.core.MailAddress;
+import org.apache.james.server.core.MailImpl;
import org.apache.jsieve.mail.Action;
import org.apache.jsieve.mail.ActionRedirect;
import org.apache.mailet.Mail;
@@ -60,10 +57,12 @@ public class RedirectAction implements MailAction {
public void execute(ActionRedirect anAction, Mail aMail, ActionContext context) throws MessagingException {
ActionUtils.detectAndHandleLocalLooping(aMail, context, "redirect");
- Collection<MailAddress> recipients = new ArrayList<>(1);
- recipients.add(new MailAddress(new InternetAddress(anAction.getAddress())));
- MailAddress sender = aMail.getSender();
- context.post(sender, recipients, aMail.getMessage());
+ context.post(MailImpl.builder()
+ .sender(aMail.getMaybeSender())
+ .recipient(new MailAddress(anAction.getAddress()))
+ .mimeMessage(aMail.getMessage())
+ .build());
+
LOGGER.debug("Redirected Message ID: {} to \"{}\"", aMail.getMessage().getMessageID(), anAction.getAddress());
DiscardAction.removeRecipient(aMail, context);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
index ce5c9d5..2e99e3c 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
@@ -20,8 +20,7 @@ package org.apache.james.transport.mailets.jsieve;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Arrays;
import javax.mail.Address;
import javax.mail.MessagingException;
@@ -38,12 +37,16 @@ import org.apache.james.mdn.fields.ReportingUserAgent;
import org.apache.james.mdn.modifier.DispositionModifier;
import org.apache.james.mdn.sending.mode.DispositionSendingMode;
import org.apache.james.mdn.type.DispositionType;
+import org.apache.james.server.core.MailImpl;
import org.apache.jsieve.mail.Action;
import org.apache.jsieve.mail.ActionReject;
import org.apache.mailet.Mail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableList;
+
/**
* Performs the rejection of a mail, with a reply to the sender.
* <h4>Thread Safety</h4>
@@ -133,13 +136,14 @@ public class RejectAction implements MailAction {
reply.setContent(multipart);
reply.saveChanges();
Address[] recipientAddresses = reply.getAllRecipients();
- if (null != recipientAddresses) {
- Collection<MailAddress> recipients = new ArrayList<>(recipientAddresses.length);
- for (Address recipientAddress : recipientAddresses) {
- recipients.add(new MailAddress(
- (InternetAddress) recipientAddress));
- }
- context.post(null, recipients, reply);
+ if (recipientAddresses != null) {
+ context.post(MailImpl.builder()
+ .recipients(Arrays.stream(recipientAddresses)
+ .map(address -> (InternetAddress) address)
+ .map(Throwing.function(MailAddress::new))
+ .collect(ImmutableList.toImmutableList()))
+ .mimeMessage(reply)
+ .build());
} else {
LOGGER.info("Unable to send reject MDN. Could not determine the recipient.");
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/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 fa6d851..0eafe2e 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
@@ -21,7 +21,6 @@ package org.apache.james.transport.mailets.jsieve;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
@@ -373,8 +372,8 @@ public class SieveMailAdapter implements MailAdapter, EnvelopeAccessors, ActionC
}
@Override
- public void post(MailAddress sender, Collection<MailAddress> recipients, MimeMessage mail) throws MessagingException {
- getMailetContext().sendMail(sender, recipients, mail);
+ public void post(Mail mail) throws MessagingException {
+ getMailetContext().sendMail(mail);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
index b3847b9..80b772d 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
@@ -27,6 +27,7 @@ import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import org.apache.james.core.MailAddress;
+import org.apache.james.server.core.MailImpl;
import org.apache.jsieve.mail.Action;
import org.apache.jsieve.mail.optional.ActionVacation;
import org.apache.mailet.Mail;
@@ -64,7 +65,12 @@ public class VacationAction implements MailAction {
.reason(actionVacation.getReason())
.subject(actionVacation.getSubject())
.build();
- context.post(vacationReply.getSender(), vacationReply.getRecipients(), vacationReply.getMimeMessage());
+
+ context.post(MailImpl.builder()
+ .sender(vacationReply.getSender())
+ .recipients(vacationReply.getRecipients())
+ .mimeMessage(vacationReply.getMimeMessage())
+ .build());
}
private boolean isStillInVacation(ActionVacation actionVacation, int dayDifference) {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[10/11] james-project git commit: JAMES-2557 Improve RRT processor
code quality
Posted by bt...@apache.org.
JAMES-2557 Improve RRT processor code quality
- Avoid passing some parameters
- Remove uneeded exceptions
- Avoid knowledge duplication with Stream partitioning
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4d2f085e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4d2f085e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4d2f085e
Branch: refs/heads/master
Commit: 4d2f085e4c8579d08c1b7dd3fecd6a67cc4647f4
Parents: d29eec7
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Oct 26 10:54:33 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Oct 30 09:39:30 2018 +0700
----------------------------------------------------------------------
.../mailets/RecipientRewriteTableProcessor.java | 42 ++++++++------------
.../RecipientRewriteTableProcessorTest.java | 18 ++++-----
2 files changed, 26 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/4d2f085e/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
index a986733..0cb116d 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
@@ -19,12 +19,14 @@
package org.apache.james.transport.mailets;
+import java.util.Collection;
import java.util.List;
+import java.util.Map;
import java.util.function.Function;
import java.util.function.Supplier;
+import java.util.stream.Collectors;
import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
import org.apache.james.core.Domain;
import org.apache.james.core.MailAddress;
@@ -44,7 +46,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.fge.lambdas.Throwing;
-import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -163,52 +164,43 @@ public class RecipientRewriteTableProcessor {
Mappings mappings = virtualTableStore.getMappings(recipient.getLocalPart(), recipient.getDomain());
if (mappings != null && !mappings.isEmpty()) {
- List<MailAddress> newMailAddresses = handleMappings(mappings, mail, recipient, mail.getMessage());
+ List<MailAddress> newMailAddresses = handleMappings(mappings, mail, recipient);
return RrtExecutionResult.success(newMailAddresses);
}
return RrtExecutionResult.success(recipient);
- } catch (ErrorMappingException | RecipientRewriteTableException | MessagingException e) {
+ } catch (ErrorMappingException | RecipientRewriteTableException e) {
LOGGER.warn("Could not rewrite recipient {}", recipient, e);
return RrtExecutionResult.error(recipient);
}
}
@VisibleForTesting
- List<MailAddress> handleMappings(Mappings mappings, Mail mail, MailAddress recipient, MimeMessage message) throws MessagingException {
- ImmutableList<MailAddress> mailAddresses = mappings.asStream()
+ List<MailAddress> handleMappings(Mappings mappings, Mail mail, MailAddress recipient) {
+ boolean isLocal = true;
+ Map<Boolean, List<MailAddress>> mailAddressSplit = mappings.asStream()
.map(mapping -> mapping.appendDomainIfNone(defaultDomainSupplier))
.map(Mapping::asMailAddress)
.flatMap(OptionalUtils::toStream)
- .collect(Guavate.toImmutableList());
+ .collect(Collectors.partitioningBy(mailAddress -> mailetContext.isLocalServer(mailAddress.getDomain())));
- forwardToRemoteAddress(mail, recipient, message, mailAddresses);
+ forwardToRemoteAddress(mail, recipient, mailAddressSplit.get(!isLocal));
- return getLocalAddresses(mailAddresses);
+ return mailAddressSplit.get(isLocal);
}
- private ImmutableList<MailAddress> getLocalAddresses(ImmutableList<MailAddress> mailAddresses) {
- return mailAddresses.stream()
- .filter(mailAddress -> mailetContext.isLocalServer(mailAddress.getDomain()))
- .collect(Guavate.toImmutableList());
- }
-
- private void forwardToRemoteAddress(Mail mail, MailAddress recipient, MimeMessage message, ImmutableList<MailAddress> mailAddresses) {
- ImmutableList<MailAddress> remoteAddresses = mailAddresses.stream()
- .filter(mailAddress -> !mailetContext.isLocalServer(mailAddress.getDomain()))
- .collect(Guavate.toImmutableList());
-
- if (!remoteAddresses.isEmpty()) {
+ private void forwardToRemoteAddress(Mail mail, MailAddress recipient, Collection<MailAddress> remoteRecipients) {
+ if (!remoteRecipients.isEmpty()) {
try {
mailetContext.sendMail(
MailImpl.builder()
.name(mail.getName())
.sender(mail.getMaybeSender())
- .recipients(remoteAddresses)
- .mimeMessage(message)
+ .recipients(ImmutableList.copyOf(remoteRecipients))
+ .mimeMessage(mail.getMessage())
.build());
- LOGGER.info("Mail for {} forwarded to {}", recipient, remoteAddresses);
+ LOGGER.info("Mail for {} forwarded to {}", recipient, remoteRecipients);
} catch (MessagingException ex) {
- LOGGER.warn("Error forwarding mail to {}", remoteAddresses);
+ LOGGER.warn("Error forwarding mail to {}", remoteRecipients);
}
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4d2f085e/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 06bbad7..789cee9 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
@@ -86,7 +86,7 @@ public class RecipientRewriteTableProcessorTest {
.add(MailAddressFixture.OTHER_AT_JAMES.toString())
.build();
- processor.handleMappings(mappings, FakeMail.builder().sender(MailAddressFixture.ANY_AT_JAMES).build(), MailAddressFixture.OTHER_AT_JAMES, message);
+ processor.handleMappings(mappings, FakeMail.builder().sender(MailAddressFixture.ANY_AT_JAMES).build(), MailAddressFixture.OTHER_AT_JAMES);
}
@Test
@@ -97,7 +97,7 @@ public class RecipientRewriteTableProcessorTest {
.add(MailAddressFixture.OTHER_AT_JAMES.toString())
.build();
- processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message);
+ processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES);
}
@Test
@@ -109,7 +109,7 @@ public class RecipientRewriteTableProcessorTest {
.add(MailAddressFixture.OTHER_AT_JAMES.toString())
.build();
- Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message);
+ Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES);
assertThat(result).containsOnly(nonDomainWithDefaultLocal);
}
@@ -125,7 +125,7 @@ public class RecipientRewriteTableProcessorTest {
.add(MailAddressFixture.OTHER_AT_JAMES.toString())
.build();
- Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message);
+ Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES);
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, mail, MailAddressFixture.OTHER_AT_JAMES, message);
+ Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES);
assertThat(result).containsOnly(nonDomainWithDefaultLocal);
}
@@ -156,7 +156,7 @@ public class RecipientRewriteTableProcessorTest {
.add(MailAddressFixture.OTHER_AT_JAMES.toString())
.build();
- processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message);
+ processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES);
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, mail, MailAddressFixture.OTHER_AT_JAMES, message);
+ processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES);
assertThat(mailetContext.getSentMails()).isEmpty();
}
@@ -192,7 +192,7 @@ public class RecipientRewriteTableProcessorTest {
.add(MailAddressFixture.ANY_AT_LOCAL.toString())
.build();
- Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES, message);
+ Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES);
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, mail, MailAddressFixture.OTHER_AT_JAMES, message);
+ Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES);
FakeMailContext.SentMail expected = FakeMailContext.sentMailBuilder()
.sender(MailAddressFixture.ANY_AT_JAMES)
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org