/**
 *
 * Copyright 2005 The Apache Software Foundation
 *
 *  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.geronimo.javamail.transport.smtp;

/**
 * General purpose Exception
 * 
 * @version $Id: SMTPTransportException.java 398634 2006-05-01 16:56:06Z rickmcguire $
 */
class SMTPTransportException extends Exception {

    SMTPTransportException() {
        super();
    }

    SMTPTransportException(String s) {
        super(s);
    }

    SMTPTransportException(String s, Exception t) {
        super(s, t);
    }

    SMTPTransportException(Exception t) {
        super("SMTP Transport error", t);
    }
}
