<!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="OFBiz is an open source enterprise automation software project licensed under the Apache License. It means you are not alone and can work with many others." />
<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="//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/plugins/pretty-photo/css/prettyPhoto.css" />
<link rel="stylesheet" type="text/css" href="/js/plugins/rs-plugin/css/settings.css" media="screen" />
<link type="text/css" rel="stylesheet" href="/js/plugins/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="//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-icon.png">
<link rel="apple-touch-icon" sizes="72x72" href="/images/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="114x114" href="/images/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="144x144" href="/images/apple-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_logo.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="//twitter.com/apacheofbiz" target="external">Twitter</a></li>
                <li><a href="//blogs.apache.org/ofbiz/" target="external" class="last">Blog</a></li>
              </ul>
            </li>
            <li><a href="#" class="firstLevel">Documentation</a>
              <ul>
                <li><a href="//cwiki.apache.org/confluence/display/OFBIZ/Documentation#Documentation-End-UserDocumentation" target="external" class="">User Documentation</a></li>
                <li><a href="//cwiki.apache.org/confluence/display/OFBIZ/Technical+Documentation" target="external" class="">Technical Documentation</a></li>
                <li><a href="//cwiki.apache.org/confluence/display/OFBIZ/Home" target="external" class="">Wiki</a></li>
                <li><a href="//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="//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>
		    <a href="//twitter.com/ApacheOfbiz" class="icon-twitter-bird socialIcon tips"
		      target="external" title="follow us on Twitter"><span>twitter</span></a>
		  </li>
		  <li><a href="//www.youtube.com/user/ofbiz" class="icon-play socialIcon tips"  title="follow us on Youtube"><span>Youtube</span></a></li>
		  <li><a href="//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>
        </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">Getting Started - Business Users</h1>
          <div class="span4" id="navTrail"> <a href="index.html" class="homeLink">home</a><span>/</span><a href="template-columns.html">templates</a><span>/</span><span class="current">Business Users</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/no-slider-pic.png" alt="premium website template for you"/> </div>
            <div class="span6">
              <h2>Getting Started - Business Users</h2>
              <div class="divider"><span></span></div>
              <p> We have a three different community mailing lists. See below for details. </p>
              <h3>Community Help and Support</h3>
              <p>Our Community is keen to share information and support other OFBiz users in their implementations. Please dont hesitate to view or participate in our mailing list discussions.</p>
        <p>To subscribe to a mailing list please use the links below. In your first email you will recieve instructions about how to use the mailing list manager program (EZMLM)</p>
        <p>To unsubscribe from any of the following lists, send an empty, subjectless email to unsubscribe address listed below. In other words, click the appropriate unsubscribe link below and press send. </p>
            </div>
          </section>
          <section class="span12 mb15">
            <div class="row-fluid">
              <div class="span4">
                <h3 class="mediumIconH3"><span class="iconWrapper iconMedium"><i class="icon-resize-full-alt" ></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> Please remember if you are reporting an issue to include the following:</p>
       <ol class="iconsList">
               <li><span class="iconWrapper iconMini">1</span> What you were looking for?</li>
               <li><span class="iconWrapper iconMini">2</span> How did you try to achieve it?</li>
               <li><span class="iconWrapper iconMini">3</span> What did you expect as results?</li>
               <li><span class="iconWrapper iconMini">4</span> What you actually got as results?</li>
            </ol>  
            <a class="btn btnSmall" href="//ofbiz.135035.n4.nabble.com/OFBiz-User-f135036.html">User List</a> </div>

  <div class="span4">
                <h3 class="mediumIconH3"><span class="iconWrapper iconMedium"><i class="icon-twitter"></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>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="//ofbiz.135035.n4.nabble.com/OFBiz-Dev-f165671.html">Developer List</a> </div>
              <div class="span4">
                <h3 class="mediumIconH3"><span class="iconWrapper iconMedium"><i class="icon-star"></i></span> Commit Mailing List</h3>
                <p>The commits list is used to notify subscribers of commits to the OFBiz repositories.</p>
    <p> It is not used for discussions only for reference.</p>
                <a class="btn btnSmall" href="#">Commits List</a> </div>
            </div>
          </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="//twitter.com/ApacheOfbiz" class="icon-twitter-bird socialIcon tips"
              target="external" title="follow us on Twitter"><span>twitter</span></a>
          </li>
          <li><a href="//www.youtube.com/user/ofbiz" class="icon-play socialIcon tips"  title="follow us on Youtube"><span>Youtube</span></a></li>
          <li><a href="//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="//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 (Git)</a></li>
          <li><a href="//issues.apache.org/jira/browse/OFBIZ" target="external">Issue Tracker (Jira)</a></li>
          <li><a href="//www.youtube.com/user/ofbiz" target="external">OFBiz Youtube Channel</a></li>
          <li><a href="//vimeo.com/channels/apacheofbiz" target="external">OFBiz Vimeo Channel</a></li>
          <li>
            <a href="//s.apache.org/ofbiz-slack-channel" target="external">OFBiz Chat</a><br/>
            <span class="footer-note">
              Note: To chat with users and developers of Apache OFBiz.
              <br>Please create a Slack account using <a href="//s.apache.org/slack-invite" target="external">this invite link</a> and
              <a href="//s.apache.org/ofbiz-slack-channel" target="external">join the <b>#ofbiz channel</b>.</a>
              Please do <b>not</b> ask OFBiz questions in the #general channel.
            </span>
          </li>
        </ul>
      </div>
      <div class="span3 sociallWidget">
        <h2>ASF Information</h2>
        <div class="divider"><span></span></div>
        <ul>
          <li><a href="https://www.apache.org/foundation/" target="external">Apache Software Foundation</a></li>
          <li><a href="https://www.apache.org/events/current-event" target="external">Events</a></li>
          <li><a href="https://www.apache.org/foundation/sponsorship.html" target="external">Sponsorship</a>
          		and <a href="https://www.apache.org/foundation/contributing.html" target="external">Donations</a>
          </li>
          <li><a href="https://www.apache.org/foundation/thanks.html" target="external">Thanks</a></li>
          <li><a href="https://ofbiz.apache.org/security.html">Security</a></li>
          <li><a href="https://www.apache.org/licenses/" target="external">License</a></li>
        </ul>
      </div>
    </div>
  </div>
</footer>
<footer class="footer2" id="footerRights">
  <div class="container">
    <div class="row">
      <div class="span12">
        <p>
          Copyright © 2020 The Apache Software Foundation.
          <a href="https://www.apache.org/licenses/" target="external">Licensed under the  Apache License, Version 2.0</a>.<br/>
          Apache OFBiz, OFBiz, the project logo and the Apache feather logo are trademarks of <a href="https://www.apache.org/" target="external">The Apache Software Foundation.</a>
        </p>
      </div>
    </div>
  </div>
</footer>
<!-- footer -->
</div>
<!-- globalWrapper -->
<script type="text/javascript" src="js/plugins/respond/respond.min.js"></script>
<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="js/plugins/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/plugins/easing/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="js/plugins/pretty-photo/js/jquery.prettyPhoto.js"></script>
<script type="text/javascript" src="js/plugins/hoverdir/jquery.hoverdir.js"></script>
<!-- jQuery KenBurn Slider  -->
<script type="text/javascript" src="js/plugins/rs-plugin/js/jquery.themepunch.plugins.min.js"></script>
<script type="text/javascript" src="js/plugins/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>
