Title: ContactPoints
Notice:    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.

If you have a question about anything Apache, the ComDev project is here to help.  
To help us help you, please try to direct your question to the right mailing list - our 
volunteer committers do all their work on mailing lists.

# Community Questions

Questions about community or issues across multiple Apache projects should 
be [emailed to dev@community.apache.org](mailto:dev@community.apache.org?subject=New-Contact-Question) - or see our detailed [Mailing List How To](//community.apache.org/lists.html) page.

# Technical Questions

If you have a *technical* question about *this* website, or one of the tools that 
the ComDev project builds, email us at dev@community.

If you *technical* question about *any other* Apache project, please email 
the [appropriate user@*projectname*.apache.org](//community.apache.org/lists.html) list, or the dev@ list for 
the project.

# Non-Technical Questions

Each of the below email lists are privately archived: you can mail to them, and 
we'll answer, but you won't be able to read archives.

<a name="ContactPoints-Trademarks"></a>
## Trademarks

Issues regarding trademarks, specific project names, or branding of the
ASF and any projects: please see our [Trademark Site Map](//www.apache.org/foundation/marks/resources), 
or send email to [trademarks@apache.org](mailto:trademarks@apache.org)


<a name="ContactPoints-PublicityandMarketing"></a>
## Publicity and Marketing

Issues dealing with publicity, marketing, or any inquires from the
press or analysts can see our [Press Team Page](https://www.apache.org/press/),
 or email to [press@apache.org](mailto:press@apache.org)

<a name="ContactPoints-FundraisingandSponsorship"></a>
## Fundraising and Sponsorship

Questions about fundraising, sponsorships, donations, or related
finances should see our [Donations Information](//www.apache.org/foundation/contributing.html),
or email to [fundraising@apache.org](mailto:fundraising@apache.org)

<a name="ContactPoints-Legal"></a>
### Legal

Specific legal questions that may need to be private, and require a
response from the ASF's legal counsel to to 
[legal-internal@apache.org](mailto:legal-internal@apache.org)

Please read our [Legal FAQs](https://www.apache.org/legal/#user-links) first.

<a name="ContactPoints-Other"></a>
### Other

For more information on these and other foundation lists see the [Mailing Lists](http://www.apache.org/foundation/mailinglists.html)
 page.
