0byt3m1n1
Path:
/
data
/
applications
/
aps
/
xoops
/
2.3.2b-6
/
standard
/
htdocs
/
class
/
[
Home
]
File: xoopsmailer.php
<?php // $Id: xoopsmailer.php 2533 2008-11-28 10:43:10Z phppp $ // ------------------------------------------------------------------------ // // XOOPS - PHP Content Management System // // Copyright (c) 2000 XOOPS.org // // <http://www.xoops.org/> // // ------------------------------------------------------------------------ // // This program is free software; you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // // the Free Software Foundation; either version 2 of the License, or // // (at your option) any later version. // // // // You may not change or alter any portion of this comment or credits // // of supporting developers from this source code or any supporting // // source code which is considered copyrighted (c) material of the // // original comment or credit authors. // // // // This program 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 General Public License for more details. // // // // You should have received a copy of the GNU General Public License // // along with this program; if not, write to the Free Software // // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // ------------------------------------------------------------------------ // // Author: Kazumi Ono (AKA onokazu) // // URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ // // Project: The XOOPS Project // // ------------------------------------------------------------------------- // if (!defined("XOOPS_ROOT_PATH")) { die("XOOPS root path not defined"); } if (isset($GLOBALS['xoopsConfig']['language']) && file_exists(XOOPS_ROOT_PATH.'/language/'.$GLOBALS['xoopsConfig']['language'].'/mail.php')) { include_once XOOPS_ROOT_PATH . '/language/' . $GLOBALS['xoopsConfig']['language'] . '/mail.php'; } else { include_once XOOPS_ROOT_PATH . '/language/english/mail.php'; } /** * The new Multimailer class that will carry out the actual sending and will later replace this class. * If you're writing new code, please use that class instead. */ include_once XOOPS_ROOT_PATH."/class/mail/xoopsmultimailer.php"; /** * Class for sending mail. * * Changed to use the facilities of {@link XoopsMultiMailer} * * @deprecated use {@link XoopsMultiMailer} instead. * * @package class * @subpackage mail * * @author Kazumi Ono <onokazu@xoops.org> * @copyright (c) 2000-2003 The Xoops Project - www.xoops.org */ class XoopsMailer { /** * reference to a {@link XoopsMultiMailer} * * @var XoopsMultiMailer * @access private * @since 21.02.2003 14:14:13 */ var $multimailer; // sender email address // private var $fromEmail; // sender name // private var $fromName; // RMV-NOTIFY // sender UID // private var $fromUser; // array of user class objects // private var $toUsers; // array of email addresses // private var $toEmails; // custom headers // private var $headers; // subjet of mail // private var $subject; // body of mail // private var $body; // error messages // private var $errors; // messages upon success // private var $success; // private var $isMail; // private var $isPM; // private var $assignedTags; // private var $template; // private var $templatedir; // protected var $charSet = 'iso-8859-1'; // protected var $encoding = '8bit'; function XoopsMailer() { $this->multimailer = new XoopsMultiMailer(); $this->reset(); } // public // reset all properties to default function reset() { $this->fromEmail = ""; $this->fromName = ""; $this->fromUser = null; // RMV-NOTIFY $this->priority = ''; $this->toUsers = array(); $this->toEmails = array(); $this->headers = array(); $this->subject = ""; $this->body = ""; $this->errors = array(); $this->success = array(); $this->isMail = false; $this->isPM = false; $this->assignedTags = array(); $this->template = ""; $this->templatedir = ""; // Change below to \r\n if you have problem sending mail $this->LE ="\n"; } // public function setTemplateDir($value = null) { if ($value === null && is_object($GLOBALS['xoopsModule'])) { $value = $GLOBALS['xoopsModule']->getVar('dirname', 'n'); } else { $value = str_replace( DIRECTORY_SEPARATOR, "/", $value ); } $this->templatedir = $value; } // private function getTemplatePath() { if (!$path = $this->templatedir) { $path = XOOPS_ROOT_PATH . "/language/"; } elseif ( false === strpos($path, '/') ) { $path = XOOPS_ROOT_PATH . "/modules/" . $path . "/languages/"; } elseif ( substr($path, -1, 1) != "/" ) { $path .= "/"; } if (file_exists($path . $GLOBALS['xoopsConfig']['language'] . "/mail_template/" . $this->template) ) { return $path . $GLOBALS['xoopsConfig']['language'] . "/mail_template/" . $this->template; } elseif (file_exists($path . "english/mail_template/" . $this->template) ) { return $path . "english/mail_template/" . $this->template; } elseif (file_exists($path . $this->template) ) { return $path . $this->template; } else { return false; } } // public function setTemplate($value) { $this->template = $value; } // pupblic function setFromEmail($value) { $this->fromEmail = trim($value); } // public function setFromName($value) { $this->fromName = trim($value); } // RMV-NOTIFY // public function setFromUser(&$user) { if ( strtolower(get_class($user)) == "xoopsuser" ) { $this->fromUser =& $user; } } // public function setPriority($value) { $this->priority = trim($value); } // public function setSubject($value) { $this->subject = trim($value); } // public function setBody($value) { $this->body = trim($value); } // public function useMail() { $this->isMail = true; } // public function usePM() { $this->isPM = true; } // public function send($debug = false) { global $xoopsConfig; if ( $this->body == "" && $this->template == "" ) { if ($debug) { $this->errors[] = _MAIL_MSGBODY; } return false; } elseif ( $this->template != "" ) { $path = $this->getTemplatePath(); if ( !($fd = @fopen($path, 'r')) ) { if ($debug) { $this->errors[] = _MAIL_FAILOPTPL; } return false; } $this->setBody(fread($fd, filesize($path))); } // for sending mail only if ( $this->isMail || !empty($this->toEmails) ) { if (!empty($this->priority)) { $this->headers[] = "X-Priority: " . $this->priority; } //$this->headers[] = "X-Mailer: PHP/".phpversion(); //$this->headers[] = "Return-Path: ".$this->fromEmail; $headers = join($this->LE, $this->headers); } // TODO: we should have an option of no-reply for private messages and emails // to which we do not accept replies. e.g. the site admin doesn't want a // a lot of message from people trying to unsubscribe. Just make sure to // give good instructions in the message. // add some standard tags (user-dependent tags are included later) global $xoopsConfig; $this->assign ('X_ADMINMAIL', $xoopsConfig['adminmail']); $this->assign ('X_SITENAME', $xoopsConfig['sitename']); $this->assign ('X_SITEURL', XOOPS_URL . "/"); // TODO: also X_ADMINNAME?? // TODO: X_SIGNATURE, X_DISCLAIMER ?? - these are probably best // done as includes if mail templates ever get this sophisticated // replace tags with actual values foreach ( $this->assignedTags as $k => $v ) { $this->body = str_replace("{".$k."}", $v, $this->body); $this->subject = str_replace("{".$k."}", $v, $this->subject); } $this->body = str_replace("\r\n", "\n", $this->body); $this->body = str_replace("\r", "\n", $this->body); $this->body = str_replace("\n", $this->LE, $this->body); // send mail to specified mail addresses, if any foreach ( $this->toEmails as $mailaddr ) { if ( !$this->sendMail($mailaddr, $this->subject, $this->body, $headers) ) { if ($debug) { $this->errors[] = sprintf(_MAIL_SENDMAILNG, $mailaddr); } } else { if ($debug) { $this->success[] = sprintf(_MAIL_MAILGOOD, $mailaddr); } } } // send message to specified users, if any // NOTE: we don't send to LIST of recipients, because the tags // below are dependent on the user identity; i.e. each user // receives (potentially) a different message foreach ( $this->toUsers as $user ) { // set some user specific variables $subject = str_replace("{X_UNAME}", $user->getVar("uname"), $this->subject ); $text = str_replace("{X_UID}", $user->getVar("uid"), $this->body ); $text = str_replace("{X_UEMAIL}", $user->getVar("email"), $text ); $text = str_replace("{X_UNAME}", $user->getVar("uname"), $text ); $text = str_replace("{X_UACTLINK}", XOOPS_URL."/register.php?op=actv&id=".$user->getVar("uid")."&actkey=".$user->getVar('actkey'), $text ); // send mail if ( $this->isMail ) { if ( !$this->sendMail($user->getVar("email"), $subject, $text, $headers) ) { if ($debug) { $this->errors[] = sprintf(_MAIL_SENDMAILNG, $user->getVar("uname")); } } else { if ($debug) { $this->success[] = sprintf(_MAIL_MAILGOOD, $user->getVar("uname")); } } } // send private message if ( $this->isPM ) { if ( !$this->sendPM($user->getVar("uid"), $subject, $text) ) { if ($debug) { $this->errors[] = sprintf(_MAIL_SENDPMNG, $user->getVar("uname")); } } else { if ($debug) { $this->success[] = sprintf(_MAIL_PMGOOD, $user->getVar("uname")); } } } flush(); } if ( count($this->errors) > 0 ) { return false; } return true; } // private function sendPM($uid, $subject, $body) { global $xoopsUser; $pm_handler =& xoops_gethandler('privmessage'); $pm =& $pm_handler->create(); $pm->setVar("subject", $subject); // RMV-NOTIFY $pm->setVar('from_userid', !empty($this->fromUser) ? $this->fromUser->getVar('uid') : ( empty($xoopsUser) ? 1 : $xoopsUser->getVar('uid') ) ); $pm->setVar("msg_text", $body); $pm->setVar("to_userid", $uid); if (!$pm_handler->insert($pm)) { return false; } return true; } /** * Send email * * Uses the new XoopsMultiMailer * * @param string * @param string * @param string * @return boolean FALSE on error. */ function sendMail($email, $subject, $body, $headers) { $subject = $this->encodeSubject($subject); $this->encodeBody($body); $this->multimailer->ClearAllRecipients(); $this->multimailer->AddAddress($email); $this->multimailer->Subject = $subject; $this->multimailer->Body = $body; $this->multimailer->CharSet = $this->charSet; $this->multimailer->Encoding = $this->encoding; if (!empty($this->fromName)) { $this->multimailer->FromName = $this->encodeFromName($this->fromName); } if (!empty($this->fromEmail)) { $this->multimailer->Sender = $this->multimailer->From = $this->fromEmail; } $this->multimailer->ClearCustomHeaders(); foreach ($this->headers as $header) { $this->multimailer->AddCustomHeader($header); } if (!$this->multimailer->Send()) { $this->errors[] = $this->multimailer->ErrorInfo; return FALSE; } return TRUE; } // public function getErrors($ashtml = true) { if ( !$ashtml ) { return $this->errors; } else { if ( !empty($this->errors) ) { $ret = "<h4>"._ERRORS."</h4>"; foreach ( $this->errors as $error ) { $ret .= $error."<br />"; } } else { $ret = ""; } return $ret; } } // public function getSuccess($ashtml = true) { if ( !$ashtml ) { return $this->success; } else { $ret = ""; if ( !empty($this->success) ) { foreach ( $this->success as $suc ) { $ret .= $suc."<br />"; } } return $ret; } } // public function assign($tag, $value=null) { if ( is_array($tag) ) { foreach ( $tag as $k => $v ) { $this->assign($k, $v); } } else { if ( !empty($tag) && isset($value) ) { $tag = strtoupper(trim($tag)); // RMV-NOTIFY // TEMPORARY FIXME: until the X_tags are all in here // if ( substr($tag, 0, 2) != "X_" ) { $this->assignedTags[$tag] = $value; // } } } } // public function addHeaders($value) { $this->headers[] = trim($value).$this->LE; } // public function setToEmails($email) { if ( !is_array($email) ) { if (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$/i",$email) ) { array_push($this->toEmails, $email); } } else { foreach ( $email as $e) { $this->setToEmails($e); } } } // public function setToUsers(&$user) { if ( !is_array($user) ) { if ( strtolower(get_class($user)) == "xoopsuser" ) { array_push($this->toUsers, $user); } } else { foreach ( $user as $u) { $this->setToUsers($u); } } } // public function setToGroups($group) { if ( !is_array($group) ) { if ( strtolower(get_class($group)) == "xoopsgroup" ) { $member_handler =& xoops_gethandler('member'); $this->setToUsers($member_handler->getUsersByGroup($group->getVar('groupid'), true)); } } else { foreach ($group as $g) { $this->setToGroups($g); } } } // abstract // to be overidden by lang specific mail class, if needed function encodeFromName($text) { return $text; } // abstract // to be overidden by lang specific mail class, if needed function encodeSubject($text) { return $text; } // abstract // to be overidden by lang specific mail class, if needed function encodeBody(&$text) { } } ?>