<?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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.camel</groupId>
        <artifactId>components</artifactId>
        <version>2.14.1</version>
    </parent>

    <artifactId>camel-mail</artifactId>
    <packaging>bundle</packaging>
    <name>Camel :: Mail</name>
    <description>Camel Mail support</description>

    <properties>
        <camel.osgi.export.pkg>org.apache.camel.component.mail.*</camel.osgi.export.pkg>
        <camel.osgi.export.service>
          org.apache.camel.spi.ComponentResolver;component=imap,
          org.apache.camel.spi.ComponentResolver;component=imaps,
          org.apache.camel.spi.ComponentResolver;component=nntp,
          org.apache.camel.spi.ComponentResolver;component=pop3,
          org.apache.camel.spi.ComponentResolver;component=pop3s,
          org.apache.camel.spi.ComponentResolver;component=smtp,
          org.apache.camel.spi.ComponentResolver;component=smtps
        </camel.osgi.export.service>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>${javax-mail-version}</version>
            <exclusions>
              <!-- javax activation is part of the JDK now -->
              <exclusion>
                <groupId>javax.activation</groupId>
                <artifactId>activation</artifactId>
              </exclusion>
            </exclusions>
        </dependency>

        <!-- testing -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jvnet.mock-javamail</groupId>
            <artifactId>mock-javamail</artifactId>
            <version>${mock-javamail-version}</version>
            <exclusions>
              <exclusion>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
              </exclusion>
            </exclusions>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
