diff --git a/docs/appenders/index.rst b/docs/appenders/index.rst
index 62e78a2..ef17eef 100644
--- a/docs/appenders/index.rst
+++ b/docs/appenders/index.rst
@@ -23,7 +23,6 @@
    firephp
    graylog2
    mail
-   mail-event
    mongodb
    null
    pdo
diff --git a/docs/appenders/mail-event.rst b/docs/appenders/mail-event.rst
deleted file mode 100644
index c6378dd..0000000
--- a/docs/appenders/mail-event.rst
+++ /dev/null
@@ -1,90 +0,0 @@
-=======================
-LoggerAppenderMailEvent
-=======================
-
-``LoggerAppenderMailEvent`` appends individual log events via email.
-
-This appender is similar to ``LoggerAppenderMail``, except that it sends each
-each log event in an individual email message at the time when it occurs.
-
-Layout
-------
-
-This appender requires a layout. If no layout is specified in configuration,
-``LoggerLayoutSimple`` will be used by default.
-
-Parameters
-----------
-
-The following parameters are available:
-
-+-----------+---------+----------+-----------+---------------------------------------------------------+
-| Parameter | Type    | Required | Default   | Description                                             |
-+===========+=========+==========+===========+=========================================================+
-| to        | string  | **Yes**  |           | Email address(es) to which the log will be sent.        |
-|           |         |          |           | Multiple email addresses may be specified by separating |
-|           |         |          |           | them with a comma.                                      |
-+-----------+---------+----------+-----------+---------------------------------------------------------+
-| from      | string  | **Yes**  |           | Email address which will be used in the From field.     |
-+-----------+---------+----------+-----------+---------------------------------------------------------+
-| subject   | string  | No       | Log4php   | Subject of the email message.                           |
-|           |         |          | Report    |                                                         |
-+-----------+---------+----------+-----------+---------------------------------------------------------+
-| smtpHost  | string  | No       | SMTP from | Used to override the SMTP server.                       |
-|           |         |          | php.ini   | **Only works on Windows**                               |
-+-----------+---------+----------+-----------+---------------------------------------------------------+
-| port      | string  | No       | 25        | Used to override the default SMTP server port.          |
-|           |         |          |           | **Only works on Windows**                               |
-+-----------+---------+----------+-----------+---------------------------------------------------------+
-
-.. container:: tabs
-
-    .. rubric:: XML format
-    .. code-block:: xml
-
-        <configuration xmlns="http://logging.apache.org/log4php/">
-            <appender name="default" class="LoggerAppenderMailEvent">
-                <layout class="LoggerLayoutSimple" />
-                <param name="to" value="foo@example.com,baz@example.com" />
-                <param name="from" value="logger@example.com" />
-            </appender>
-            <root>
-                <appender_ref ref="default" />
-            </root>
-        </configuration>
-
-    .. rubric:: PHP format
-    .. code-block:: php
-
-        array(
-            'appenders' => array(
-                'default' => array(
-                    'class' => 'LoggerAppenderMailEvent',
-                    'layout' => array(
-                        'class' => 'LoggerLayoutSimple',
-                    ),
-                    'params' => array(
-                        'to' => 'foo@example.com,baz@example.com',
-                        'from' => 'logger@example.com'
-                    ),
-                ),
-            ),
-            'rootLogger' => array(
-                'appenders' => array('default'),
-            ),
-        );
-
-..  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.
diff --git a/docs/appenders/mail.rst b/docs/appenders/mail.rst
index b5aa6c9..3124031 100644
--- a/docs/appenders/mail.rst
+++ b/docs/appenders/mail.rst
@@ -4,13 +4,9 @@
 
 ``LoggerAppenderMail`` appends log events via email.
 
-This appender does not send individual emails for each logging requests but will
-collect them in a buffer and send them all in a single email once the appender
-is closed (i.e. when the script exists). Because of this, it may not appropriate
-for long running scripts, in which case `LoggerAppenderMailEvent`_ might be a
-better choice.
-
-.. _LoggerAppenderMailEvent: mail-event.html
+This appender can either send individual emails for each log message
+(bufferCount = 0) or collect them in a buffer and send them in batches
+(bufferCount > 0).
 
 .. warning::
 
@@ -30,18 +26,21 @@
 
 The following parameters are available:
 
-+-----------+---------+----------+---------+---------------------------------------------------------+
-| Parameter | Type    | Required | Default | Description                                             |
-+===========+=========+==========+=========+=========================================================+
-| to        | string  | **Yes**  |         | Email address(es) to which the log will be sent.        |
-|           |         |          |         | Multiple email addresses may be specified by separating |
-|           |         |          |         | them with a comma.                                      |
-+-----------+---------+----------+---------+---------------------------------------------------------+
-| from      | string  | **Yes**  |         | Email address which will be used in the From field.     |
-+-----------+---------+----------+---------+---------------------------------------------------------+
-| subject   | string  | No       | Log4php | Subject of the email message.                           |
-|           |         |          | Report  |                                                         |
-+-----------+---------+----------+---------+---------------------------------------------------------+
++-------------+---------+----------+---------+---------------------------------------------------------+
+| Parameter   | Type    | Required | Default | Description                                             |
++=============+=========+==========+=========+=========================================================+
+| to          | string  | **Yes**  |         | Email address(es) to which the log will be sent.        |
+|             |         |          |         | Multiple email addresses may be specified by separating |
+|             |         |          |         | them with a comma.                                      |
++-------------+---------+----------+---------+---------------------------------------------------------+
+| from        | string  | **Yes**  |         | Email address which will be used in the From field.     |
++-------------+---------+----------+---------+---------------------------------------------------------+
+| subject     | string  | No       | Log4php | Subject of the email message.                           |
+|             |         |          | Report  |                                                         |
++-------------+---------+----------+---------+---------------------------------------------------------+
+| bufferCount | integer | No       | 0       | How many log messages to buffer before sending them in  |
+|             |         |          |         | a batch. Set to 0 to send each log message individaully |
++-------------+---------+----------+---------+---------------------------------------------------------+
 
 Examples
 --------
diff --git a/src/main/php/LoggerAutoloader.php b/src/main/php/LoggerAutoloader.php
index 29da2e9..5e40faf 100644
--- a/src/main/php/LoggerAutoloader.php
+++ b/src/main/php/LoggerAutoloader.php
@@ -61,7 +61,6 @@
 		'LoggerAppenderFile' => '/appenders/LoggerAppenderFile.php',
 		'LoggerAppenderGraylog2' => '/appenders/LoggerAppenderGraylog2.php',
 		'LoggerAppenderMail' => '/appenders/LoggerAppenderMail.php',
-		'LoggerAppenderMailEvent' => '/appenders/LoggerAppenderMailEvent.php',
 		'LoggerAppenderMongoDB' => '/appenders/LoggerAppenderMongoDB.php',
 		'LoggerAppenderNull' => '/appenders/LoggerAppenderNull.php',
 		'LoggerAppenderFirePHP' => '/appenders/LoggerAppenderFirePHP.php',
diff --git a/src/main/php/appenders/LoggerAppenderMail.php b/src/main/php/appenders/LoggerAppenderMail.php
index 00ec22e..885398d 100644
--- a/src/main/php/appenders/LoggerAppenderMail.php
+++ b/src/main/php/appenders/LoggerAppenderMail.php
@@ -19,14 +19,6 @@
 /**
  * LoggerAppenderMail appends log events via email.
  *
- * This appender does not send individual emails for each logging requests but
- * will collect them in a buffer and send them all in a single email once the
- * appender is closed (i.e. when the script exists). Because of this, it may
- * not appropriate for long running scripts, in which case
- * LoggerAppenderMailEvent might be a better choice.
- *
- * This appender uses a layout.
- *
  * ## Configurable parameters: ##
  *
  * - **to** - Email address(es) to which the log will be sent. Multiple email
diff --git a/src/main/php/appenders/LoggerAppenderMailEvent.php b/src/main/php/appenders/LoggerAppenderMailEvent.php
deleted file mode 100644
index 75fb4ca..0000000
--- a/src/main/php/appenders/LoggerAppenderMailEvent.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-/**
- * 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.
- */
-
-/**
- * LoggerAppenderMailEvent appends individual log events via email.
- * 
- * This appender is similar to LoggerAppenderMail, except that it sends each 
- * each log event in an individual email message at the time when it occurs.
- * 
- * This appender uses a layout.
- * 
- * ## Configurable parameters: ##
- * 
- * - **to** - Email address(es) to which the log will be sent. Multiple email
- *     addresses may be specified by separating them with a comma.
- * - **from** - Email address which will be used in the From field.
- * - **subject** - Subject of the email message.
- * - **smtpHost** - Used to override the SMTP server. Only works on Windows.
- * - **port** - Used to override the default SMTP server port. Only works on 
- *     Windows.
- *
- * @package log4php
- * @subpackage appenders
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
- * @link http://logging.apache.org/log4php/docs/appenders/mail-event.html Appender documentation
- * @deprecated LoggerAppenderMailEvent is deprecated and will be removed in a
- *   future release. Please use LoggerAppenderMail instead.
- */
-class LoggerAppenderMailEvent extends LoggerAppender {
-
-	/** 
-	 * Email address to put in From field of the email.
-	 * @var string
-	 */
-	protected $from;
-
-	/** 
-	 * Mail server port (widnows only).
-	 * @var integer 
-	 */
-	protected $port = 25;
-
-	/** 
-	 * Mail server hostname (windows only).
-	 * @var string   
-	 */
-	protected $smtpHost;
-
-	/** 
-	 * The subject of the email.
-	 * @var string
-	 */
-	protected $subject = 'Log4php Report';
-
-	/**
-	 * One or more comma separated email addresses to which to send the email. 
-	 * @var string
-	 */
-	protected $to = null;
-	
-	/** 
-	 * Indiciates whether this appender should run in dry mode.
-	 * @deprecated
-	 * @var boolean 
-	 */
-	protected $dry = false;
-	
-	public function activateOptions() {
-		if (empty($this->to)) {
-			$this->warn("Required parameter 'to' not set. Closing appender.");
-			$this->close = true;
-			return;
-		}
-		
-		$sendmail_from = ini_get('sendmail_from');
-		if (empty($this->from) and empty($sendmail_from)) {
-			$this->warn("Required parameter 'from' not set. Closing appender.");
-			$this->close = true;
-			return;
-		}
-
-		$this->warn("LoggerAppenderMailEvent is deprecated and will be removed in a future release." . 
-			"Please use LoggerAppenderMail instead.");
-
-		$this->closed = false;
-	}
-
-	public function append(LoggerLoggingEvent $event) {
-		$smtpHost = $this->smtpHost;
-		$prevSmtpHost = ini_get('SMTP');
-		if(!empty($smtpHost)) {
-			ini_set('SMTP', $smtpHost);
-		}
-	
-		$smtpPort = $this->port;
-		$prevSmtpPort= ini_get('smtp_port');
-		if($smtpPort > 0 and $smtpPort < 65535) {
-			ini_set('smtp_port', $smtpPort);
-		}
-	
-		// On unix only sendmail_path, which is PHP_INI_SYSTEM i.e. not changeable here, is used.
-	
-		$addHeader = empty($this->from) ? '' : "From: {$this->from}\r\n";
-	
-		if(!$this->dry) {
-			$result = mail($this->to, $this->subject, $this->layout->getHeader() . $this->layout->format($event) . $this->layout->getFooter($event), $addHeader);
-		} else {
-			echo "DRY MODE OF MAIL APP.: Send mail to: ".$this->to." with additional headers '".trim($addHeader)."' and content: ".$this->layout->format($event);
-		}
-			
-		ini_set('SMTP', $prevSmtpHost);
-		ini_set('smtp_port', $prevSmtpPort);
-	}
-	
-	/** Sets the 'from' parameter. */
-	public function setFrom($from) {
-		$this->setString('from', $from);
-	}
-	
-	/** Returns the 'from' parameter. */
-	public function getFrom() {
-		return $this->from;
-	}
-	
-	/** Sets the 'port' parameter. */
-	public function setPort($port) {
-		$this->setPositiveInteger('port', $port);
-	}
-	
-	/** Returns the 'port' parameter. */
-	public function getPort() {
-		return $this->port;
-	}
-	
-	/** Sets the 'smtpHost' parameter. */
-	public function setSmtpHost($smtpHost) {
-		$this->setString('smtpHost', $smtpHost);
-	}
-	
-	/** Returns the 'smtpHost' parameter. */
-	public function getSmtpHost() {
-		return $this->smtpHost;
-	}
-	
-	/** Sets the 'subject' parameter. */
-	public function setSubject($subject) {
-		$this->setString('subject',  $subject);
-	}
-	
-	/** Returns the 'subject' parameter. */
-	public function getSubject() {
-		return $this->subject;
-	}
-	
-	/** Sets the 'to' parameter. */
-	public function setTo($to) {
-		$this->setString('to',  $to);
-	}
-	
-	/** Returns the 'to' parameter. */
-	public function getTo() {
-		return $this->to;
-	}
-
-	/** Enables or disables dry mode. */
-	public function setDry($dry) {
-		$this->setBoolean('dry', $dry);
-	}
-}
diff --git a/src/site/site.xml b/src/site/site.xml
index 9eb665b..f0d863e 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -16,13 +16,13 @@
  limitations under the License.
 
 -->
-<project name="Apache log4php" 
-	xmlns="http://maven.apache.org/DECORATION/1.1.0" 
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+<project name="Apache log4php"
+	xmlns="http://maven.apache.org/DECORATION/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd">
-	
+
 	<googleAnalyticsAccountId>UA-26177991-1</googleAnalyticsAccountId>
-	
+
 	<body>
 		<links>
 			<item name="About" href="/index.html" />
@@ -52,10 +52,9 @@
 				<item name="LoggerAppenderFirePHP" href="/docs/appenders/firephp.html" />
 				<item name="LoggerAppenderGraylog2" href="/docs/appenders/graylog2.html" />
 				<item name="LoggerAppenderMail" href="/docs/appenders/mail.html" />
-				<item name="LoggerAppenderMailEvent" href="/docs/appenders/mail-event.html" />
 				<item name="LoggerAppenderMongoDB" href="/docs/appenders/mongodb.html" />
 				<item name="LoggerAppenderNull" href="/docs/appenders/null.html" />
-				<item name="LoggerAppenderPDO" href="/docs/appenders/pdo.html" />					
+				<item name="LoggerAppenderPDO" href="/docs/appenders/pdo.html" />
 				<item name="LoggerAppenderPHP" href="/docs/appenders/php.html" />
 				<item name="LoggerAppenderRollingFile" href="/docs/appenders/rolling-file.html" />
 				<item name="LoggerAppenderSocket" href="/docs/appenders/socket.html" />
@@ -81,7 +80,7 @@
 			<item name="Wiki" href="http://wiki.apache.org/logging-log4php" />
 			<item name="Blog" href="http://blogs.apache.org/logging/" />
 		</menu>
-		
+
 		<menu name="Project Information" img="icon-info-sign">
 			<item name="Continuous Integration" href="/integration.html" />
 			<item name="Source Repository" href="/source-repository.html" />
diff --git a/src/site/xdoc/docs/appenders.xml b/src/site/xdoc/docs/appenders.xml
index 8b88e13..0d8268e 100644
--- a/src/site/xdoc/docs/appenders.xml
+++ b/src/site/xdoc/docs/appenders.xml
@@ -6,9 +6,9 @@
  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.
@@ -24,15 +24,15 @@
 
 	<body>
 		<section name="Appenders">
-		
-			<p>Logging requests can be sent to multiple destinations, such as files, databases, syslog and others. 
+
+			<p>Logging requests can be sent to multiple destinations, such as files, databases, syslog and others.
 			Such destinations are called appenders. Appenders are attached to <a href="loggers.html">loggers</a>
 			and each logger can have multiple attached appenders.</p>
-			
+
 			<subsection name="Appender reference" id="Appender_reference">
-				
+
 				<p>The following appender classes are available:</p>
-			
+
 				<table>
 					<thead>
 						<tr>
@@ -66,10 +66,6 @@
 							<td>Sends the log via email. The entire log is sent in one email.</td>
 						</tr>
 						<tr>
-							<td><a href="appenders/mail-event.html">LoggerAppenderMailEvent</a></td>
-							<td>Sends the log via email. Each log entry is sent in individual emails.</td>
-						</tr>
-						<tr>
 							<td><a href="appenders/mongodb.html">LoggerAppenderMongoDB</a></td>
 							<td>MongoDB.</td>
 						</tr>
@@ -93,17 +89,17 @@
 							<td><a href="appenders/syslog.html">LoggerAppenderSyslog</a></td>
 							<td>Syslog.</td>
 						</tr>
-						
+
 					</tbody>
 				</table>
-			
+
 			</subsection>
 
-			
+
 			<subsection name="Configuring appenders" id="Configuring_appenders">
-			
+
 				<p>The following configuration shows how to configure an appender which logs to a file:</p>
-			
+
 <pre class="prettyprint linenums"><![CDATA[
 <configuration xmlns="http://logging.apache.org/log4php/">
     <appender name="default" class="LoggerAppenderFile">
@@ -118,29 +114,29 @@
 ]]></pre>
 
 				<p>From the configuration you can see that an appender has the following properties:</p>
-	
+
 				<ul>
 					<li>A <strong>name</strong> which uniquely identifies it, in this case <em>default</em>.</li>
-					<li>A <strong>class</strong> which specifies which appender class will be used to handle the 
+					<li>A <strong>class</strong> which specifies which appender class will be used to handle the
 					requests. Since we wish to log to a file, <code>LoggerAppenderFile</code> is used in this case.</li>
 					<li>A <strong>layout</strong> which transforms the logging events to string which can be logged.
-					A layout is required by most appenders, but some do not require it, such as the database appender. 
+					A layout is required by most appenders, but some do not require it, such as the database appender.
 					If a layout is not defined, the appenders will use a default layout.</li>
-					<li>Zero or more <strong>parameters</strong> which configure the appender 
+					<li>Zero or more <strong>parameters</strong> which configure the appender
 					behaviour. In this example, the <em>file</em> parameter governs the path to the file which will be
 					used for logging, and <em>append</em> defines that log messages should be appended to the file,
 					instead of truncating it.</li>
-				</ul>			
-				
+				</ul>
+
 			</subsection>
-			
+
 			<subsection name="Linking appenders to loggers">
-				
-				<p>A logger can be linked to one or more appenders. Also, multiple loggers can share the same 
+
+				<p>A logger can be linked to one or more appenders. Also, multiple loggers can share the same
 				appender.</p>
-				
+
 				<p>Consider the following configuration:</p>
-			
+
 <pre class="prettyprint linenums"><![CDATA[
 <log4php:configuration xmlns:log4php="http://logging.apache.org/log4php/">
     <appender name="primus" class="LoggerAppenderConsole" />
@@ -156,27 +152,27 @@
     </logger>
 </log4php:configuration>
 ]]></pre>
-			
+
 				<p>This configures two appenders, called <em>primus</em> and <em>secundus</em>, and two loggers named
-				<em>main</em> and <em>alternative</em>. The logger <em>main</em> is linked to <em>primus</em> and 
+				<em>main</em> and <em>alternative</em>. The logger <em>main</em> is linked to <em>primus</em> and
 				<em>secundus</em> and will therefore forward logging events to both of them. In other words,
 				it will log both to console and to a file. Logger <em>alternative</em> is only linked to appender
-				<em>primus</em> and will therefore only log to the console.</p>  
-			
+				<em>primus</em> and will therefore only log to the console.</p>
+
 			</subsection>
-			
-			
+
+
 			<subsection name="Appender threshold">
-			
+
 				<p>An appender can be assigned a threshold level. All logging requests with level lower than this threshold
 				will be ignored.</p>
-				
+
 				<p>For example, if you set <code>WARN</code> as a threshold, then <code>INFO</code>, <code>DEBUG</code>
 				and <code>TRACE</code> level events recieved by the appender will not be logged, but <code>WARN</code>,
 				<code>ERROR</code> and <code>FATAL</code> will.</p>
-				
+
 				<p>An example of setting an appender threshold:</p>
-				
+
 <pre class="prettyprint linenums"><![CDATA[
 <configuration xmlns="http://logging.apache.org/log4php/">
     <appender name="default" class="LoggerAppenderEcho" threshold="WARN" />
diff --git a/src/site/xdoc/docs/appenders/mail-event.xml b/src/site/xdoc/docs/appenders/mail-event.xml
deleted file mode 100644
index 768210f..0000000
--- a/src/site/xdoc/docs/appenders/mail-event.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>LoggerAppenderMailEvent</title>
-	</properties>
-
-	<body>
-		<section name="LoggerAppenderMailEvent">
-		
-			<p><code>LoggerAppenderMailEvent</code> appends individual log events via email.</p>
-			
-			<p>This appender is similar to <code><a href="mail.html">LoggerAppenderMail</a></code>, except that it 
-  			sends each each log event in an individual email message at the time when it occurs.</p>
-			
-		    <div class="alert alert-error">
-		        <span class="alert-heading">Deprecated!</span>
-		        <p>LoggerAppenderMailEvent is deprecated and will be removed in a future release. Please use 
-		        <a href="mail.html">LoggerAppenderMail</a> with <code>bufferSize</code> parameter set to 
-				<code>1</code> instead.</p>
-            </div>
-			
-			<subsection name="Layout">
-				<p>This appender requires a layout. If no layout is specified in configuration, 
-				<code><a href="../layouts/simple.html">LoggerLayoutSimple</a></code> will be used by default.</p>
-			</subsection>
-			
-			<subsection name="Parameters">
-				<p>The following parameters are available:</p>
-		
-				<table>
-					<thead>
-						<tr>
-							<th>Parameter</th>
-							<th>Type</th>
-							<th>Required</th>
-							<th>Default</th>
-							<th>Description</th>
-						</tr>
-					</thead>
-					<tbody>
-						<tr>
-							<td>to</td>
-							<td>string</td>
-							<td><strong>Yes</strong></td>
-							<td>-</td>
-							<td>Email address(es) to which the log will be sent. Multiple email addresses may be specified
-							by separating them with a comma.</td>
-						</tr>
-						<tr>
-							<td>from</td>
-							<td>string</td>
-							<td><strong>Yes</strong></td>
-							<td>-</td>
-							<td>Email address which will be used in the From field.</td>
-						</tr>
-						<tr>
-							<td>subject</td>
-							<td>string</td>
-							<td>No</td>
-							<td>Log4php Report</td>
-							<td>Subject of the email message.</td>
-						</tr>
-						<tr>
-							<td>smtpHost</td>
-							<td>string</td>
-							<td>No</td>
-							<td>ini_get('SMTP')</td>
-							<td>Used to override the SMTP server. <strong>Only works on Windows.</strong></td>
-						</tr>
-						<tr>
-							<td>port</td>
-							<td>integer</td>
-							<td>No</td>
-							<td>25</td>
-							<td>Used to override the default SMTP server port. <strong>Only works on Windows.</strong></td>
-						</tr>
-					</tbody>
-				</table>
-			</subsection>
-				
-			<subsection name="Examples">
-				
-				<p>This example shows how to configure <code>LoggerAppenderMailEvent</code> to send the log to two email 
-				addresses.</p>
-				
-				<div class="auto-tabs">
-					<ul>
-						<li>XML</li>
-						<li>PHP</li>
-					</ul>
- 
-					<div class="tab-content" >
-						<div class="tab-pane">
-<pre class="prettyprint"><![CDATA[
-<configuration xmlns="http://logging.apache.org/log4php/">
-    <appender name="default" class="LoggerAppenderMailEvent">
-        <layout class="LoggerLayoutSimple" />
-        <param name="to" value="foo@example.com,baz@example.com" />
-        <param name="from" value="logger@example.com" />
-    </appender>
-    <root>
-        <appender_ref ref="default" />
-    </root>
-</configuration>
-]]></pre>
-						</div>
-						<div class="tab-pane">
-<pre class="prettyprint"><![CDATA[
-array(
-    'appenders' => array(
-        'default' => array(
-            'class' => 'LoggerAppenderMailEvent',
-            'layout' => array(
-                'class' => 'LoggerLayoutSimple',
-            ),
-            'params' => array(
-                'to' => 'foo@example.com,baz@example.com',
-                'from' => 'logger@example.com'
-            ),
-        ),
-    ),
-    'rootLogger' => array(
-        'appenders' => array('default'),
-    ),
-);
-]]></pre>
-						</div>
-					</div>
-				</div>
-				
-			</subsection>
-		</section>
-	</body>
-</document>
diff --git a/src/test/php/appenders/LoggerAppenderMailEventTest.php b/src/test/php/appenders/LoggerAppenderMailEventTest.php
deleted file mode 100644
index 10ecd80..0000000
--- a/src/test/php/appenders/LoggerAppenderMailEventTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * 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.
- * 
- * @category   tests   
- * @package    log4php
- * @subpackage appenders
- * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
- * @link       http://logging.apache.org/log4php
- */
-
-/**
- * @group appenders
- */
-class LoggerAppenderMailEventTest extends PHPUnit_Framework_TestCase {
-	
-	public function testRequiresLayout() {
-		$appender = new LoggerAppenderMailEvent();
-		self::assertTrue($appender->requiresLayout());
-	}
-
-	/**
-	 * @expectedException PHPUnit_Framework_Error
-	 * @expectedExceptionMessage LoggerAppenderMailEvent is deprecated and will be removed in a future release.Please use LoggerAppenderMail instead.
-	 */
-	public function checkDeprecationWarning() {
-		$appender = new LoggerAppenderMailEvent("myname");
-		$appender->setTo('test@example.com');
-		$appender->setFrom('Testsender');
-		$appender->activateOptions();
-	}
-
-	public function testMail() {
-		$appender = new LoggerAppenderMailEvent("myname");
-		
-		$layout = new LoggerLayoutSimple();
-		$appender->setLayout($layout);
-		$appender->setDry(true);
-		$appender->setTo('test@example.com');
-		$appender->setFrom('Testsender');
-		
-		@$appender->activateOptions(); // Mute deprecation warning.
-		$event = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage");
-		 
-		ob_start();
-		$appender->append($event);
-		$v = ob_get_contents();
-		ob_end_clean();
-
-		$e = "DRY MODE OF MAIL APP.: Send mail to: test@example.com with additional headers 'From: Testsender' and content: ERROR - testmessage".PHP_EOL;
-		self::assertEquals($e, $v);
-		$appender->close();
-	}
-
-	/** 
-	 * Check an error is reported if 'to' is not set.
-	 * @expectedException PHPUnit_Framework_Error
-	 * @expectedExceptionMessage Required parameter 'to' not set.
-	 */
-	public function testEmptyTo() {
-		$appender = new LoggerAppenderMailEvent("myname");
-		$appender->setLayout(new LoggerLayoutSimple());
-		$appender->setFrom('info@example.com');
-		$appender->activateOptions();
-	}
-	
-	/**
-	 * Check an error is reported if 'from' is not set.
-	 * @expectedException PHPUnit_Framework_Error
-	 * @expectedExceptionMessage Required parameter 'from' not set.
-	 */
-	public function testEmptyFrom() {
-		$appender = new LoggerAppenderMailEvent("myname");
-		$appender->setLayout(new LoggerLayoutSimple());
-		$appender->setTo('info@example.com');
-		$appender->activateOptions();
-	}
-}
