Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class hanEmail
- {
- public $emailer = NULL;
- public $header = NULL;
- public $footer = NULL;
- public $from = NULL;
- public $to = NULL;
- public $bcc = array( );
- public $subject = NULL;
- public $message = NULL;
- public $html_email = FALSE;
- private $_words = NULL;
- private $temp_headers = array( );
- private $_attachments = array( );
- protected $registry = NULL;
- protected $DB = NULL;
- protected $settings = NULL;
- protected $request = NULL;
- protected $lang = NULL;
- protected $member = NULL;
- protected $memberData = NULL;
- public function __construct( $registry )
- {
- $this->registry = $registry;
- $this->DB = $this->registry->DB( );
- $this->settings =& $this->registry->fetchSettings( );
- $this->request =& $this->registry->fetchRequest( );
- $this->lang = $this->registry->getClass( "class_localization" );
- $this->member = $this->registry->member( );
- $this->memberData =& $this->registry->member( )->fetchMemberData( );
- }
- public function init( )
- {
- $this->header = $this->settings['email_header'] ? $this->settings['email_header'] : "";
- $this->footer = $this->settings['email_footer'] ? $this->settings['email_footer'] : "";
- $classToLoad = IPSLib::loadlibrary( IPS_KERNEL_PATH."classEmail.php", "classEmail" );
- $this->emailer = new $classToLoad( array(
- "debug" => $this->settings['fake_mail'] ? $this->settings['fake_mail'] : "0",
- "debug_path" => DOC_IPS_ROOT_PATH."_mail",
- "smtp_host" => $this->settings['smtp_host'] ? $this->settings['smtp_host'] : "localhost",
- "smtp_port" => intval( $this->settings['smtp_port'] ) ? intval( $this->settings['smtp_port'] ) : 25,
- "smtp_user" => $this->settings['smtp_user'],
- "smtp_pass" => $this->settings['smtp_pass'],
- "smtp_helo" => $this->settings['smtp_helo'],
- "method" => $this->settings['mail_method'],
- "wrap_brackets" => $this->settings['mail_wrap_brackets'],
- "extra_opts" => $this->settings['php_mail_extra'],
- "charset" => IPS_DOC_CHAR_SET,
- "html" => $this->html_email
- ) );
- }
- public function clearHeaders( )
- {
- $this->temp_headers = array( );
- }
- public function setHeader( $key, $value )
- {
- $this->temp_headers[$key] = $value;
- }
- public function sendMail( )
- {
- $this->init( );
- if ( count( $this->_attachments ) )
- {
- foreach ( $this->_attachments as $a )
- {
- $this->emailer->addAttachment( $a[0], $a[1], $a[2] );
- }
- }
- $this->settings['board_name'] = $this->cleanMessage( $this->settings['board_name'] );
- $this->emailer->setFrom( $this->from ? $this->from : $this->settings['email_out'], $this->settings['board_name'] );
- $this->emailer->setTo( $this->to );
- foreach ( $this->bcc as $bcc )
- {
- $this->emailer->addBCC( $bcc );
- }
- if ( count( $this->temp_headers ) )
- {
- foreach ( $this->temp_headers as $k => $v )
- {
- $this->emailer->setHeader( $k, $v );
- }
- }
- $this->emailer->setSubject( $this->_cleanSubject( $this->subject ) );
- $this->emailer->setBody( $this->message );
- $this->emailer->sendMail( );
- $this->html_email = FALSE;
- if ( $this->emailer->error )
- {
- return $this->fatalError( $this->emailer->error_msg, $this->emailer->error_help );
- }
- return true;
- }
- public function getTemplate( $name, $language = "", $lang_file = "public_email_content", $app = "core" )
- {
- if ( $name == "" )
- {
- $this->error++;
- $this->fatalError( "A valid email template ID was not passed to the email library during template parsing", "" );
- }
- if ( !$language )
- {
- $language = IPSLib::getdefaultlanguage( );
- }
- $this->registry->class_localization->loadLanguageFile( array(
- $lang_file
- ), $app, $language, TRUE );
- if ( !isset( $this->lang->words[$name] ) )
- {
- if ( $language == IPSLib::getdefaultlanguage( ) )
- {
- $this->fatalError( "Could not find an email template with an ID of '{$name}'", "" );
- }
- else
- {
- $this->registry->class_localization->loadLanguageFile( array(
- $lang_file
- ), $app, IPSLib::getdefaultlanguage( ) );
- if ( !isset( $this->lang->words[$name] ) )
- {
- $this->fatalError( "Could not find an email template with an ID of '{$name}'", "" );
- }
- }
- }
- if ( isset( $this->lang->words["subject__".$name] ) )
- {
- $this->subject = stripslashes( $this->lang->words["subject__".$name] );
- }
- $this->template = stripslashes( $this->lang->words['email_header'] ).stripslashes( $this->lang->words[$name] ).stripslashes( $this->lang->words['email_footer'] );
- }
- public function buildMessage( $words, $noClean = false )
- {
- if ( $this->template == "" )
- {
- $this->error++;
- $this->fatalError( "Could not build the email message, no template assigned", "Make sure a template is assigned first." );
- }
- $this->message = $this->template;
- if ( $noClean )
- {
- $this->message = str_replace( "\n", "<br />", str_replace( "\r", "", $this->message ) );
- }
- $words['BOARD_ADDRESS'] = $this->settings['board_url']."/index.".$this->settings['php_ext'];
- $words['WEB_ADDRESS'] = $this->settings['home_url'];
- $words['BOARD_NAME'] = $this->settings['board_name'];
- $words['SIGNATURE'] = $this->settings['signature'] ? $this->settings['signature'] : "";
- if ( !$noClean )
- {
- foreach ( $words as $k => $v )
- {
- $words[$k] = $this->cleanMessage( $v );
- }
- }
- $this->_words = $words;
- $this->message = preg_replace_callback( "/<#(.+?)#>/", array(
- $this,
- "_swapWords"
- ), $this->message );
- $this->subject = preg_replace_callback( "/<#(.+?)#>/", array(
- $this,
- "_swapWords"
- ), $this->subject );
- $this->_words = array( );
- }
- private function _swapWords( $matches )
- {
- return $this->_words[$matches[1]];
- }
- private function _cleanSubject( $subject )
- {
- $subject = strip_tags( $subject );
- $subject = str_replace( "$", "\$", $subject );
- $subject = str_replace( "!", "!", $subject );
- $subject = str_replace( """, "\"", $subject );
- $subject = str_replace( "'", "'", $subject );
- $subject = str_replace( "|", "|", $subject );
- $subject = str_replace( "&", "&", $subject );
- $subject = str_replace( ":", ":", $subject );
- $subject = str_replace( "[", "[", $subject );
- $subject = str_replace( "]", "]", $subject );
- $subject = str_replace( "@", "@", $subject );
- $subject = str_replace( " ", " ", $subject );
- return $subject;
- }
- public function cleanMessage( $message = "" )
- {
- $message = preg_replace( "#\\[quote.*\\](.+?)\\[/quote\\]#s", "<br /><br />------------ QUOTE ----------<br />\\1<br />-----------------------------<br /><br />", $message );
- $message = preg_replace_callback( "#\\[url=(.+?)\\](.+?)\\[/url\\]#", array(
- $this,
- "_formatUrl"
- ), $message );
- $message = IPSText::gettextclass( "bbcode" )->unconvertSmilies( $message );
- $message = strip_tags( $message, "<br>" );
- IPSText::gettextclass( "bbcode" )->parse_html = 0;
- IPSText::gettextclass( "bbcode" )->parse_nl2br = 1;
- IPSText::gettextclass( "bbcode" )->parse_bbcode = 0;
- IPSText::gettextclass( "bbcode" )->parse_wordwrap = 0 - 1;
- $message = IPSText::gettextclass( "bbcode" )->stripAllTags( $message, true, false );
- $message = str_replace( "\n", "\r\n", $message );
- $message = str_replace( "\r", "", $message );
- $message = str_replace( "<br>", "\r\n", $message );
- $message = str_replace( "<br />", "\r\n", $message );
- $message = str_replace( "\r\n\r\n", "\r\n", $message );
- $message = str_replace( """, "\"", $message );
- $message = str_replace( "\", "\\", $message );
- $message = str_replace( "$", "\$", $message );
- $message = str_replace( "!", "!", $message );
- $message = str_replace( """, "\"", $message );
- $message = str_replace( "'", "'", $message );
- $message = str_replace( "(", "(", $message );
- $message = str_replace( ")", ")", $message );
- $message = str_replace( "<", "<", $message );
- $message = str_replace( ">", ">", $message );
- $message = str_replace( "|", "|", $message );
- $message = str_replace( "&", "&", $message );
- $message = str_replace( "&", "&", $message );
- $message = str_replace( ":", ":", $message );
- $message = str_replace( "[", "[", $message );
- $message = str_replace( "]", "]", $message );
- $message = str_replace( "@", "@", $message );
- $message = str_replace( "<", "<", $message );
- $message = str_replace( ">", ">", $message );
- $message = str_replace( " ", " ", $message );
- return $message;
- }
- public function _formatUrl( $matches )
- {
- $matches[1] = str_replace( array( "\"", "'", """, "'", "'" ), "", $matches[1] );
- return $matches[2]." (".$matches[1].")";
- }
- public function addAttachment( $data = "", $name = "", $ctype = "application/octet-stream" )
- {
- $this->_attachments[] = array(
- $data,
- $name,
- $ctype
- );
- }
- private function fatalError( $msg, $help = "" )
- {
- $this->DB->insert( "mail_error_logs", array(
- "mlog_date" => time( ),
- "mlog_to" => $this->to,
- "mlog_from" => $this->from,
- "mlog_subject" => $this->subject,
- "mlog_content" => substr( $this->message, 0, 200 ),
- "mlog_msg" => $msg,
- "mlog_code" => $this->emailer->smtp_code,
- "mlog_smtp_msg" => $this->emailer->smtp_msg
- ) );
- return false;
- }
- }
- if ( !defined( "IN_IPB" ) )
- {
- print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
- exit( );
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement