

<!--#include virtual="/doctype.html" -->
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    <link href="/css/ooo.css" rel="stylesheet" type="text/css">
    
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Apache OpenOffice - Contact Us</title>

    
    <script src="https://www.apachecon.com/event-images/snippet.js"></script>
  </head>
  <body>
    <!--#include virtual="/brand.html" -->
    <div id="topbara">
      <!--#include virtual="/topnav.html" -->
      <div id="breadcrumbsa"><a href="/">home</a></div>
    </div>
    <div id="clear"></div>
      
      
    <div id="content">
      
      

<h1>Thank you for contacting Apache OpenOffice</h1>

<p>
  <b>Please read the following options carefully.</b> Sending a question to the wrong place can lead to a delayed
  response, or even cause your message to be ignored. Remember, we have millions of users of Apache OpenOffice. We want
  to help you. Please help us help you by directing your message to the right place.
</p>

<ul>
  <li>
    <h2>If you are a user and need help with Apache OpenOffice...</h2>

    <p>
      The fastest way to get expert help with OpenOffice is to use our
      <a href="http://forum.openoffice.org/">Community Support Forums</a>. You can search for answers to problems without
      registering. If you do register, you can post new questions to get help, participate in discussions, and help other
      users. The forum also allows for notifications on any post by subscribing to a topic.
    </p>

    <p>
      <select id="forum_lang" name="forum_lang" title="Choose your favorite language" onchange="if( this.value ) window.location.href = this.value">
        <option value=""                                        title="Choose your favorite forum language" selected>Choose your favorite language</option>
        <option value=""                                        title="" >-----------------------------------------</option>
        <option value="https://forum.openoffice.org/"           title="Overview - All languages">Overview - All languages</option>
        <option value="https://forum.openoffice.org/en/forum/"  title="OpenOffice Community Forum (English)">OpenOffice Community Forum (English)</option>
        <option value="http://www.openoffice.org/de/foren.html" title="Support-Foren von Drittanbietern (Deutsch)">Support-Foren von Drittanbietern (Deutsch)</option>
        <option value="https://forum.openoffice.org/es/forum/"  title="OpenOffice Foro de la comunidad (Español)">OpenOffice Foro de la comunidad (Español)</option>
        <option value="https://forum.openoffice.org/fr/forum/"  title="Forum francophone OpenOffice (Français)">Forum francophone OpenOffice (Français)</option>
        <option value="https://forum.openoffice.org/it/forum/"  title="Forum della comunità OpenOffice (Italiano)">Forum della comunità OpenOffice (Italiano)</option>
        <option value="https://forum.openoffice.org/hu/forum/"  title="OpenOffice Közösségi fórum (Magyar)">OpenOffice Közösségi fórum (Magyar)</option>
        <option value="https://forum.openoffice.org/nl/forum/"  title="Nederlandstalige Gemeenschap (Nederlands)">Nederlandstalige Gemeenschap (Nederlands)</option>
        <option value="https://forum.openoffice.org/pl/forum/"  title="Forum społeczności OpenOffice (Polski)">Forum społeczności OpenOffice (Polski)</option>
        <option value="https://forum.openoffice.org/vi/forum/"  title="Diễn đàn viOO (Tiếng Việt)">Diễn đàn viOO (Tiếng Việt)</option>
        <option value="https://forum.openoffice.org/ja/forum/"  title="OpenOffice コミュニティーフォーラム (日本語)">OpenOffice コミュニティーフォーラム (日本語)</option>
        <option value="https://forum.openoffice.org/zh/forum/"  title="OpenOffice 中文社区论坛 (简体中文)">OpenOffice 中文社区论坛 (简体中文)</option>
      </select>
    </p>

    <p>
      Or, send a message to our <a href="mailto:users@openoffice.apache.org">general support mailing list</a>. (For full
      benefits, please see subscription information on the
      <a href="http://openoffice.apache.org/mailing-lists.html" >project mailing list page.</a>)
    </p>
    <p>
      Other support mechanisms, including FAQs, commercial support, etc., are described on our
      <a href="/support">Support Page</a>.
    </p>
  </li>

  <li>
    <h2>If you want to submit a bug report...</h2>

    <p>
      Note: Bug reporting is  <b>not</b> a general way to receive support for Apache OpenOffice problems. If you need
      help using OpenOffice, please use one of the support options described in the first section. But if you have found
      a bug that you want to report you should use our Bugzilla issue tracking system.
    </p>

    <p>
      To submit a bug report, use our bug reporting system, <a href="https://issues.apache.org/ooo/">Bugzilla</a>. The
      <a href="http://www.openoffice.org/qa/issue_handling/pre_submission.html">QA issue handling page</a> has useful
      information on getting started with Bugzilla, including searchng for issues, applying for a Bugzilla account, and
      enterring new issues.
    </p>
  </li>	

  <li>
    <h2>For problems with the Apache OpenOffice insfrastructure...</h2>

    <p>
      <b>Note:</b> These addresses are not for questions about the use of Apache OpenOffice. They are only for issues
      with the infrastructure services. User support questions sent to these addresses may be ignored.
    </p>

    <ul>
<!-- This item is still misused to report user problems with AOO and *not* with the website.
     Therefore disabling the list item until we have a better solution.
      <li>
        For problems with the <a href="http://www.openoffice.org/">www.openoffice.org</a> website, please contact us via
        <a href="mailto:dev@openoffice.apache.org&#63;subject=Reporting%20a%20problem%20with%20the%20OpenOffice%20website"
        title="Development mailing list (to receive answers you need to be subscribed)">Development mailing list</a>.
      </li>
-->
      <li>For problems with the <a href="https://issues.apache.org/ooo/">Bugzilla</a> system, please contact us via
        <a href="mailto:aoo-bugzilla-admin@apache.org&#63;subject=Reporting%20a%20problem%20with%20the%20OpenOffice%20BugZilla"
        title="BugZilla Admin mailing list (to receive answers you need to be subscribed)">
        BugZilla Admin mailing list</a>.
      </li>

      <li>For problems with the <a href="http://wiki.openoffice.org/">Wiki</a>, please contact us via
        <a href="mailto:dev@openoffice.apache.org&#63;subject=Reporting%20a%20problem%20with%20the%20OpenOffice%20Wiki"
        title="Development mailing list (to receive answers you need to be subscribed)">Development mailing list</a>.
      </li>

      <li>For problems with the <a href="https://translate.apache.org/">Translation Pootle service</a>, please contact
        us via <a href="mailto:l10n@openoffice.apache.org&#63;subject=Reporting%20a%20problem%20with%20the%20Pootle%20translation%20service"
        title="L10N mailing list (to receive answers you need to be subscribed)">L10N mailing list</a>.
      </li>
    </ul>

    <p>
      <b>Note:</b> Emails sent to these mailing lists are publicly archived. So do not send personal information that you
      would not want on the web for anyone to see.
    </p>
  </li>

  <li>
    <h2>For all other inquiries...</h2>

    Please consult our <a href="http://openoffice.apache.org/mailing-lists.html">mailing lists page</a> for the
    appropriate mailing lists.
  </li>	
</ul>



      
    </div>
    <!--#include virtual="/footer.html" -->
  </body>
</html>
