| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| 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. |
| --> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <!-- Generated by Apache Maven Doxia at 2021-11-12 --> |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
| <title>Apache James Project – Apache James Server 3 - Configuring the SMTP and LMTP Service</title> |
| <style type="text/css" media="all"> |
| @import url("../css/james.css"); |
| @import url("../css/maven-base.css"); |
| @import url("../css/maven-theme.css"); |
| @import url("../css/site.css"); |
| @import url("../js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css"); |
| @import url("../js/jquery/css/print.css"); |
| @import url("../js/fancybox/jquery.fancybox-1.3.4.css"); |
| </style> |
| <script type="text/javascript" src="../js/jquery/js/jquery-1.4.2.min.js"></script> |
| <script type="text/javascript" src="../js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script> |
| <script type="text/javascript" src="../js/fancybox/jquery.fancybox-1.3.4.js"></script> |
| <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> |
| <meta name="Date-Revision-yyyymmdd" content="20211112" /> |
| <meta http-equiv="Content-Language" content="en" /> |
| |
| <!-- Google Analytics --> |
| <script type="text/javascript"> |
| |
| var _gaq = _gaq || []; |
| _gaq.push(['_setAccount', 'UA-1384591-1']); |
| _gaq.push(['_trackPageview']); |
| |
| (function() { |
| var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; |
| ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; |
| var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s); |
| })(); |
| |
| </script> |
| </head> |
| <body class="composite"> |
| <div id="banner"> |
| <a href="../index.html" id="bannerLeft" title="james-logo.png"> |
| |
| |
| <img src="../images/logos/james-logo.png" alt="James Project" /> |
| </a> |
| <a href="https://www.apache.org/index.html" id="bannerRight"> |
| |
| |
| <img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" /> |
| </a> |
| <div class="clear"> |
| <hr/> |
| </div> |
| </div> |
| <div id="breadcrumbs"> |
| |
| |
| <div class="xleft"> |
| <span id="publishDate">Last Published: 2021-11-12</span> |
| </div> |
| <div class="xright"> <a href="../index.html" title="Home">Home</a> |
| | |
| <a href="../documentation.html" title="James">James</a> |
| | |
| <a href="../mime4j/index.html" title="Mime4J">Mime4J</a> |
| | |
| <a href="../jsieve/index.html" title="jSieve">jSieve</a> |
| | |
| <a href="../jspf/index.html" title="jSPF">jSPF</a> |
| | |
| <a href="../jdkim/index.html" title="jDKIM">jDKIM</a> |
| |
| |
| </div> |
| <div class="clear"> |
| <hr/> |
| </div> |
| </div> |
| <div id="leftColumn"> |
| <div id="navcolumn"> |
| |
| |
| <h5>James components</h5> |
| <ul> |
| <li class="collapsed"> |
| <a href="../documentation.html" title="About James">About James</a> |
| </li> |
| <li class="expanded"> |
| <a href="../server/index.html" title="Server">Server</a> |
| <ul> |
| <li class="none"> |
| <a href="../server/advantages.html" title="Advantages">Advantages</a> |
| </li> |
| <li class="none"> |
| <a href="../server/objectives.html" title="Objectives">Objectives</a> |
| </li> |
| <li class="expanded"> |
| <a href="../server/quick-start.html" title="User Manual">User Manual</a> |
| <ul> |
| <li class="collapsed"> |
| <a href="../server/features.html" title="1. Features">1. Features</a> |
| </li> |
| <li class="none"> |
| <a href="../server/packaging.html" title="2. Packaging">2. Packaging</a> |
| </li> |
| <li class="collapsed"> |
| <a href="../server/install.html" title="3. Install James">3. Install James</a> |
| </li> |
| <li class="expanded"> |
| <a href="../server/config.html" title="4. Configure James">4. Configure James</a> |
| <ul> |
| <li class="none"> |
| <a href="../server/config-listeners.html" title="Additional mailbox listeners">Additional mailbox listeners</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-antispam.html" title="Anti Spam">Anti Spam</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-blob-export.html" title="Blob Export">Blob Export</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-blobstore.html" title="BlobStore">BlobStore</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-cassandra.html" title="Cassandra">Cassandra</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-elasticsearch.html" title="ElasticSearch">ElasticSearch</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-vault.html" title="Deleted Messages Vault">Deleted Messages Vault</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-dnsservice.html" title="DNS Service">DNS Service</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-domainlist.html" title="Domain List">Domain List</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-fetchmail.html" title="FetchMail">FetchMail</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-guice.html" title="Guice">Guice</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-imap4.html" title="IMAP4">IMAP4</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-jmap.html" title="JMAP">JMAP</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-mailrepositorystore.html" title="Mail Repository Stores">Mail Repository Stores</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-mailbox.html" title="Mailbox">Mailbox</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-mailetcontainer.html" title="Mailet Container">Mailet Container</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-healthcheck.html" title="Periodical Health Checks">Periodical Health Checks</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-pop3.html" title="POP3">POP3</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-quota.html" title="Quota">Quota</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-rabbitmq.html" title="RabbitMQ">RabbitMQ</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-recipientrewritetable.html" title="Recipient Rewrite">Recipient Rewrite</a> |
| </li> |
| <li class="none"> |
| <strong>SMTP LMTP</strong> |
| </li> |
| <li class="none"> |
| <a href="../server/config-sieve.html" title="Sieve">Sieve</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-ssl-tls.html" title="SSL/TLS">SSL/TLS</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-system.html" title="System">System</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-spring-jpa-postgres.html" title="Spring JPA Postgres">Spring JPA Postgres</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-users.html" title="Users">Users</a> |
| </li> |
| <li class="none"> |
| <a href="../server/config-webadmin.html" title="WebAdmin">WebAdmin</a> |
| </li> |
| </ul> |
| </li> |
| <li class="collapsed"> |
| <a href="../server/manage.html" title="5. Manage">5. Manage</a> |
| </li> |
| <li class="collapsed"> |
| <a href="../server/monitor.html" title="6. Monitor">6. Monitor</a> |
| </li> |
| <li class="collapsed"> |
| <a href="../server/upgrade.html" title="7. Upgrade">7. Upgrade</a> |
| </li> |
| <li class="collapsed"> |
| <a href="../server/dev.html" title="8. Developers Corner">8. Developers Corner</a> |
| </li> |
| </ul> |
| </li> |
| <li class="none"> |
| <a href="../mail.html#James_Mailing_lists" title="Mailing Lists">Mailing Lists</a> |
| </li> |
| <li class="none"> |
| <a href="../server/release-notes.html" title="Release Notes">Release Notes</a> |
| </li> |
| <li class="none"> |
| <a href="../server/apidocs/index.html" title="Javadoc">Javadoc</a> |
| </li> |
| <li class="none"> |
| <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a> |
| </li> |
| <li class="none"> |
| <a href="https://github.com/apache/james-project" title="Sources">Sources</a> |
| </li> |
| <li class="none"> |
| <a href="../server/rfcs.html" title="RFCs">RFCs</a> |
| </li> |
| <li class="none"> |
| <a href="../download.cgi#Apache_James_Server" title="Download releases">Download releases</a> |
| </li> |
| </ul> |
| </li> |
| <li class="collapsed"> |
| <a href="../mailet/index.html" title="Mailets">Mailets</a> |
| </li> |
| <li class="collapsed"> |
| <a href="../mailbox/index.html" title="Mailbox">Mailbox</a> |
| </li> |
| <li class="collapsed"> |
| <a href="../protocols/index.html" title="Protocols">Protocols</a> |
| </li> |
| <li class="collapsed"> |
| <a href="../mpt/index.html" title="MPT">MPT</a> |
| </li> |
| </ul> |
| <h5>Apache Software Foundation</h5> |
| <ul> |
| <li> |
| <strong> |
| <a title="ASF" href="http://www.apache.org/">ASF</a> |
| </strong> |
| </li> |
| <li> |
| <a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a> |
| </li> |
| <li> |
| <a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a> |
| </li> |
| <li> |
| <a title="License" href="http://www.apache.org/licenses/" >License</a> |
| </li> |
| <li> |
| <a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
| </li> |
| <li> |
| <a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a> |
| </li> |
| <li> |
| <a title="Security" href="http://www.apache.org/security/">Security</a> |
| </li> |
| </ul> |
| <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> |
| <img class="poweredBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /> |
| </a> |
| |
| |
| </div> |
| </div> |
| <div id="bodyColumn"> |
| <div id="contentBox"> |
| |
| |
| |
| |
| <section> |
| <h2><a name="Incoming_and_outgoing_SMTP"></a>Incoming and outgoing SMTP</h2> |
| |
| |
| <p>This page details the configuration for Incoming SMTP</p> |
| |
| |
| <p>The outgoing (remote delivery) is implemented in the RemoteDelivery mailets. The configuration details for |
| outgoing SMTP traffic can be read on <a href="dev-provided-mailets.html">this page</a> (section RemoteDelivery) and |
| shoud be update in the <a href="config-mailetcontainer.html">mailetcontainer</a>.</p> |
| |
| </section> |
| |
| <section> |
| <h2><a name="SMTP_Configuration"></a>SMTP Configuration</h2> |
| |
| |
| <p>Consult <a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/apps/spring-app/src/main/resources/smtpserver.xml">smtpserver.xml</a> in GIT to get some examples and hints.</p> |
| |
| |
| <p>The SMTP service is controlled by a configuration block in the smptserver.xml. |
| The smtpserver tag defines the boundaries of the configuration block. It encloses |
| all the relevant configuration for the SMTP server. The behavior of the SMTP service is |
| controlled by the attributes and children of this tag.</p> |
| |
| |
| <p>This tag has an optional boolean attribute - <b>enabled</b> - that defines whether the service is active or not. The value defaults to "true" if |
| not present.</p> |
| |
| |
| <p>The standard children of the smtpserver tag are:</p> |
| |
| |
| <dl> |
| |
| <dt><b>bind</b></dt> |
| |
| <dd>A list of address:port separed by comma - This is an optional value. If present, this value is a string describing |
| the IP address to which this service should be bound. If the tag or value is absent then the service |
| will bind to all network interfaces for the machine on port 25. Port 25 is the well-known/IANA registered port for SMTP. |
| Port 465 is the well-known/IANA registered port for SMTP over TLS.</dd> |
| |
| <dt><b>connectBacklog</b></dt> |
| |
| <dd></dd> |
| |
| <dt><b>tls</b></dt> |
| |
| <dd>Set to true to support STARTTLS or SSL for the Socket. |
| To use this you need to copy sunjce_provider.jar to /path/james/lib directory. To create a new keystore execute: |
| keytool -genkey -alias james -keyalg RSA -storetype PKCS12 -keystore /path/to/james/conf/keystore. The algorithm is optional and only needs to be specified when using something other |
| than the Sun JCE provider - You could use IbmX509 with IBM Java runtime.<br /> |
| Please note that each SMTP/LMTP server exposed on different port can specify its own keystore, independently from any other |
| TLS based protocols.</dd> |
| |
| <dt><b>handler.helloName</b></dt> |
| |
| <dd>This is a required tag with an optional body that defines the server name |
| used in the initial service greeting. The tag may have an optional attribute - <b>autodetect</b>. If |
| the autodetect attribute is present and true, the service will use the local hostname |
| returned by the Java libraries. If autodetect is absent or false, the body of the tag will be used. In |
| this case, if no body is present, the value "localhost" will be used.</dd> |
| |
| <dt><b>handler.connectionTimeout</b></dt> |
| |
| <dd>This is an optional tag with a non-negative integer body. Connection timeout in secconds.</dd> |
| |
| <dt><b>handler.connectionLimit</b></dt> |
| |
| <dd>Set the maximum simultaneous incoming connections for this service.</dd> |
| |
| <dt><b>handler.connectionLimitPerIP</b></dt> |
| |
| <dd>Set the maximum simultaneous incoming connections per IP for this service.</dd> |
| |
| <dt><b>handler.authRequired</b></dt> |
| |
| <dd>This is an optional tag with a boolean body. If true, then the server will |
| require authentication before delivering mail to non-local email addresses. If this tag is absent, or the value |
| is false then the client will not be prompted for authentication. Only simple user/password authentication is |
| supported at this time. supported values: |
| true: required but announced only to not authorizedAddresses |
| false: don't use AUTH |
| announce: like true, but always announce AUTH capability to clients |
| |
| The correct behaviour per RFC value would be false or announce |
| but we still support true for backward compatibility and because |
| some webmail client fails when AUTH is announced but no authentication |
| information has been provided</dd> |
| |
| <dt><b>handler.authorizedAddresses</b></dt> |
| |
| <dd>Authorize specific addresses/networks. |
| If you use SMTP AUTH, addresses that match those specified here will |
| be permitted to relay without SMTP AUTH. If you do not use SMTP |
| AUTH, and you specify addreses here, then only addresses that match |
| those specified will be permitted to relay. |
| |
| Addresses may be specified as a an IP address or domain name, with an |
| optional netmask, e.g., |
| |
| 127.*, 127.0.0.0/8, 127.0.0.0/255.0.0.0, and localhost/8 are all the same |
| |
| See also the RemoteAddrNotInNetwork matcher in the transport processor. |
| You would generally use one OR the other approach.</dd> |
| |
| <dt><b>handler.verifyIdentity</b></dt> |
| |
| <dd>This is an optional tag with a boolean body. This option can only be used |
| if SMTP authentication is required. If the parameter is set to true then the sender address for the submitted message |
| will be verified against the authenticated subject. Verify sender addresses, ensuring that |
| the sender address matches the user who has authenticated. |
| It will verify that the sender address matches the address of the user or one of its alias (from user or domain aliases). |
| This prevents a user of your mail server from acting as someone else |
| If unspecified, default value is true.</dd> |
| |
| <dt><b>handler.maxmessagesize</b></dt> |
| |
| <dd>This is an optional tag with a non-negative integer body. It specifies the maximum |
| size, in kbytes, of any message that will be transmitted by this SMTP server. It is a service-wide, as opposed to |
| a per user, limit. If the value is zero then there is no limit. If the tag isn't specified, the service will |
| default to an unlimited message size. Must be a positive integer, optionally with a unit: B, K, M, G.</dd> |
| |
| <dt><b>handler.heloEhloEnforcement</b></dt> |
| |
| <dd>This sets whether to enforce the use of HELO/EHLO salutation before a |
| MAIL command is accepted. If unspecified, the value defaults to true.</dd> |
| |
| <dt><b>handler.addressBracketsEnforcement</b></dt> |
| |
| <dd>WARNING: This is Non-RFC compliant (default value: true) |
| See: http://wiki.apache.org/james/StandardsComplianceStatement</dd> |
| |
| <dt><b>handler.smtpGreeting</b></dt> |
| |
| <dd>This sets the SMTPGreeting which will be used when connect to the smtpserver |
| If none is specified a default is generated</dd> |
| |
| <dt><b>handler.handlerchain</b></dt> |
| |
| <dd></dd> |
| |
| <dt><b>handler.handlerchain</b></dt> |
| |
| <dd>The configuration handler chain</dd> |
| </dl> |
| |
| <section> |
| <h3><a name="Configure_Authenticated_SMTP_.28SMTP_AUTH.29"></a>Configure Authenticated SMTP (SMTP AUTH)</h3> |
| |
| |
| <p>Authenticated SMTP is a method of securing your SMTP server. With SMTP AUTH enabled senders who wish to |
| relay mail through the SMTP server (that is, send mail that is eventually to be delivered to another SMTP |
| server) must authenticate themselves to Apache James Server before sending their message. Mail that is to be delivered |
| locally does not require authentication. This method ensures that spammers cannot use your SMTP server |
| to send unauthorized mail, while still enabling users who may not have fixed IP addresses to send their |
| messages.</p> |
| |
| |
| <p>Mail servers that allow spammers to send unauthorized email are known as open relays. So SMTP AUTH |
| is a mechanism for ensuring that your server is not an open relay .</p> |
| |
| |
| <p>At this time Apache James Server only supports simple user name / password authentication.</p> |
| |
| |
| <p>Configuring Apache James Server for Authentication SMTP is a multi-step process. It requires several adjustments of |
| the smtpserver.xml. To enable SMTP AUTH, do the following:</p> |
| |
| |
| <ol style="list-style-type: decimal"> |
| |
| |
| <li>As mentioned above, SMTP AUTH requires that Apache James Server be able to distinguish between mail intended |
| for local delivery and mail intended for remote delivery. Apache James Server makes this determination by matching the |
| domain to which the mail was sent against the <DomainList> component, configured by <a href="/server/config-domainlist.html">Domain List Configuration</a>.</li> |
| |
| |
| <li>set the authRequired element of the smtpserver configuration block to "true".</li> |
| |
| |
| <li>if you wish to ensure that authenticated users can only send email from their own account, you may |
| optionally set the verifyIdentity element of the smtpserver configuration block to "true".</li> |
| |
| |
| <li>Restart Apache James Server. This will pull in all of your configuration changes.</li> |
| |
| </ol> |
| |
| |
| <p>Finally, you need to verify that your configuration was done correctly. This step is |
| <b>important</b> and should not be skipped.</p> |
| |
| |
| <p>Verify that you have not inadvertently configured your server as an open relay. This is most easily |
| accomplished by using the service provided at <a class="externalLink" href="http://www.abuse.net/relay.html">abuse.net</a>. abuse.net will |
| check your mail server and inform you if it is an open relay.</p> |
| |
| |
| <p>It is extremely important that your server not be configured as an open relay. Aside from potential |
| costs associated with usage by spammers, connections from servers that are determined to be open relays |
| are routinely rejected by SMTP servers. This can severely impede the ability of your mail server to |
| send mail.</p> |
| |
| |
| <p>Of course it is also necessary to confirm that users and log in and send |
| mail through your server. This can be accomplished using any standard mail client (i.e. Thunderbird, Outlook, |
| Eudora, Evolution).</p> |
| |
| </section> |
| |
| <section> |
| <h3><a name="Configure_multiple_SMTP_servers"></a>Configure multiple SMTP servers</h3> |
| |
| </section> |
| |
| </section> |
| |
| <section> |
| <h2><a name="LMTP_Configuration"></a>LMTP Configuration</h2> |
| |
| |
| <p>Consult <a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/apps/spring-app/src/main/resources/lmtpserver.xml">lmtpserver.xml</a> in GIT to get some examples and hints.</p> |
| |
| |
| <p>The configuration is the same of for SMTP.</p> |
| |
| |
| <p>By default, it is deactivated. You can activate it with SMTP and bind for example on port 24.</p> |
| |
| |
| <p>The default LMTP server stores directly emails in user mailboxes, without further treatment.</p> |
| |
| |
| <p>However we do ship an alternative handler chain allowing to execute the mailet container, thus achieving a behaviour similar |
| to the default SMTP protocol. Here is how to achieve this:</p> |
| |
| |
| <div> |
| <pre> |
| |
| <lmtpservers> |
| <lmtpserver enabled="true"> |
| <jmxName>lmtpserver</jmxName> |
| <bind>0.0.0.0:0</bind> |
| <connectionBacklog>200</connectionBacklog> |
| <connectiontimeout>1200</connectiontimeout> |
| <connectionLimit>0</connectionLimit> |
| <connectionLimitPerIP>0</connectionLimitPerIP> |
| <maxmessagesize>0</maxmessagesize> |
| <handlerchain coreHandlersPackage="org.apache.james.lmtpserver.MailetContainerCmdHandlerLoader"> |
| <handler class="org.apache.james.lmtpserver.MailetContainerCmdHandlerLoader"/> |
| </handlerchain> |
| </lmtpserver> |
| </lmtpservers> |
| |
| </pre></div> |
| |
| |
| <p>Note that by default the mailet container is executed with all recipients at once and do not allow per recipient |
| error reporting. An option splitExecution allow to execute the mailet container for each recipient separately and mitigate this |
| limitation at the cost of performance.</p> |
| |
| |
| <div> |
| <pre> |
| |
| <lmtpservers> |
| <lmtpserver enabled="true"> |
| <jmxName>lmtpserver</jmxName> |
| <bind>0.0.0.0:0</bind> |
| <connectionBacklog>200</connectionBacklog> |
| <connectiontimeout>1200</connectiontimeout> |
| <connectionLimit>0</connectionLimit> |
| <connectionLimitPerIP>0</connectionLimitPerIP> |
| <maxmessagesize>0</maxmessagesize> |
| <handlerchain coreHandlersPackage="org.apache.james.lmtpserver.MailetContainerCmdHandlerLoader"> |
| <handler class="org.apache.james.lmtpserver.MailetContainerCmdHandlerLoader"> |
| <splitExecution>false</splitExecution> |
| </handler> |
| <handler class="org.apache.james.lmtpserver.MailetContainerHandler"> |
| <splitExecution>true</splitExecution> |
| </handler> |
| </handlerchain> |
| </lmtpserver> |
| </lmtpservers> |
| |
| </pre></div> |
| |
| </section> |
| |
| |
| |
| |
| </div> |
| </div> |
| <div class="clear"> |
| <hr/> |
| </div> |
| <div id="footer"> |
| <div class="xright">Copyright © 2006-2021 |
| <a href="https://www.apache.org/">The Apache Software Foundation</a>. |
| All Rights Reserved. |
| |
| </div> |
| <div class="clear"> |
| <hr/> |
| </div> |
| </div> |
| </body> |
| </html> |