Root/
<?php /* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* # ***** BEGIN LICENSE BLOCK ***** # This file is part of Plume Framework, a simple PHP Application Framework. # Copyright (C) 2001-2007 Loic d'Anterroches and contributors. # # Plume Framework is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Plume Framework is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # ***** END LICENSE BLOCK ***** */ /** * Generate and send multipart emails. * * This class is just a small wrapper around the PEAR packages Mail * and Mail/mime. * * Class to easily generate multipart emails. It supports embedded * images within the email. It can be used to send a text with * possible attachments. * * The encoding of the message is utf-8 by default. * * Usage example: * <code> * $email = new Pluf_Mail('from_email@example.com', 'to_email@example.com', * 'Subject of the message'); * $img_id = $email->addAttachment('/var/www/html/img/pic.jpg', 'image/jpg'); * $email->addTextMessage('Hello world!'); * $email->addHtmlMessage('<html><body>Hello world!</body></html>'); * $email->sendMail(); * </code> * * The configuration parameters are the one for Mail::factory with the * 'mail_' prefix not to conflict with the other parameters. * * * 'mail_backend' - 'mail', 'smtp' or 'sendmail' (default 'mail'). * * List of parameter for the backends: * * mail backend * -------------- * * If safe mode is disabled, an array with all the 'mail_*' parameters * excluding 'mail_backend' will be passed as the fifth argument to * the PHP mail() function. The elements will be joined as a * space-delimited string. * * sendmail backend * ------------------ * * 'mail_sendmail_path' - The location of the sendmail program on the * filesystem. Default is /usr/bin/sendmail * 'sendmail_args' - Additional parameters to pass to the * sendmail. Default is -i * * smtp backend * -------------- * * 'mail_host' - The server to connect. Default is localhost * 'mail_port' - The port to connect. Default is 25 * 'mail_auth' - Whether or not to use SMTP authentication. Default is * FALSE * * 'mail_username' - The username to use for SMTP authentication. * 'mail_password' - The password to use for SMTP authentication. * 'mail_localhost' - The value to give when sending EHLO or * HELO. Default is localhost * 'mail_timeout' - The SMTP connection timeout. Default is NULL (no * timeout) * 'mail_verp' - Whether to use VERP or not. Default is FALSE * 'mail_debug' - Whether to enable SMTP debug mode or not. Default is * FALSE * 'mail_persist' - Indicates whether or not the SMTP connection * should persist over multiple calls to the send() * method. * * If you are doing some testing, you should use the smtp backend * together with fakemail: http://www.lastcraft.com/fakemail.php */ class Pluf_Mail { public $headers = array (); public $message ; public $encoding = 'utf-8' ; public $to_address = '' ; /** * Construct the base email. * * @param string The email of the sender. * @param string The destination email. * @param string The subject of the message. * @param string Encoding of the message ('UTF-8') * @param string End of line type ("\n") */ function __construct( $src , $dest , $subject , $encoding = 'UTF-8' , $crlf = "\n" ) { // Note that the Pluf autoloader will correctly load this PEAR // object. $this ->message = new Mail_mime( $crlf ); $this ->message->_build_params[ 'html_charset' ] = $encoding ; $this ->message->_build_params[ 'text_charset' ] = $encoding ; $this ->message->_build_params[ 'head_charset' ] = $encoding ; $this ->to_address = $dest ; $this ->headers = array ( 'From' => $src , 'To' => $dest , 'Subject' => $subject ); } /** * Add the base plain text message to the email. * * @param string The message */ function addTextMessage( $msg ) { $this ->message->setTXTBody( $msg ); } /** * Set the return path for the email. * * @param string Email */ function setReturnPath( $email ) { $this ->headers[ 'Return-Path' ] = $email ; } /** * Add headers to an email. * * @param array Array of headers */ function addHeaders( $hdrs ) { $this ->headers = array_merge ( $this ->headers, $hdrs ); } /** * Add the alternate HTML message to the email. * * @param string The HTML message */ function addHtmlMessage( $msg ) { $this ->message->setHTMLBody( $msg ); } /** * Add an attachment to the message. * * The file to attach must be available on disk and you need to * provide the mimetype of the attachment manually. * * @param string Path to the file to be added. * @param string Mimetype of the file to be added ('text/plain'). * @return bool True. */ function addAttachment( $file , $ctype = 'text/plain' ) { $this ->message->addAttachment( $file , $ctype ); } /** * Effectively sends the email. */ function sendMail() { $body = $this ->message->get(); $hdrs = $this ->message->headers( $this ->headers); $params = Pluf::pf( 'mail_' , true); // strip the prefix 'mail_' unset( $params [ 'backend' ]); $gmail = new Mail(); $mail = $gmail ->factory(Pluf::f( 'mail_backend' , 'mail' ), $params ); if (Pluf::f( 'send_emails' , true)) { $mail ->send( $this ->to_address, $hdrs , $body ); } if (defined( 'IN_UNIT_TESTS' )) { $GLOBALS [ '_PX_UNIT_TESTS' ][ 'emails' ][] = array ( $this ->to_address, $hdrs , $body ); } } } |