<?xml version="1.0"?>

<!--
  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.
 -->

<mailrepositorystore>
    <defaultProtocol>file</defaultProtocol>
    <mailrepositories>
        <!-- File based repositories.  These repositories store all message data -->
        <!-- in the file system. -->
        <mailrepository class="org.apache.james.mailrepository.file.FileMailRepository">
            <protocols>
                <protocol>file</protocol>
            </protocols>
            <!-- Set if the messages should be listed sorted. False by default -->
            <config FIFO="false" CACHEKEYS="true"/>
        </mailrepository>
    </mailrepositories>
</mailrepositorystore>
