mirror of
https://github.com/gtbu/Typesetter-5.3-p8.git
synced 2024-11-25 07:39:13 +01:00
176 lines
4.8 KiB
PHP
176 lines
4.8 KiB
PHP
<?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);
|
|
}
|
|
}
|