 ------
 Jabber Notification
 ------
 Olivier Lamy
 ------
 Nov 19 2007
 ------

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

Jabber Notification

  [[1]] Under <<Notifiers>> from the <<Project Information>> page, click <<Add>>.

  [[2]] Select <<Jabber>> from the pull-down menu and click Submit.

  [[3]] On the <<Add/Edit Jabber Notifier>> page, fill out the form with the following:

    * Jabber Host

    * Jabber Port is typically 5222

    * Jabber Login

    * Jabber Password

    * Jabber Domain Name is the fully qualified domain name of your Jabber login

    * Jabber Recipient Address

    []

[../../images/notifier-jabber-add.png] Add Jabber Notifier

  The Jabber login and Jabber recipient address must be different. The Jabber
  recipient must also be added in the contact list of the sender (at least for Google talk).

  [[4]] Select the <<Send on ...>> options you want.

  [[5]] Click <<Save>>. The Jabber notifier you just added will be listed under <<Notifiers>> on the <<Project
  Information>> page along with the other notifiers you may have set up prior to this.
