⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smtpserver.java

📁 java 开发的邮件服务器平台。支持以下协议。 协议可以修改为自己的专门标识
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************** * Copyright (c) 2000-2004 The Apache Software Foundation.             * * All rights reserved.                                                * * ------------------------------------------------------------------- * * Licensed 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.smtpserver;import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;import org.apache.avalon.excalibur.pool.DefaultPool;import org.apache.avalon.excalibur.pool.HardResourceLimitingPool;import org.apache.avalon.excalibur.pool.ObjectFactory;import org.apache.avalon.excalibur.pool.Pool;import org.apache.avalon.excalibur.pool.Poolable;import org.apache.avalon.framework.activity.Disposable;import org.apache.avalon.framework.activity.Initializable;import org.apache.avalon.framework.component.ComponentException;import org.apache.avalon.framework.component.ComponentManager;import org.apache.avalon.framework.configuration.Configuration;import org.apache.avalon.framework.configuration.ConfigurationException;import org.apache.avalon.framework.component.Component;import org.apache.avalon.framework.activity.Disposable;import org.apache.avalon.framework.logger.LogEnabled;import org.apache.james.Constants;import org.apache.james.core.AbstractJamesService;import org.apache.james.services.MailServer;import org.apache.james.services.UsersRepository;import org.apache.james.services.UsersStore;import org.apache.james.util.NetMatcher;import org.apache.james.util.watchdog.Watchdog;import org.apache.james.util.watchdog.WatchdogFactory;import org.apache.mailet.MailetContext;/** * <p>Accepts SMTP connections on a server socket and dispatches them to SMTPHandlers.</p> * * <p>Also responsible for loading and parsing SMTP specific configuration.</p> * * @version 1.1.0, 06/02/2001 *//* * IMPORTANT: SMTPServer extends AbstractJamesService.  If you implement ANY * lifecycle methods, you MUST call super.<method> as well. */public class SMTPServer extends AbstractJamesService implements Component, SMTPServerMBean {    /**     * The mailet context - we access it here to set the hello name for the Mailet API     */    MailetContext mailetcontext;    /**     * The user repository for this server - used to authenticate     * users.     */    private UsersRepository users;    /**     * The internal mail server service.     */    private MailServer mailServer;    /**     * Whether authentication is required to use     * this SMTP server.     */    private boolean authRequired = false;    /**     * Whether the server verifies that the user     * actually sending an email matches the     * authentication credentials attached to the     * SMTP interaction.     */    private boolean verifyIdentity = false;    /**     * This is a Network Matcher that should be configured to contain     * authorized networks that bypass SMTP AUTH requirements.     */    private NetMatcher authorizedNetworks = null;    /**     * The maximum message size allowed by this SMTP server.  The default     * value, 0, means no limit.     */    private long maxMessageSize = 0;    /**     * The number of bytes to read before resetting     * the connection timeout timer.  Defaults to     * 20 KB.     */    private int lengthReset = 20 * 1024;    /**     * The pool used to provide SMTP Handler objects     */    private Pool theHandlerPool = null;    /**     * The pool used to provide SMTP Handler objects     */    private ObjectFactory theHandlerFactory = new SMTPHandlerFactory();    /**     * The factory used to generate Watchdog objects     */    private WatchdogFactory theWatchdogFactory;    /**     * The configuration data to be passed to the handler     */    private SMTPHandlerConfigurationData theConfigData        = new SMTPHandlerConfigurationDataImpl();    /**     * @see org.apache.avalon.framework.component.Composable#compose(ComponentManager)     */    public void compose(final ComponentManager componentManager) throws ComponentException {        super.compose(componentManager);        mailetcontext = (MailetContext) componentManager.lookup("org.apache.mailet.MailetContext");        mailServer = (MailServer) componentManager.lookup("org.apache.james.services.MailServer");        UsersStore usersStore =            (UsersStore) componentManager.lookup("org.apache.james.services.UsersStore");        users = usersStore.getRepository("LocalUsers");        if (users == null) {            throw new ComponentException("The user repository could not be found.");        }    }    /**     * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)     */    public void configure(final Configuration configuration) throws ConfigurationException {        super.configure(configuration);        if (isEnabled()) {            mailetcontext.setAttribute(Constants.HELLO_NAME, helloName);            Configuration handlerConfiguration = configuration.getChild("handler");            authRequired = handlerConfiguration.getChild("authRequired").getValueAsBoolean(false);            verifyIdentity = handlerConfiguration.getChild("verifyIdentity").getValueAsBoolean(false);            if (authRequired) {                if (verifyIdentity) {                    getLogger().info("This SMTP server requires authentication and verifies that the authentication credentials match the sender address.");                } else {                    getLogger().info("This SMTP server requires authentication, but doesn't verify that the authentication credentials match the sender address.");                }            } else {                getLogger().info("This SMTP server does not require authentication.");            }            String authorizedAddresses = handlerConfiguration.getChild("authorizedAddresses").getValue(null);            if (!authRequired && authorizedAddresses == null) {                /* if SMTP AUTH is not requred then we will use                 * authorizedAddresses to determine whether or not to                 * relay e-mail.  Therefore if SMTP AUTH is not                 * required, we will not relay e-mail unless the                 * sending IP address is authorized.                 *                 * Since this is a change in behavior for James v2,                 * create a default authorizedAddresses network of                 * 0.0.0.0/0, which matches all possible addresses, thus                 * preserving the current behavior.                 *                 * James v3 should require the <authorizedAddresses>                 * element.                 */                authorizedAddresses = "0.0.0.0/0.0.0.0";            }            if (authorizedAddresses != null) {                java.util.StringTokenizer st = new java.util.StringTokenizer(authorizedAddresses, ", ", false);                java.util.Collection networks = new java.util.ArrayList();                while (st.hasMoreTokens()) {                    String addr = st.nextToken();                    networks.add(addr);                }                authorizedNetworks = new NetMatcher(networks);            }            if (authorizedNetworks != null) {                getLogger().info("Authorized addresses: " + authorizedNetworks.toString());            }            // get the message size limit from the conf file and multiply            // by 1024, to put it in bytes            maxMessageSize = handlerConfiguration.getChild( "maxmessagesize" ).getValueAsLong( maxMessageSize ) * 1024;            if (maxMessageSize > 0) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -