[ Index ]
 

Code source de XOOPS 2.0.17.1

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/htdocs/class/ -> xoopsmailer.php (source)

   1  <?php
   2  // $Id: xoopsmailer.php 797 2006-11-08 02:21:38Z skalpa $

   3  //  ------------------------------------------------------------------------ //

   4  //                XOOPS - PHP Content Management System                      //

   5  //                    Copyright (c) 2000 XOOPS.org                           //

   6  //                       <http://www.xoops.org/>                             //

   7  //  ------------------------------------------------------------------------ //

   8  //  This program is free software; you can redistribute it and/or modify     //

   9  //  it under the terms of the GNU General Public License as published by     //

  10  //  the Free Software Foundation; either version 2 of the License, or        //

  11  //  (at your option) any later version.                                      //

  12  //                                                                           //

  13  //  You may not change or alter any portion of this comment or credits       //

  14  //  of supporting developers from this source code or any supporting         //

  15  //  source code which is considered copyrighted (c) material of the          //

  16  //  original comment or credit authors.                                      //

  17  //                                                                           //

  18  //  This program is distributed in the hope that it will be useful,          //

  19  //  but WITHOUT ANY WARRANTY; without even the implied warranty of           //

  20  //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            //

  21  //  GNU General Public License for more details.                             //

  22  //                                                                           //

  23  //  You should have received a copy of the GNU General Public License        //

  24  //  along with this program; if not, write to the Free Software              //

  25  //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA //

  26  //  ------------------------------------------------------------------------ //

  27  // Author: Kazumi Ono (AKA onokazu)                                          //

  28  // URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ //

  29  // Project: The XOOPS Project                                                //

  30  // ------------------------------------------------------------------------- //

  31  if (!defined("XOOPS_ROOT_PATH")) {
  32      die("XOOPS root path not defined");
  33  }
  34  if (isset($GLOBALS['xoopsConfig']['language']) && file_exists(XOOPS_ROOT_PATH.'/language/'.$GLOBALS['xoopsConfig']['language'].'/mail.php')) {
  35      include_once XOOPS_ROOT_PATH.'/language/'.$GLOBALS['xoopsConfig']['language'].'/mail.php';
  36  } else {
  37      include_once XOOPS_ROOT_PATH.'/language/english/mail.php';
  38  }
  39  
  40  /**

  41   * The new Multimailer class that will carry out the actual sending and will later replace this class. 

  42   * If you're writing new code, please use that class instead.

  43   */
  44  include_once(XOOPS_ROOT_PATH."/class/mail/xoopsmultimailer.php");
  45  
  46  
  47  /**

  48   * Class for sending mail.

  49   *

  50   * Changed to use the facilities of  {@link XoopsMultiMailer}

  51   *

  52   * @deprecated    use {@link XoopsMultiMailer} instead.

  53   *

  54   * @package        class

  55   * @subpackage    mail

  56   *

  57   * @author        Kazumi Ono    <onokazu@xoops.org>

  58   * @copyright    (c) 2000-2003 The Xoops Project - www.xoops.org

  59   */
  60  class XoopsMailer
  61  {
  62      /**

  63       * reference to a {@link XoopsMultiMailer}

  64       *

  65       * @var        XoopsMultiMailer

  66       * @access    private

  67       * @since    21.02.2003 14:14:13

  68       */
  69      var $multimailer;
  70  
  71      // sender email address

  72      // private

  73      var $fromEmail;
  74  
  75      // sender name

  76      // private

  77      var $fromName;
  78  
  79      // RMV-NOTIFY

  80      // sender UID

  81      // private

  82      var $fromUser;
  83  
  84      // array of user class objects

  85      // private

  86      var $toUsers;
  87  
  88      // array of email addresses

  89      // private

  90      var $toEmails;
  91  
  92      // custom headers

  93      // private

  94      var $headers;
  95  
  96      // subjet of mail

  97      // private

  98      var $subject;
  99  
 100      // body of mail

 101      // private

 102      var $body;
 103  
 104      // error messages

 105      // private

 106      var $errors;
 107  
 108      // messages upon success

 109      // private

 110      var $success;
 111  
 112      // private

 113      var $isMail;
 114  
 115      // private

 116      var $isPM;
 117  
 118      // private

 119      var $assignedTags;
 120  
 121      // private

 122      var $template;
 123  
 124      // private

 125      var $templatedir;
 126  
 127      // protected

 128      var $charSet = 'iso-8859-1';
 129  
 130      // protected

 131      var $encoding = '8bit';
 132  
 133  	function XoopsMailer()
 134      {
 135  
 136          $this->multimailer = new XoopsMultiMailer();
 137          $this->reset();
 138      }
 139  
 140      // public

 141      // reset all properties to default

 142  	function reset()
 143      {
 144          $this->fromEmail = "";
 145          $this->fromName = "";
 146          $this->fromUser = null; // RMV-NOTIFY

 147          $this->priority = '';
 148          $this->toUsers = array();
 149          $this->toEmails = array();
 150          $this->headers = array();
 151          $this->subject = "";
 152          $this->body = "";
 153          $this->errors = array();
 154          $this->success = array();
 155          $this->isMail = false;
 156          $this->isPM = false;
 157          $this->assignedTags = array();
 158          $this->template = "";
 159          $this->templatedir = "";
 160          // Change below to \r\n if you have problem sending mail

 161          $this->LE ="\n";
 162      }
 163  
 164      // public

 165  	function setTemplateDir($value)
 166      {
 167          if ( substr($value, -1, 1) != "/" ) {
 168              $value .= "/";
 169          }
 170          $this->templatedir = $value;
 171      }
 172  
 173      // public

 174  	function setTemplate($value)
 175      {
 176          $this->template = $value;
 177      }
 178  
 179      // pupblic

 180  	function setFromEmail($value)
 181      {
 182          $this->fromEmail = trim($value);
 183      }
 184  
 185      // public

 186  	function setFromName($value)
 187      {
 188          $this->fromName = trim($value);
 189      }
 190  
 191      // RMV-NOTIFY

 192      // public

 193  	function setFromUser(&$user)
 194      {
 195          if ( strtolower(get_class($user)) == "xoopsuser" ) {
 196              $this->fromUser =& $user;
 197          }
 198      }
 199  
 200      // public

 201  	function setPriority($value)
 202      {
 203          $this->priority = trim($value);
 204      }
 205  
 206  
 207      // public

 208  	function setSubject($value)
 209      {
 210          $this->subject = trim($value);
 211      }
 212  
 213      // public

 214  	function setBody($value)
 215      {
 216          $this->body = trim($value);
 217      }
 218  
 219      // public

 220  	function useMail()
 221      {
 222          $this->isMail = true;
 223      }
 224  
 225      // public

 226  	function usePM()
 227      {
 228          $this->isPM = true;
 229      }
 230  
 231      // public

 232  	function send($debug = false)
 233      {
 234          global $xoopsConfig;
 235          if ( $this->body == "" && $this->template == "" ) {
 236              if ($debug) {
 237                  $this->errors[] = _MAIL_MSGBODY;
 238              }
 239              return false;
 240          } elseif ( $this->template != "" ) {
 241              $path = ( $this->templatedir != "" ) ? $this->templatedir."".$this->template : (XOOPS_ROOT_PATH."/language/".$xoopsConfig['language']."/mail_template/".$this->template);
 242              if ( !($fd = @fopen($path, 'r')) ) {
 243                  if ($debug) {
 244                      $this->errors[] = _MAIL_FAILOPTPL;
 245                  }
 246                          return false;
 247                  }
 248              $this->setBody(fread($fd, filesize($path)));
 249          }
 250  
 251          // for sending mail only

 252          if ( $this->isMail  || !empty($this->toEmails) ) {
 253              if (!empty($this->priority)) {
 254                  $this->headers[] = "X-Priority: " . $this->priority;
 255              }
 256              //$this->headers[] = "X-Mailer: PHP/".phpversion();

 257              //$this->headers[] = "Return-Path: ".$this->fromEmail;

 258              $headers = join($this->LE, $this->headers);
 259          }
 260  
 261  // TODO: we should have an option of no-reply for private messages and emails

 262  // to which we do not accept replies.  e.g. the site admin doesn't want a

 263  // a lot of message from people trying to unsubscribe.  Just make sure to

 264  // give good instructions in the message.

 265  
 266          // add some standard tags (user-dependent tags are included later)

 267          global $xoopsConfig;
 268          $this->assign ('X_ADMINMAIL', $xoopsConfig['adminmail']);
 269          $this->assign ('X_SITENAME', $xoopsConfig['sitename']);
 270          $this->assign ('X_SITEURL', XOOPS_URL);
 271          // TODO: also X_ADMINNAME??

 272          // TODO: X_SIGNATURE, X_DISCLAIMER ?? - these are probably best

 273          //  done as includes if mail templates ever get this sophisticated

 274  
 275          // replace tags with actual values

 276          foreach ( $this->assignedTags as $k => $v ) {
 277              $this->body = str_replace("{".$k."}", $v, $this->body);
 278              $this->subject = str_replace("{".$k."}", $v, $this->subject);
 279          }
 280          $this->body = str_replace("\r\n", "\n", $this->body);
 281          $this->body = str_replace("\r", "\n", $this->body);
 282          $this->body = str_replace("\n", $this->LE, $this->body);
 283  
 284          // send mail to specified mail addresses, if any

 285          foreach ( $this->toEmails as $mailaddr ) {
 286              if ( !$this->sendMail($mailaddr, $this->subject, $this->body, $headers) ) {
 287                  if ($debug) {
 288                      $this->errors[] = sprintf(_MAIL_SENDMAILNG, $mailaddr);
 289                  }
 290              } else {
 291                  if ($debug) {
 292                      $this->success[] = sprintf(_MAIL_MAILGOOD, $mailaddr);
 293                  }
 294              }
 295          }
 296  
 297          // send message to specified users, if any

 298  
 299          // NOTE: we don't send to LIST of recipients, because the tags

 300          // below are dependent on the user identity; i.e. each user

 301          // receives (potentially) a different message

 302  
 303          foreach ( $this->toUsers as $user ) {
 304              // set some user specific variables

 305              $subject = str_replace("{X_UNAME}", $user->getVar("uname"), $this->subject );
 306              $text = str_replace("{X_UID}", $user->getVar("uid"), $this->body );
 307              $text = str_replace("{X_UEMAIL}", $user->getVar("email"), $text );
 308              $text = str_replace("{X_UNAME}", $user->getVar("uname"), $text );
 309              $text = str_replace("{X_UACTLINK}", XOOPS_URL."/user.php?op=actv&id=".$user->getVar("uid")."&actkey=".$user->getVar('actkey'), $text );
 310              // send mail

 311              if ( $this->isMail ) {
 312                  if ( !$this->sendMail($user->getVar("email"), $subject, $text, $headers) ) {
 313                      if ($debug) {
 314                          $this->errors[] = sprintf(_MAIL_SENDMAILNG, $user->getVar("uname"));
 315                      }
 316                  } else {
 317                      if ($debug) {
 318                          $this->success[] = sprintf(_MAIL_MAILGOOD, $user->getVar("uname"));
 319                      }
 320                  }
 321              }
 322              // send private message

 323              if ( $this->isPM ) {
 324                  if ( !$this->sendPM($user->getVar("uid"), $subject, $text) ) {
 325                      if ($debug) {
 326                          $this->errors[] = sprintf(_MAIL_SENDPMNG, $user->getVar("uname"));
 327                      }
 328                  } else {
 329                      if ($debug) {
 330                          $this->success[] = sprintf(_MAIL_PMGOOD, $user->getVar("uname"));
 331                      }
 332                  }
 333              }
 334              flush();
 335          }
 336          if ( count($this->errors) > 0 ) {
 337              return false;
 338          }
 339          return true;
 340      }
 341  
 342      // private

 343  	function sendPM($uid, $subject, $body)
 344      {
 345          global $xoopsUser;
 346          $pm_handler =& xoops_gethandler('privmessage');
 347          $pm =& $pm_handler->create();
 348          $pm->setVar("subject", $subject);
 349          // RMV-NOTIFY

 350          $pm->setVar('from_userid', !empty($this->fromUser) ? $this->fromUser->getVar('uid') : $xoopsUser->getVar('uid'));
 351          $pm->setVar("msg_text", $body);
 352          $pm->setVar("to_userid", $uid);
 353          if (!$pm_handler->insert($pm)) {
 354              return false;
 355          }
 356          return true;
 357      }
 358  
 359      /**

 360       * Send email

 361       *

 362       * Uses the new XoopsMultiMailer

 363       *

 364       * @param    string

 365       * @param    string

 366       * @param    string

 367       * @return    boolean    FALSE on error.

 368       */
 369  
 370  	function sendMail($email, $subject, $body, $headers)
 371      {
 372          $subject = $this->encodeSubject($subject);
 373          $this->encodeBody($body);
 374          $this->multimailer->ClearAllRecipients();
 375          $this->multimailer->AddAddress($email);
 376          $this->multimailer->Subject = $subject;
 377          $this->multimailer->Body = $body;
 378          $this->multimailer->CharSet = $this->charSet;
 379          $this->multimailer->Encoding = $this->encoding;
 380          if (!empty($this->fromName)) {
 381              $this->multimailer->FromName = $this->encodeFromName($this->fromName);
 382          }
 383          if (!empty($this->fromEmail)) {
 384              $this->multimailer->Sender = $this->multimailer->From = $this->fromEmail;
 385          }
 386          
 387          $this->multimailer->ClearCustomHeaders();
 388          foreach ($this->headers as $header) {
 389              $this->multimailer->AddCustomHeader($header);
 390          }
 391          if (!$this->multimailer->Send()) {
 392              $this->errors[] = $this->multimailer->ErrorInfo;
 393              return FALSE;
 394          }
 395          return TRUE;
 396      }
 397  
 398      // public

 399  	function getErrors($ashtml = true)
 400      {
 401          if ( !$ashtml ) {
 402              return $this->errors;
 403          } else {
 404              if ( !empty($this->errors) ) {
 405                  $ret = "<h4>"._ERRORS."</h4>";
 406                  foreach ( $this->errors as $error ) {
 407                      $ret .= $error."<br />";
 408                  }
 409              } else {
 410                  $ret = "";
 411              }
 412              return $ret;
 413          }
 414      }
 415  
 416      // public

 417  	function getSuccess($ashtml = true)
 418      {
 419          if ( !$ashtml ) {
 420              return $this->success;
 421          } else {
 422              $ret = "";
 423              if ( !empty($this->success) ) {
 424                  foreach ( $this->success as $suc ) {
 425                      $ret .= $suc."<br />";
 426                  }
 427              }
 428              return $ret;
 429          }
 430      }
 431  
 432      // public

 433  	function assign($tag, $value=null)
 434      {
 435          if ( is_array($tag) ) {
 436              foreach ( $tag as $k => $v ) {
 437                  $this->assign($k, $v);
 438              }
 439          } else {
 440              if ( !empty($tag) && isset($value) ) {
 441                  $tag = strtoupper(trim($tag));
 442  // RMV-NOTIFY

 443  // TEMPORARY FIXME: until the X_tags are all in here

 444  //                if ( substr($tag, 0, 2) != "X_" ) {

 445                      $this->assignedTags[$tag] = $value;
 446  //                }

 447              }
 448          }
 449      }
 450  
 451      // public

 452  	function addHeaders($value)
 453      {
 454          $this->headers[] = trim($value).$this->LE;
 455      }
 456  
 457      // public

 458  	function setToEmails($email)
 459      {
 460          if ( !is_array($email) ) {
 461              if (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$/i",$email) ) {
 462                  array_push($this->toEmails, $email);
 463              }
 464          } else {
 465              foreach ( $email as $e) {
 466                  $this->setToEmails($e);
 467              }
 468          }
 469      }
 470  
 471      // public

 472  	function setToUsers(&$user)
 473      {
 474          if ( !is_array($user) ) {
 475              if ( strtolower(get_class($user)) == "xoopsuser" ) {
 476                  array_push($this->toUsers, $user);
 477              }
 478          } else {
 479              foreach ( $user as $u) {
 480                  $this->setToUsers($u);
 481              }
 482          }
 483      }
 484  
 485      // public

 486  	function setToGroups($group)
 487      {
 488          if ( !is_array($group) ) {
 489              if ( strtolower(get_class($group)) == "xoopsgroup" ) {
 490                  $member_handler =& xoops_gethandler('member');
 491                  $this->setToUsers($member_handler->getUsersByGroup($group->getVar('groupid'), true));
 492              }
 493          } else {
 494              foreach ($group as $g) {
 495                  $this->setToGroups($g);
 496              }
 497          }
 498      }
 499  
 500      // abstract

 501      // to be overidden by lang specific mail class, if needed

 502  	function encodeFromName($text)
 503      {
 504          return $text;
 505      }
 506  
 507      // abstract

 508      // to be overidden by lang specific mail class, if needed

 509  	function encodeSubject($text)
 510      {
 511          return $text;
 512      }
 513  
 514      // abstract

 515      // to be overidden by lang specific mail class, if needed

 516  	function encodeBody(&$text)
 517      {
 518  
 519      }
 520  }
 521  ?>


Généré le : Sun Nov 25 11:44:32 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics