<!DOCTYPE html>
<html lang="en">
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<head>
<meta charset="utf-8">
<title>The Apache OFBiz&reg; Project</title>
<meta name="description" content="Apache OFBiz (The Apache Open For Business
    Project) is an open source enterprise automation software project licensed
    under the Apache License Version 2.0. Being open source under the Apache 2.0
    license and driven by a community Apache OFBiz offers both flexibility by
    design and by access to code, and a solution where you're not alone but
    rather can work with many others to get things done.">
<meta name="keywords" content="Open Source ERP,Open Source CRM,
    Open Source E-Commerce,Open Source eCommerce,Open Source POS,Open Source SCM,
    Open Source MRP,Open Source CMMS,Open Source EAM,web services,workflow,
    ebusiness,e-business,ecommerce,e-commerce,automation,enterprise software,
    open source,entity engine,service engine,erp,crm,party,accounting,facility,
    supply,chain,management,catalog,order,project,task,work effort,financial,
    ledger,content management,customer,inventory"/>

<meta name="Robots" content="index,follow" />
<!-- Mobile Specific Metas
    ================================================== -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- CSS
    ================================================== -->
<!-- Bootstrap  -->
<link type="text/css" rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<!-- web font  -->
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,800" rel="stylesheet" type="text/css">
<!-- plugin css  -->
<link rel="stylesheet" type="text/css" href="js-plugin/pretty-photo/css/prettyPhoto.css" />
<link rel="stylesheet" type="text/css" href="js-plugin/rs-plugin/css/settings.css" media="screen" />
<link type="text/css" rel="stylesheet" href="js-plugin/hoverdir/css/style.css">
<!-- icon fonts -->
<link type="text/css" rel="stylesheet" href="font-icons/custom-icons/css/custom-icons.css">
<link type="text/css" rel="stylesheet" href="font-icons/custom-icons/css/custom-icons-ie7.css">
<!-- Custom css -->
<link type="text/css" rel="stylesheet" href="css/layout.css">
<link type="text/css" id="colors" rel="stylesheet" href="css/colors.css">
<!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<!--[if gte IE 9]><style type="text/css">.iconBig, .active, .hover a , .Shover a { filter: none !important; } </style> <![endif]-->
<script src="js/modernizr-2.6.1.min.js"></script>
<!-- Favicons
    ================================================== -->
<link rel="shortcut icon" href="images/favicon.ico">
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="144x144" href="images/apple-touch-icon-144x144.png">
</head>
<body>
<!-- header -->
<header id="mainHeader" class="clearfix">
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container"> <a href="index.html" class="brand"><img src="images/OFBiz-logoV3-apache.png" alt="Apache OFBiz Logo"/></a>
        <nav id="mainMenu" class="clearfix">
          <ul>
            <li><a href="index.html" class="firstLevel">Home</a></li>
            <li><a href="" class="firstLevel">Getting Started</a>
              <ul>
                <li><a href="developers.html" class="">Developers</a></li>
                <li><a href="business-users.html" class="last">Business Users</a></li>
              </ul>
            </li>
            <li><a href="" class="firstLevel">News</a>
              <ul>
                <li><a href="https://twitter.com/apacheofbiz" target="external">Twitter</a></li>
                <li><a href="https://blogs.apache.org/ofbiz/" target="external" class="last">Blog</a></li>                
              </ul>
            </li>
            <li><a href="" class="firstLevel">Documentation</a>
              <ul>
                <li><a href="https://cwiki.apache.org/confluence/display/OFBIZ/Documentation#Documentation-End-UserDocumentation" target="external" class="">User Documentation</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/OFBIZ/Technical+Documentation" target="external" class="">Technical Documentation</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/OFBIZ/Home" target="external" class="">Wiki</a></li>
                <li><a href="https://ci.apache.org/projects/ofbiz/site/javadocs/" target="external" class="last">API Reference</a></li>
              </ul>
            </li>
            <li><a href="" class="firstLevel">Community</a>
              <ul>
                <li><a href="getting-involved.html">Getting Involved</a></li>                
                <li><a href="mailing-lists.html">Mailing Lists</a></li>
                <li><a href="source-repositories.html">Source Repository</a></li>
                <li><a href="download.html">Downloads</a></li>
                <li><a href="https://issues.apache.org/jira/browse/OFBIZ/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel" target="external" >Issue Tracker</a></li>
                <li><a href="faqs.html" class="last">FAQ</a></li>
              </ul>
            </li>
            <li><a href="ofbiz-demos.html" class="firstLevel">Demos</a></li>            
            </li>
          </ul>
        </nav>
      </div>
    </div>
  </div>
</header>
<!-- header -->
<!-- globalWrapper -->
<div id="globalWrapper">
    
  <!-- page content -->
  <section id="content" class="fullWidth">
    <header class="headerPage">
      <div class="container clearfix">
        <div class="row">
          <h1 class="span8">Apache OFBiz Mailing Lists</h1>
          <div class="span4" id="navTrail"> <a href="index.html" class="homeLink">home</a><span>/</span><a href="">Community</a><span>/</span><span class="current">Mailing Lists</span> </div>
        </div>
      </div>
    </header>
    <section class="slice clearfix">
      <div class="container">
        <div class="row">
          <section class="mb15 clearfix">
            <div class="span6"> <img src="images/Subscribe.jpg" alt="subscribe to our mailing lists"/> </div>
            <div class="span6">
              <h2>Subscribe to Our Mailing Lists</h2>
              <div class="divider"><span></span></div>
              <p>We welcome everyone who would like to join our community and participate in our mailing lists. We expect that everyone respects the <a href="http://www.apache.org/dev/contrib-email-tips.html">mailing list participation guidelines </a> and the <a href="http://apache.org/foundation/policies/conduct.html">ASF Code of Conduct </a>.</p>
        <p>To subscribe to a mailing list please:
    <ul class="iconsList">
    <li><i class="icon-pin"></i>Click the button of the mailing list you want to subscribe to</li>
    <li><i class="icon-pin"></i>On the following page, click the 'Subscribe' button </li>
    <li><i class="icon-pin"></i>Send the automatically created email from your email client</li>
    <li><i class="icon-pin"></i>You will receive an email about the mailing list manager program (EZMLM)</li>
    <li><i class="icon-pin"></i>Congratulations! You are now subscribed</li>
    </ul>
        </div>
          </section>
          <section class="span12 mb15">
            <div class="row-fluid">
              <div class="span4">
                <h3 class="mediumIconH3"><span class="iconWrapper iconMedium"><i class="icon-users" ></i></span> User Mailing List</h3>
          <p>The user list is intended for help or issues with OFBiz installation, deployment, custom development and usage related topics.</p>
          <p><i class="icon-info-circle"></i> Please remember if you are reporting an issue to include the following:</p>
    <ul class="iconsList">
                  <li ><i class="icon-check"></i> What you were looking for?</li>
                  <li><i class="icon-check"> </i>How did you try to achieve it?</li>
                  <li><i class="icon-check"></i> What did you expect as results?</li>
                  <li><i class="icon-check"></i> What you actually got as results?</li>
                 </ul>  
                <a class="btn btnSmall" href="http://lists.apache.org/list.html?user@ofbiz.apache.org">User List</a> </div>
       <div class="span4">
                  <h3 class="mediumIconH3"><span class="iconWrapper iconMedium"><i class="icon-cog-alt"></i></span> Developer Mailing List</h3>
                   <p>The developer list is strictly for topics related to the design and development of the OFBiz Project itself.</p>
      <p><i class="icon-info-circle"></i>Please don't ask questions relevant to User Mailing List in this Mailing List.</p>
       <p>If you are not sure to which list to post to then use the User Mailing List..</p>
                  <a class="btn btnSmall" href="http://lists.apache.org/list.html?dev@ofbiz.apache.org">Developer List</a> 
    </div>
                <div class="span4">
                  <h3 class="mediumIconH3"><span class="iconWrapper iconMedium"><i class="icon-resize-full-alt"></i></span> Commit Mailing List</h3>
                  <p>The commits list is used to notify subscribers of commits to the OFBiz SVN repository. It is only used for reference.</p>
      <p><i class="icon-info-circle"></i>Please don't ask any questions on this list. It is not used for discussions. </p>
              <p>If you are not sure to which list to post to then use the User Mailing List.</p>
      <a class="btn btnSmall" href="http://lists.apache.org/list.html?commits@ofbiz.apache.org">Commits List</a>
                </div>
            </div>
          </section>
          <section class="span12 mb15 clearfix">
       <h3>Community Help and Support</h3>
              <p>Our Community is keen to share information and support other OFBiz users. Please don't hesitate to view or participate in our mailing list discussions.</p>
            <h2>Un-subscribing from our Mailing Lists </h2>
            <div class="divider"><span></span></div>
             <p>To unsubscribe from any of the following lists, please send an empty, subjectless email to mailing list unsubscribe addresses.</p>
    <ul class="iconsList">
                  <li><i class="icon-pin"></i> user-unsubscribe@ofbiz.apache.org</li>
        <li><i class="icon-pin"></i> dev-unsubscribe@ofbiz.apache.org</li>
       <li><i class="icon-pin"></i> commits-unsubscribe@ofbiz.apache.org</li>
                </ul>
           </section>

        </div>
      </div>
    </section>
  </section>
  <!-- page content -->
 
<!-- footer -->
<footer class="footer1">
  <div class="container" id="footer">
    <div class="row">
      <div class="span6 timelineWidget">
        <h2>Latest tweets</h2>
        <div class="divider"><span></span></div>
        <ul class="socialNetwork nav">
          <li>
            <a href="https://twitter.com/ApacheOfbiz" class="icon-twitter-bird socialIcon tips"
              target="_blank" title="follow us on Twitter"><span>twitter</span></a>
          </li>
          <li><a href="https://www.youtube.com/user/ofbiz" class="icon-play socialIcon tips"  title="follow us on Youtube"><span>Youtube</span></a></li>
          <li><a href="https://www.facebook.com/Apache-OFBiz-1478219232210477/?ref=page_internal" class="icon-facebook socialIcon tips"  title="follow us on Facebook"><span>facebook</span></a></li>
          <!--<li><a href="#" class="icon-rss socialIcon tips"  title="Our rss feed"><span>rss feed</span></a></li>         
          <li><a href="#" class="icon-gplus socialIcon tips"  title="follow us on Google +"><span>google +</span></a></li>
          <li><a href="#" class="icon-instagram socialIcon tips"  title="follow us on Instagram"><span>instagram</span></a></li>
          <li><a href="#" class="icon-linkedin socialIcon tips"  title="follow us on Linkedin"><span>linkedin</span></a></li>
          <li><a href="#" class="icon-pinterest-circled socialIcon tips"  title="follow us on Pinterest"><span>Pinterest</span></a></li>-->
        </ul>
        <div id="twitterFrame"> <a class="twitter-timeline" href="https://twitter.com/ApacheOfbiz?height=250" data-widget-id="588661945194192896"  data-tweet-limit="2" data-theme="dark" data-chrome="nofooter noheader transparent" >Tweets by @ApacheOfbiz</a>
          <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
        </div>
      </div>
      <div class="span3 contactWidget">
        <h2>Contact Community</h2>
        <div class="divider"><span></span></div>
        <ul>
          <li><a href="mailing-lists.html">Mailing Lists</a></li>
          <li><a href="source-repositories.html">Source Repository (SVN)</a></li>
          <li><a href="https://issues.apache.org/jira/browse/OFBIZ" target="external">Issue Tracker (Jira)</a></li>
          <li><a href="https://www.youtube.com/user/ofbiz" target="external">OFBiz Youtube Channel</a></li>
          <li><a href="https://vimeo.com/channels/apacheofbiz" target="external">OFBiz Vimeo Channel</a></li>
          <li><a href="https://www.hipchat.com/gGlwdXZZl" target="external">OFBiz HipChat Room</a></li>
        </ul>
      </div>
      <div class="span3 sociallWidget">
        <h2>ASF Information</h2>
        <div class="divider"><span></span></div>
        <ul>
          <li><a href="http://www.apache.org/foundation/" target="external">Apache Software Foundation</a></li>
          <li><a href="http://www.apache.org/foundation/sponsorship.html" target="external">Sponsorship</a></li>
          <li><a href="http://www.apache.org/foundation/thanks.html" target="external">Thanks</a></li>
          <li><a href="download.html">Security</a></li>
        </ul>
      </div>
    </div>
  </div>
</footer>
<footer class="footer2" id="footerRights">
  <div class="container">
    <div class="row">
      <div class="span12">
        <p>
          Copyright © 2017 The Apache Software Foundation. Licensed under the
          Apache License, Version 2.0. Apache OFBiz, OFBiz, the project logo
          and the Apache feather logo are trademarks of The Apache Software
          Foundation.
        </p>
      </div>
    </div>
  </div>
</footer>
<!-- footer -->
</div>
<!-- globalWrapper -->
<script type="text/javascript" src="js-plugin/respond/respond.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="js-plugin/jquery-ui/jquery-ui-1.8.23.custom.min.js"></script>
<!-- third party plugins  -->
<script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap-carousel.js"></script>
<script type="text/javascript" src="js-plugin/easing/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="js-plugin/pretty-photo/js/jquery.prettyPhoto.js"></script>
<script type="text/javascript" src="js-plugin/hoverdir/jquery.hoverdir.js"></script>
<!-- jQuery KenBurn Slider  -->
<script type="text/javascript" src="js-plugin/rs-plugin/js/jquery.themepunch.plugins.min.js"></script>
<script type="text/javascript" src="js-plugin/rs-plugin/js/jquery.themepunch.revolution.min.js"></script>
<!-- Custom  -->
<script type="text/javascript" src="js/custom.js"></script>
<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', UA]);
    _gaq.push(['_trackPageview']);

    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>
</body>
</html>
