<?php defined('is_running') or die('Not an entry point...'); /** * @deprecated Use email_mailer.php instead * used by minishop addon */ trigger_error('Deprecated class, please use email_mailer.php instead'); class gp_email{ function SendEmail( $to, $subject, $message, $headers=array(), $from_info=array() ){ global $config; trigger_error('gp_email::SendEmail() should not be used'); if(!defined('PHP_EOL')) define('PHP_EOL', strtoupper(substr(PHP_OS,0,3) == 'WIN') ? "\r\n" : "\n"); $message = str_replace("\n.", "\n..", $message); //for windows, see mail() documentation $subject = str_replace(array("\r","\n","\v"),array(" "),$subject); $headers[] = 'MIME-Version: 1.0'; $headers[] = 'Content-type: text/html; charset=UTF-8'; $headers[] = 'Content-Transfer-Encoding: quoted-printable'; //from header if( !empty($from_info['address']) && isset($config['from_use_user']) && $config['from_use_user'] ){ $name = ''; if( !empty($from_info['name']) ){ $name = $from_info['name']; } $headers[] = 'From: '.$name.' <'.$from_info['address'].'>'; }else{ $sendmail_from = ini_get('sendmail_from'); if( empty($sendmail_from) ){ $from = gp_email::From_Address(); $headers[] = 'From: Automated Sender <'.$from.'>'; } } $headers = implode(PHP_EOL,$headers); $headers .= PHP_EOL; // encode subject //=?UTF-8?Q?encoded_text?= // work a round: for subject with wordwrap // not fixed, no possibility to have one in a single char $subject = wordwrap($subject, 25, "\n", FALSE); $subject = explode("\n", $subject); foreach($subject as $key => $value){ $subject[$key] = gp_email::imap_8bit($value); } $subject = implode("\r\n ", $subject); $subject = "=?UTF-8?Q?".$subject."?="; //encode $message = gp_email::imap_8bit($message); if( mail($to, $subject, $message, $headers) ){ return true; } return false; } function From_Address(){ global $config; if( !empty($config['from_address']) ){ return $config['from_address']; } $from = ini_get('sendmail_from'); if( !empty($sendmail_from) ){ return $from; } $server = \gp\tool::ServerName(true); if( !$server === false ){ $server = 'localhost'; } return 'AutomatedSender@'.$server; } function From_Name(){ global $config; if( !empty($config['from_name']) ){ return $config['from_name']; } return 'Automated Sender'; } function Mail_Method(){ global $config; if( !empty($config['mail_method']) ){ if( $config['mail_method'] == 'smpt' ){ //bug in 1.7 return 'smtp'; } return $config['mail_method']; } return 'mail'; } function imap_8bit(&$text){ if( function_exists('imap_8bit') ){ return imap_8bit($text); } return gp_email::quoted_printable_encode($text); } function quoted_printable_encode($sText,$bEmulate_imap_8bit=true) { // split text into lines $aLines=explode(chr(13).chr(10),$sText); for ($i=0;$i<count($aLines);$i++) { $sLine =& $aLines[$i]; if (strlen($sLine)===0) continue; // do nothing, if empty $sRegExp = '/[^\x09\x20\x21-\x3C\x3E-\x7E]/e'; // imap_8bit encodes x09 everywhere, not only at lineends, // for EBCDIC safeness encode !"#$@[\]^`{|}~, // for complete safeness encode every character :) if ($bEmulate_imap_8bit) $sRegExp = '/[^\x20\x21-\x3C\x3E-\x7E]/e'; $sReplmt = 'sprintf( "=%02X", ord ( "$0" ) ) ;'; $sLine = preg_replace( $sRegExp, $sReplmt, $sLine ); // encode x09,x20 at lineends { $iLength = strlen($sLine); $iLastChar = ord($sLine[$iLength-1]); // !!!!!!!! // imap_8_bit does not encode x20 at the very end of a text, // here is, where I don't agree with imap_8_bit, // please correct me, if I'm wrong, // or comment next line for RFC2045 conformance, if you like if (!($bEmulate_imap_8bit && ($i==count($aLines)-1))) if (($iLastChar==0x09)||($iLastChar==0x20)) { $sLine[$iLength-1]='='; $sLine .= ($iLastChar==0x09)?'09':'20'; } } // imap_8bit encodes x20 before chr(13), too // although IMHO not requested by RFC2045, why not do it safer :) // and why not encode any x20 around chr(10) or chr(13) if ($bEmulate_imap_8bit) { $sLine=str_replace(' =0D','=20=0D',$sLine); //$sLine=str_replace(' =0A','=20=0A',$sLine); //$sLine=str_replace('=0D ','=0D=20',$sLine); //$sLine=str_replace('=0A ','=0A=20',$sLine); } // finally split into softlines no longer than 76 chars, // for even more safeness one could encode x09,x20 // at the very first character of the line // and after soft linebreaks, as well, // but this wouldn't be caught by such an easy RegExp preg_match_all( '/.{1,73}([^=]{0,2})?/', $sLine, $aMatch ); $sLine = implode( '=' . chr(13).chr(10), $aMatch[0] ); // add soft crlf's } // join lines into text return implode(chr(13).chr(10),$aLines); } }