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

= FaqCanIFileByEmail
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki FaqCanIFileByEmail
:description: Apache NetBeans wiki FaqCanIFileByEmail
:toc: left
:toc-title:
:syntax: true

=== Can I file my completed CA by email?

You may send your signed and completed OCA to Oracle by by fax (number available by request), or by scanning your completed form and emailing the image to link:mailto:oracle-ca_us@oracle.com[oracle-ca_us@oracle.com]. Please specify the project you wish to contribute to in the subject of the e-mail.

link:FaqHowDoIFileACA.asciidoc[How do I file the CA?]

=== Apache Migration Information

The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.

This page was exported from link:http://wiki.netbeans.org/FaqCanIFileByEmail[http://wiki.netbeans.org/FaqCanIFileByEmail] , 
that was last modified by NetBeans user Jkovalsky 
on 2012-04-17T09:28:08Z.


*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.
