library/log4php/appenders/LoggerAppenderMail.php
changeset 46 f11c31f7fa3e
parent 45 a56e7f9a0463
child 47 03388ec805b4
equal deleted inserted replaced
45:a56e7f9a0463 46:f11c31f7fa3e
     1 <?php
       
     2 /**
       
     3  * Licensed to the Apache Software Foundation (ASF) under one or more
       
     4  * contributor license agreements. See the NOTICE file distributed with
       
     5  * this work for additional information regarding copyright ownership.
       
     6  * The ASF licenses this file to You under the Apache License, Version 2.0
       
     7  * (the "License"); you may not use this file except in compliance with
       
     8  * the License. You may obtain a copy of the License at
       
     9  *
       
    10  *       http://www.apache.org/licenses/LICENSE-2.0
       
    11  *
       
    12  * Unless required by applicable law or agreed to in writing, software
       
    13  * distributed under the License is distributed on an "AS IS" BASIS,
       
    14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       
    15  * See the License for the specific language governing permissions and
       
    16  * limitations under the License.
       
    17  */
       
    18 
       
    19 /**
       
    20  * LoggerAppenderMail appends log events via email.
       
    21  *
       
    22  * This appender does not send individual emails for each logging requests but
       
    23  * will collect them in a buffer and send them all in a single email once the
       
    24  * appender is closed (i.e. when the script exists). Because of this, it may
       
    25  * not appropriate for long running scripts, in which case
       
    26  * LoggerAppenderMailEvent might be a better choice.
       
    27  *
       
    28  * This appender uses a layout.
       
    29  *
       
    30  * ## Configurable parameters: ##
       
    31  *
       
    32  * - **to** - Email address(es) to which the log will be sent. Multiple email
       
    33  *     addresses may be specified by separating them with a comma.
       
    34  * - **from** - Email address which will be used in the From field.
       
    35  * - **subject** - Subject of the email message.
       
    36  *
       
    37  * @version $Revision: 1337820 $
       
    38  * @package log4php
       
    39  * @subpackage appenders
       
    40  * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
       
    41  * @link http://logging.apache.org/log4php/docs/appenders/mail.html Appender documentation
       
    42  */
       
    43 class LoggerAppenderMail extends LoggerAppender {
       
    44 
       
    45     /**
       
    46      * Email address to put in From field of the email.
       
    47      * @var string
       
    48      */
       
    49     protected $from = null;
       
    50 
       
    51     /**
       
    52      * The subject of the email.
       
    53      * @var string
       
    54      */
       
    55     protected $subject = 'Log4php Report';
       
    56 
       
    57     /**
       
    58      * One or more comma separated email addresses to which to send the email.
       
    59      * @var string
       
    60      */
       
    61     protected $to = null;
       
    62 
       
    63     /**
       
    64      * Indiciates whether this appender should run in dry mode.
       
    65      * @deprecated
       
    66      * @var boolean
       
    67      */
       
    68     protected $dry = false;
       
    69 
       
    70     /**
       
    71      * Buffer which holds the email contents before it is sent.
       
    72      * @var string
       
    73      */
       
    74     protected $body = '';
       
    75 
       
    76     public function append(LoggerLoggingEvent $event) {
       
    77         if ($this->layout !== null) {
       
    78             $this->body .= $this->layout->format($event);
       
    79         }
       
    80     }
       
    81 
       
    82     public function close() {
       
    83         if ($this->closed != true) {
       
    84             $from = $this->from;
       
    85             $to = $this->to;
       
    86 
       
    87             if (!empty($this->body) and $from !== null and $to !== null and $this->layout !== null) {
       
    88                 $subject = $this->subject;
       
    89                 if (!$this->dry) {
       
    90                     mail(
       
    91                         $to, $subject,
       
    92                         $this->layout->getHeader() . $this->body . $this->layout->getFooter(),
       
    93                         "From: {$from}\r\n");
       
    94                 } else {
       
    95                     echo "DRY MODE OF MAIL APP.: Send mail to: " . $to . " with content: " . $this->body;
       
    96                 }
       
    97             }
       
    98             $this->closed = true;
       
    99         }
       
   100     }
       
   101 
       
   102     /** Sets the 'subject' parameter. */
       
   103     public function setSubject($subject) {
       
   104         $this->setString('subject', $subject);
       
   105     }
       
   106 
       
   107     /** Returns the 'subject' parameter. */
       
   108     public function getSubject() {
       
   109         return $this->subject;
       
   110     }
       
   111 
       
   112     /** Sets the 'to' parameter. */
       
   113     public function setTo($to) {
       
   114         $this->setString('to', $to);
       
   115     }
       
   116 
       
   117     /** Returns the 'to' parameter. */
       
   118     public function getTo() {
       
   119         return $this->to;
       
   120     }
       
   121 
       
   122     /** Sets the 'from' parameter. */
       
   123     public function setFrom($from) {
       
   124         $this->setString('from', $from);
       
   125     }
       
   126 
       
   127     /** Returns the 'from' parameter. */
       
   128     public function getFrom() {
       
   129         return $this->from;
       
   130     }
       
   131 
       
   132     /** Enables or disables dry mode. */
       
   133     public function setDry($dry) {
       
   134         $this->setBoolean('dry', $dry);
       
   135     }
       
   136 }