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 2017/12/08 10:40:00 UTC
[05/13] james-project git commit: JAMES-2246 Allow customizable SMTP
configuration
JAMES-2246 Allow customizable SMTP configuration
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b64f2b2c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b64f2b2c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b64f2b2c
Branch: refs/heads/master
Commit: b64f2b2cbd1201060ff06e9743b1734678630a35
Parents: 4311b7d
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 4 11:15:07 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 8 17:34:45 2017 +0700
----------------------------------------------------------------------
server/mailet/integration-testing/pom.xml | 15 ++
.../mailets/TemporaryFilesystemModule.java | 3 +-
.../james/mailets/TemporaryJamesServer.java | 24 ++-
.../configuration/SerializableAsXml.java | 4 +-
.../configuration/SmtpConfiguration.java | 149 ++++++++++++++++++
.../configuration/SmtpConfigurationTest.java | 155 +++++++++++++++++++
.../src/test/resources/smtpserver.xml | 28 ++--
7 files changed, 363 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/b64f2b2c/server/mailet/integration-testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/pom.xml b/server/mailet/integration-testing/pom.xml
index 336e5b6..12352da 100644
--- a/server/mailet/integration-testing/pom.xml
+++ b/server/mailet/integration-testing/pom.xml
@@ -106,6 +106,11 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>com.github.spullara.mustache.java</groupId>
+ <artifactId>compiler</artifactId>
+ <version>0.9.5</version>
+ </dependency>
+ <dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
@@ -147,6 +152,16 @@
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.xmlunit</groupId>
+ <artifactId>xmlunit-core</artifactId>
+ <version>2.5.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.xmlunit</groupId>
+ <artifactId>xmlunit-matchers</artifactId>
+ <version>2.5.1</version>
+ </dependency>
</dependencies>
<profiles>
http://git-wip-us.apache.org/repos/asf/james-project/blob/b64f2b2c/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryFilesystemModule.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryFilesystemModule.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryFilesystemModule.java
index 22eaac4..7770d1a 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryFilesystemModule.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryFilesystemModule.java
@@ -30,10 +30,10 @@ import java.util.List;
import java.util.function.Supplier;
import org.apache.commons.io.IOUtils;
-import org.apache.james.server.core.JamesServerResourceLoader;
import org.apache.james.filesystem.api.FileSystem;
import org.apache.james.filesystem.api.JamesDirectoriesProvider;
import org.apache.james.modules.CommonServicesModule;
+import org.apache.james.server.core.JamesServerResourceLoader;
import org.junit.rules.TemporaryFolder;
import com.google.common.base.Throwables;
@@ -52,7 +52,6 @@ public class TemporaryFilesystemModule extends AbstractModule {
"managesieveserver.xml",
"pop3server.xml",
"recipientrewritetable.xml",
- "smtpserver.xml",
"usersrepository.xml",
"smime.p12");
http://git-wip-us.apache.org/repos/asf/james-project/blob/b64f2b2c/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java
index 0d32c46..ebbe397 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java
@@ -36,6 +36,7 @@ import org.apache.commons.io.IOUtils;
import org.apache.james.GuiceJamesServer;
import org.apache.james.MemoryJamesServerMain;
import org.apache.james.mailets.configuration.MailetContainer;
+import org.apache.james.mailets.configuration.SmtpConfiguration;
import org.apache.james.modules.TestJMAPServerModule;
import org.apache.james.utils.GuiceProbe;
import org.apache.james.webadmin.WebAdminConfiguration;
@@ -50,10 +51,12 @@ public class TemporaryJamesServer {
public static class Builder {
private ImmutableList.Builder<Module> overrideModules;
private Optional<Module> module;
+ private Optional<SmtpConfiguration> smtpConfiguration;
private Builder() {
overrideModules = ImmutableList.builder();
module = Optional.empty();
+ smtpConfiguration = Optional.empty();
}
public Builder withBase(Module module) {
@@ -61,6 +64,11 @@ public class TemporaryJamesServer {
return this;
}
+ public Builder withSmtpConfiguration(SmtpConfiguration smtpConfiguration) {
+ this.smtpConfiguration = Optional.of(smtpConfiguration);
+ return this;
+ }
+
public Builder withOverrides(Module... modules) {
this.overrideModules.addAll(Arrays.asList(modules));
return this;
@@ -70,6 +78,7 @@ public class TemporaryJamesServer {
return new TemporaryJamesServer(
temporaryFolder,
mailetContainer,
+ smtpConfiguration.orElse(SmtpConfiguration.DEFAULT),
module.orElse(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE),
overrideModules.build());
}
@@ -80,14 +89,16 @@ public class TemporaryJamesServer {
}
private static final String MAILETCONTAINER_CONFIGURATION_FILENAME = "mailetcontainer.xml";
+ private static final String SMTP_CONFIGURATION_FILENAME = "smtpserver.xml";
private static final int LIMIT_TO_3_MESSAGES = 3;
private final GuiceJamesServer jamesServer;
- private TemporaryJamesServer(TemporaryFolder temporaryFolder, MailetContainer mailetContainer,
+ private TemporaryJamesServer(TemporaryFolder temporaryFolder, MailetContainer mailetContainer, SmtpConfiguration smtpConfiguration,
Module serverBaseModule, List<Module> additionalModules) throws Exception {
appendMailetConfigurations(temporaryFolder, mailetContainer);
+ appendSmtpConfigurations(temporaryFolder, smtpConfiguration);
jamesServer = new GuiceJamesServer()
.combineWith(serverBaseModule)
@@ -106,11 +117,22 @@ public class TemporaryJamesServer {
}
}
+ private void appendSmtpConfigurations(TemporaryFolder temporaryFolder, SmtpConfiguration smtpConfiguration) throws ConfigurationException, IOException {
+ try (OutputStream outputStream = createSmtpConfigurationFile(temporaryFolder)) {
+ IOUtils.write(smtpConfiguration.serializeAsXml(), outputStream, StandardCharsets.UTF_8);
+ }
+ }
+
private FileOutputStream createMailetConfigurationFile(TemporaryFolder temporaryFolder) throws IOException {
File configurationFolder = temporaryFolder.newFolder("conf");
return new FileOutputStream(Paths.get(configurationFolder.getAbsolutePath(), MAILETCONTAINER_CONFIGURATION_FILENAME).toFile());
}
+ private FileOutputStream createSmtpConfigurationFile(TemporaryFolder temporaryFolder) throws IOException {
+ File configurationFolder = temporaryFolder.getRoot().listFiles()[0];
+ return new FileOutputStream(Paths.get(configurationFolder.getAbsolutePath(), SMTP_CONFIGURATION_FILENAME).toFile());
+ }
+
public void shutdown() {
jamesServer.stop();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b64f2b2c/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SerializableAsXml.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SerializableAsXml.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SerializableAsXml.java
index fcc9248..22dda03 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SerializableAsXml.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SerializableAsXml.java
@@ -20,7 +20,9 @@
package org.apache.james.mailets.configuration;
+import java.io.IOException;
+
public interface SerializableAsXml {
- String serializeAsXml();
+ String serializeAsXml() throws IOException;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b64f2b2c/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfiguration.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
new file mode 100644
index 0000000..de9a23b
--- /dev/null
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
@@ -0,0 +1,149 @@
+/****************************************************************
+ * 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.mailets.configuration;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.io.StringReader;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Optional;
+
+import org.apache.commons.io.IOUtils;
+
+import com.github.mustachejava.DefaultMustacheFactory;
+import com.github.mustachejava.Mustache;
+import com.github.mustachejava.MustacheFactory;
+import com.google.common.base.Preconditions;
+
+public class SmtpConfiguration implements SerializableAsXml {
+ public static final boolean AUTH_REQUIRED = true;
+ public static final SmtpConfiguration DEFAULT = SmtpConfiguration.builder().build();
+
+ public static class Builder {
+ private static final int DEFAULT_DISABLED = 0;
+
+ private Optional<Boolean> authRequired;
+ private Optional<Integer> maxMessageSizeInKb;
+ private Optional<Boolean> verifyIndentity;
+ private Optional<Boolean> bracketEnforcement;
+ private Optional<String> authorizedAddresses;
+
+ public Builder() {
+ authorizedAddresses = Optional.empty();
+ authRequired = Optional.empty();
+ verifyIndentity = Optional.empty();
+ maxMessageSizeInKb = Optional.empty();
+ bracketEnforcement = Optional.empty();
+ }
+
+ public Builder withAutorizedAddresses(String authorizedAddresses) {
+ Preconditions.checkNotNull(authorizedAddresses);
+ this.authorizedAddresses = Optional.of(authorizedAddresses);
+ return this;
+ }
+
+ public Builder withMaxMessageSizeInKb(int sizeInKb) {
+ Preconditions.checkArgument(sizeInKb > 0);
+ this.maxMessageSizeInKb = Optional.of(sizeInKb);
+ return this;
+ }
+
+ public Builder requireAuthentication() {
+ this.authRequired = Optional.of(AUTH_REQUIRED);
+ return this;
+ }
+
+ public Builder requireBracketEnforcement() {
+ this.bracketEnforcement = Optional.of(true);
+ return this;
+ }
+
+ public Builder doNotRequireBracketEnforcement() {
+ this.bracketEnforcement = Optional.of(false);
+ return this;
+ }
+
+ public Builder verifyIdentity() {
+ this.verifyIndentity = Optional.of(true);
+ return this;
+ }
+
+ public Builder doNotVerifyIdentity() {
+ this.verifyIndentity = Optional.of(false);
+ return this;
+ }
+
+ public SmtpConfiguration build() {
+ return new SmtpConfiguration(authorizedAddresses,
+ authRequired.orElse(!AUTH_REQUIRED),
+ bracketEnforcement.orElse(true),
+ verifyIndentity.orElse(true),
+ maxMessageSizeInKb.orElse(DEFAULT_DISABLED));
+ }
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ private final Optional<String> authorizedAddresses;
+ private final boolean authRequired;
+ private final boolean bracketEnforcement;
+ private final boolean verifyIndentity;
+ private final int maxMessageSizeInKb;
+
+ public SmtpConfiguration(Optional<String> authorizedAddresses, boolean authRequired, boolean bracketEnforcement, boolean verifyIndentity, int maxMessageSizeInKb) {
+ this.authorizedAddresses = authorizedAddresses;
+ this.authRequired = authRequired;
+ this.bracketEnforcement = bracketEnforcement;
+ this.verifyIndentity = verifyIndentity;
+ this.maxMessageSizeInKb = maxMessageSizeInKb;
+ }
+
+ public String serializeAsXml() throws IOException {
+ HashMap<String, Object> scopes = new HashMap<>();
+ scopes.put("hasAuthorizedAddresses", authorizedAddresses.isPresent());
+ authorizedAddresses.ifPresent(value -> scopes.put("authorizedAddresses", value));
+ scopes.put("authRequired", authRequired);
+ scopes.put("verifyIdentity", verifyIndentity);
+ scopes.put("maxmessagesize", maxMessageSizeInKb);
+ scopes.put("bracketEnforcement", bracketEnforcement);
+
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ Writer writer = new OutputStreamWriter(byteArrayOutputStream);
+ MustacheFactory mf = new DefaultMustacheFactory();
+ Mustache mustache = mf.compile(getPatternReader(), "example");
+ mustache.execute(writer, scopes);
+ writer.flush();
+ return new String(byteArrayOutputStream.toByteArray(), StandardCharsets.UTF_8);
+ }
+
+ private StringReader getPatternReader() throws IOException {
+ InputStream patternStream = ClassLoader.getSystemResourceAsStream("smtpserver.xml");
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ IOUtils.copy(patternStream, byteArrayOutputStream);
+ String pattern = new String(byteArrayOutputStream.toByteArray(), StandardCharsets.UTF_8);
+ return new StringReader(pattern);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b64f2b2c/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
new file mode 100644
index 0000000..abd0c3f
--- /dev/null
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
@@ -0,0 +1,155 @@
+/****************************************************************
+ * 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.mailets.configuration;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.xmlunit.matchers.EvaluateXPathMatcher.hasXPath;
+
+import java.io.IOException;
+
+import javax.xml.transform.Source;
+
+import org.assertj.core.api.Assertions;
+import org.junit.Test;
+import org.w3c.dom.Node;
+import org.xmlunit.builder.Input;
+import org.xmlunit.xpath.JAXPXPathEngine;
+import org.xmlunit.xpath.XPathEngine;
+
+public class SmtpConfigurationTest {
+ @Test
+ public void authenticationCanBeRequired() throws IOException {
+ assertThat(SmtpConfiguration.builder()
+ .requireAuthentication()
+ .build()
+ .serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/authRequired/text()",
+ is("true")));
+ }
+
+ @Test
+ public void maxMessageSizeCanBeCustomized() throws IOException {
+ assertThat(SmtpConfiguration.builder()
+ .withMaxMessageSizeInKb(36)
+ .build()
+ .serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/maxmessagesize/text()",
+ is("36")));
+ }
+
+ @Test
+ public void bracketEnforcementCanBeDisable() throws IOException {
+ assertThat(SmtpConfiguration.builder()
+ .doNotRequireBracketEnforcement()
+ .build()
+ .serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/addressBracketsEnforcement/text()",
+ is("false")));
+ }
+
+ @Test
+ public void verifyIdentityEnforcementCanBeDisabled() throws IOException {
+ assertThat(SmtpConfiguration.builder()
+ .doNotVerifyIdentity()
+ .build()
+ .serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/verifyIdentity/text()",
+ is("false")));
+ }
+
+ @Test
+ public void authenticationCanBeDisabled() throws IOException {
+ assertThat(SmtpConfiguration.builder()
+ .build()
+ .serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/authRequired/text()",
+ is("false")));
+ }
+
+ @Test
+ public void bracketEnforcementCanBeEnabled() throws IOException {
+ assertThat(SmtpConfiguration.builder()
+ .requireBracketEnforcement()
+ .build()
+ .serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/addressBracketsEnforcement/text()",
+ is("true")));
+ }
+
+ @Test
+ public void verifyIdentityEnforcementCanBeEnabled() throws IOException {
+ assertThat(SmtpConfiguration.builder()
+ .verifyIdentity()
+ .build()
+ .serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/verifyIdentity/text()",
+ is("true")));
+ }
+
+ @Test
+ public void specificNetworkCanBeAuthorized() throws IOException {
+ String network = "172.0.0.0/24";
+ assertThat(SmtpConfiguration.builder()
+ .withAutorizedAddresses(network)
+ .build()
+ .serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/authorizedAddresses/text()",
+ is(network)));
+ }
+
+ @Test
+ public void defaultSmtpConfigurationShouldNotHaveAuthorizedNetwork() throws IOException {
+ String xmlFile = SmtpConfiguration.DEFAULT.serializeAsXml();
+ Source source = Input.fromString(xmlFile).build();
+ XPathEngine xpath = new JAXPXPathEngine();
+ Iterable<Node> allMatches = xpath.selectNodes("/smtpservers/smtpserver/authorizedAddresses", source);
+
+ Assertions.assertThat(allMatches).isEmpty();
+ }
+
+ @Test
+ public void authenticationShouldNotBeRequiredByDefault() throws IOException {
+ assertThat(SmtpConfiguration.DEFAULT.serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/authRequired/text()",
+ is("false")));
+ }
+
+ @Test
+ public void maxMessageSizeShouldBeDisabledByDefault() throws IOException {
+ assertThat(SmtpConfiguration.DEFAULT.serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/maxmessagesize/text()",
+ is("0")));
+ }
+
+ @Test
+ public void addressBracketsEnforcementShouldBeEnforcedByDefault() throws IOException {
+ assertThat(SmtpConfiguration.DEFAULT.serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/addressBracketsEnforcement/text()",
+ is("true")));
+ }
+
+ @Test
+ public void verifyIdentityShouldBeEnforcedByDefault() throws IOException {
+ assertThat(SmtpConfiguration.DEFAULT.serializeAsXml(),
+ hasXPath("/smtpservers/smtpserver/verifyIdentity/text()",
+ is("true")));
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b64f2b2c/server/mailet/integration-testing/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/resources/smtpserver.xml b/server/mailet/integration-testing/src/test/resources/smtpserver.xml
index a3d4b8f..30c56f8 100644
--- a/server/mailet/integration-testing/src/test/resources/smtpserver.xml
+++ b/server/mailet/integration-testing/src/test/resources/smtpserver.xml
@@ -33,11 +33,13 @@
<connectiontimeout>360</connectiontimeout>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
- <authRequired>false</authRequired>
- <authorizedAddresses>0.0.0.0/0</authorizedAddresses>
- <verifyIdentity>true</verifyIdentity>
- <maxmessagesize>0</maxmessagesize>
- <addressBracketsEnforcement>true</addressBracketsEnforcement>
+ <authRequired>{{authRequired}}</authRequired>
+{{#hasAuthorizedAddresses}}
+ <authorizedAddresses>{{authorizedAddresses}}</authorizedAddresses>
+{{/hasAuthorizedAddresses}}
+ <verifyIdentity>{{verifyIdentity}}</verifyIdentity>
+ <maxmessagesize>{{maxmessagesize}}</maxmessagesize>
+ <addressBracketsEnforcement>{{bracketEnforcement}}</addressBracketsEnforcement>
<smtpGreeting>JAMES Linagora's SMTP awesome Server</smtpGreeting>
<handlerchain>
<handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
@@ -61,11 +63,13 @@
Authorize only local users
-->
<authRequired>true</authRequired>
- <authorizedAddresses>0.0.0.0/0</authorizedAddresses>
+ {{#hasAuthorizedAddresses}}
+ <authorizedAddresses>{{authorizedAddresses}}</authorizedAddresses>
+ {{/hasAuthorizedAddresses}}
<!-- Trust authenticated users -->
<verifyIdentity>false</verifyIdentity>
- <maxmessagesize>0</maxmessagesize>
- <addressBracketsEnforcement>true</addressBracketsEnforcement>
+ <maxmessagesize>{{maxmessagesize}}</maxmessagesize>
+ <addressBracketsEnforcement>{{bracketEnforcement}}</addressBracketsEnforcement>
<smtpGreeting>JAMES Linagora's SMTP awesome Server</smtpGreeting>
<handlerchain>
<handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
@@ -89,11 +93,13 @@
Authorize only local users
-->
<authRequired>true</authRequired>
- <authorizedAddresses>0.0.0.0/0</authorizedAddresses>
+ {{#hasAuthorizedAddresses}}
+ <authorizedAddresses>{{authorizedAddresses}}</authorizedAddresses>
+ {{/hasAuthorizedAddresses}}
<!-- Trust authenticated users -->
<verifyIdentity>false</verifyIdentity>
- <maxmessagesize>0</maxmessagesize>
- <addressBracketsEnforcement>true</addressBracketsEnforcement>
+ <maxmessagesize>{{maxmessagesize}}</maxmessagesize>
+ <addressBracketsEnforcement>{{bracketEnforcement}}</addressBracketsEnforcement>
<smtpGreeting>JAMES Linagora's SMTP awesome Server</smtpGreeting>
<handlerchain>
<handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org