                   SENDMAIL OPEN SOURCE LICENSE

The following license terms and conditions apply to this open source
software ("Software"), unless a different license is obtained directly
from Sendmail, Inc. ("Sendmail") located at 6425 Christie Ave, Fourth
Floor, Emeryville, CA 94608, USA.

Use, modification and redistribution (including distribution of any
modified or derived work) of the Software in source and binary forms is
permitted only if each of the following conditions of 1-6 are met:

1. Redistributions of the Software qualify as "freeware" or "open
   source software" under one of the following terms:

   (a) Redistributions are made at no charge beyond the reasonable
       cost of materials and delivery; or

   (b) Redistributions are accompanied by a copy of the modified
       Source Code (on an acceptable machine-readable medium) or by an
       irrevocable offer to provide a copy of the modified Source Code
       (on an acceptable machine-readable medium) for up to three years
       at the cost of materials and delivery. Such redistributions must
       allow further use, modification, and redistribution of the Source
       Code under substantially the same terms as this license. For
       the purposes of redistribution "Source Code" means the complete
       human-readable, compilable, linkable, and operational source
       code of the redistributed module(s) including all modifications.

2. Redistributions of the Software Source Code must retain the
   copyright notices as they appear in each Source Code file, these
   license terms and conditions, and the disclaimer/limitation of
   liability set forth in paragraph 6 below. Redistributions of the
   Software Source Code must also comply with the copyright notices
   and/or license terms and conditions imposed by contributors on
   embedded code. The contributors' license terms and conditions
   and/or copyright notices are contained in the Source Code
   distribution.

3. Redistributions of the Software in binary form must reproduce the
   Copyright Notice described below, these license terms and conditions,
   and the disclaimer/limitation of liability set forth in paragraph
   6 below, in the documentation and/or other materials provided with
   the binary distribution.  For the purposes of binary distribution,
   "Copyright Notice" refers to the following language: "Copyright (c)
   1998-2004 Sendmail, Inc. All rights reserved."

4. Neither the name, trademark or logo of Sendmail, Inc. (including
   without limitation its subsidiaries or affiliates) or its contributors
   may be used to endorse or promote products, or software or services
   derived from this Software without specific prior written permission.
   The name "sendmail" is a registered trademark and service mark of
   Sendmail, Inc.

5. We reserve the right to cancel this license if you do not comply with 
   the terms.  This license is governed by California law and both of us 
   agree that for any dispute arising out of or relating to this Software, 
   that jurisdiction and venue is proper in San Francisco or Alameda 
   counties.  These license terms and conditions reflect the complete 
   agreement for the license of the Software (which means this supercedes 
   prior or contemporaneous agreements or representations).  If any term
   or condition under this license is found to be invalid, the remaining
   terms and conditions still apply.

6. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY
   SENDMAIL AND ITS CONTRIBUTORS "AS IS" WITHOUT WARRANTY OF ANY KIND
   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   IMPLIED WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT AND FITNESS FOR A
   PARTICULAR PURPOSE ARE EXPRESSLY DISCLAIMED. IN NO EVENT SHALL SENDMAIL
   OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
   TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
   OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
   OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   WITHOUT LIMITATION NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
   USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

$Revision: 1.1 $ $Date: 2006/07/15 21:16:12 $
