##
## 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.
##
## $Rev$ $Date$
##

text/plain;;    x-java-content-handler=org.apache.geronimo.javamail.handlers.TextPlainHandler
text/html;;     x-java-content-handler=org.apache.geronimo.javamail.handlers.TextHtmlHandler
text/xml;;      x-java-content-handler=org.apache.geronimo.javamail.handlers.TextXmlHandler

## These are not implemented in the reference implementation because the required support                  
## is not available on server JVMs. 
## image/gif;;     x-java-content-handler=org.apache.geronimo.javamail.handlers.ImageGifHandler
## image/jpeg;;    x-java-content-handler=org.apache.geronimo.javamail.handlers.ImageJpegHandler
## image/jpg;;    x-java-content-handler=org.apache.geronimo.javamail.handlers.ImageJpegHandler

multipart/*;;   x-java-content-handler=org.apache.geronimo.javamail.handlers.MultipartHandler
message/rfc822;; x-java-content-handler=org.apache.geronimo.javamail.handlers.RFC822MessageHandler
