📄 functions_email.php
字号:
//DEFINE EMAIL-ARCHIVABLE-MODULES LIST // this array will likely be used by the email archive log VIEWER module in future
$emodules_array = array();
$emodules_array[] = array('id' => 'newsletters', 'text' => 'Newsletters');
$emodules_array[] = array('id' => 'product_notification', 'text' => 'Product Notifications');
$emodules_array[] = array('id' => 'direct_email', 'text' => 'One-Time Email');
$emodules_array[] = array('id' => 'contact_us', 'text' => 'Contact Us');
$emodules_array[] = array('id' => 'coupon', 'text' => 'Send Coupon');
$emodules_array[] = array('id' => 'coupon_extra', 'text' => 'Send Coupon');
$emodules_array[] = array('id' => 'gv_queue', 'text' => 'Send-GV-Queue');
$emodules_array[] = array('id' => 'gv_mail', 'text' => 'Send-GV');
$emodules_array[] = array('id' => 'gv_mail_extra', 'text' => 'Send-GV-Extra');
$emodules_array[] = array('id' => 'welcome', 'text' => 'New Customer Welcome');
$emodules_array[] = array('id' => 'welcome_extra', 'text' => 'New Customer Welcome-Extra');
$emodules_array[] = array('id' => 'password_forgotten', 'text' => 'Password Forgotten');
$emodules_array[] = array('id' => 'password_forgotten_admin', 'text' => 'Password Forgotten');
$emodules_array[] = array('id' => 'checkout', 'text' => 'Checkout');
$emodules_array[] = array('id' => 'checkout_extra', 'text' => 'Checkout-Extra');
$emodules_array[] = array('id' => 'order_status', 'text' => 'Order Status');
$emodules_array[] = array('id' => 'order_status_extra', 'text' => 'Order Status-Extra');
$emodules_array[] = array('id' => 'low_stock', 'text' => 'Low Stock Notices');
$emodules_array[] = array('id' => 'cc_middle_digs', 'text' => 'CC - Middle-Digits');
$emodules_array[] = array('id' => 'tell_a_friend', 'text' => 'Tell-A-Friend');
$emodules_array[] = array('id' => 'tell_a_friend_extra', 'text' => 'Tell-A-Friend-Extra');
$emodules_array[] = array('id' => 'purchase_order', 'text' => 'Purchase Order');
$emodules_array[] = array('id' => 'payment_modules', 'text' => 'Payment Modules');
$emodules_array[] = array('id' => 'payment_modules_extra', 'text' => 'Payment Modules-Extra');
/////////////////////////////////////////////////////////////////////////////////////////
////////END SECTION FOR EMAIL FUNCTIONS//////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
/**
* select email template based on 'module' (supplied as param to function)
* selectively go thru each template tag and substitute appropriate text
* finally, build full html content as "return" output from class
**/
function zen_build_html_email_from_template($module='default',$block) {
global $messageStack;
// Identify and Read the template file for the type of message being sent
$template_filename_base = DIR_FS_EMAIL_TEMPLATES . "email_template_";
$template_filename = DIR_FS_EMAIL_TEMPLATES . "email_template_" . $current_page_base . ".html";
if (!file_exists($template_filename)) {
if (file_exists($template_filename_base . str_replace(array('_extra','_admin'),'',$module) . '.html')) {
$template_filename = $template_filename_base . str_replace(array('_extra','_admin'),'',$module) . '.html';
} elseif (file_exists($template_filename_base . 'default' . '.html')) {
$template_filename = $template_filename_base . 'default' . '.html';
} else {
$messageStack->add('header','ERROR: The email template file for ('.$template_filename_base.') or ('.$template_filename.') cannot be found.','caution');
return ''; // couldn't find template file, so return an empty string for html message.
}
}
if (! $fh = fopen($template_filename, 'rb')) { // note: the 'b' is for compatibility with Windows systems
$messageStack->add('header','ERROR: The email template file ('.$template_filename_base.') or ('.$template_filename.') cannot be opened','caution');
}
$file_holder = fread($fh, filesize($template_filename));
fclose($fh);
//strip linebreaks and tabs out of the template
// $file_holder = zen_convert_linefeeds(array("\r\n", "\n", "\r", "\t"), '', $file_holder);
$file_holder = zen_convert_linefeeds(array("\t"), ' ', $file_holder);
//check for some specifics that need to be included with all messages
if ($block['EMAIL_STORE_NAME']=='') $block['EMAIL_STORE_NAME'] = STORE_NAME;
if ($block['EMAIL_STORE_URL']=='') $block['EMAIL_STORE_URL'] = '<a href="'.HTTP_CATALOG_SERVER . DIR_WS_CATALOG.'">'.STORE_NAME.'</a>';
if ($block['EMAIL_STORE_OWNER']=='') $block['EMAIL_STORE_OWNER'] = STORE_OWNER;
if ($block['EMAIL_FOOTER_COPYRIGHT']=='') $block['EMAIL_FOOTER_COPYRIGHT'] = EMAIL_FOOTER_COPYRIGHT;
if ($block['EMAIL_DISCLAIMER']=='') $block['EMAIL_DISCLAIMER'] = sprintf(EMAIL_DISCLAIMER, '<a href="mailto:' . STORE_OWNER_EMAIL_ADDRESS . '">'. STORE_OWNER_EMAIL_ADDRESS .' </a>');
if ($block['EMAIL_SPAM_DISCLAIMER']=='') $block['EMAIL_SPAM_DISCLAIMER'] = EMAIL_SPAM_DISCLAIMER;
if ($block['BASE_HREF']=='') $block['BASE_HREF'] = HTTP_SERVER . DIR_WS_CATALOG;
if ($block['EMAIL_DATE_SHORT']=='') $block['EMAIL_DATE_SHORT'] = zen_date_short(date("Y-m-d"));
if ($block['EMAIL_DATE_LONG']=='') $block['EMAIL_DATE_LONG'] = zen_date_long(date("Y-m-d"));
if ($block['CHARSET']=='') $block['CHARSET'] = CHARSET;
// if ($block['EMAIL_STYLESHEET']=='') $block['EMAIL_STYLESHEET'] = str_replace(array("\r\n", "\n", "\r"), '',file_get_contents(DIR_FS_EMAIL_TEMPLATES.'stylesheet.css'));
if ($block['EXTRA_INFO'] =='EXTRA_INFO') $block['EXTRA_INFO'] = '';
if (substr($module,-6) != '_extra' && $module != 'contact_us') $block['EXTRA_INFO'] = '';
$block['COUPON_BLOCK'] = '';
if ($block['COUPON_TEXT_VOUCHER_IS'] && $block['COUPON_TEXT_TO_REDEEM']) {
$block['COUPON_BLOCK'] = '<div class="coupon-block">' . $block['COUPON_TEXT_VOUCHER_IS'] . $block['COUPON_DESCRIPTION'] . '<br />' . $block['COUPON_TEXT_TO_REDEEM'] . '<span class="coupon-code">' . $block['COUPON_CODE'] . '</span></div>';
}
$block['GV_BLOCK'] = '';
if ($block['GV_WORTH'] && $block['GV_REDEEM'] && $block['GV_CODE_URL']) {
$block['GV_BLOCK'] = '<div class="gv-block">' . $block['GV_WORTH'] . '<br />' . $block['GV_REDEEM'] . $block['GV_CODE_URL'] . '<br />' . $block['GV_LINK_OTHER'] . '</div>';
}
//prepare the "unsubscribe" link:
if (function_exists(zen_catalog_href_link)) { // is this admin version, or catalog? (zen_catalog_href_link only exists in Admin)
$block['UNSUBSCRIBE_LINK'] = str_replace("\n",'',TEXT_UNSUBSCRIBE) . ' <a href="' . zen_catalog_href_link(FILENAME_UNSUBSCRIBE, "addr=" . $block['EMAIL_TO_ADDRESS']) . '">' . zen_catalog_href_link(FILENAME_UNSUBSCRIBE, "addr=" . $block['EMAIL_TO_ADDRESS']) . '</a>';
} else {
$block['UNSUBSCRIBE_LINK'] = str_replace("\n",'',TEXT_UNSUBSCRIBE) . ' <a href="' . zen_href_link(FILENAME_UNSUBSCRIBE, "addr=" . $block['EMAIL_TO_ADDRESS']) . '">' . zen_href_link(FILENAME_UNSUBSCRIBE, "addr=" . $block['EMAIL_TO_ADDRESS']) . '</a>';
}
//now replace the $BLOCK_NAME items in the template file with the values passed to this function's array
foreach ($block as $key=>$value) {
$file_holder = str_replace('$' . $key, $value, $file_holder);
}
//DEBUG -- to display preview on-screen
if (EMAIL_SYSTEM_DEBUG=='on') echo $file_holder;
return $file_holder;
}
/**
* Function to build array of additional email content collected and sent on admin-copies of emails:
*
*/
function email_collect_extra_info($from, $email_from, $login, $login_email, $login_phone='', $login_fax='') {
// get host_address from either session or one time for both email types to save server load
if (!$_SESSION['customers_host_address']) {
if (SESSION_IP_TO_HOST_ADDRESS == 'true') {
$email_host_address = gethostbyaddr($_SERVER['REMOTE_ADDR']);
} else {
$email_host_address = OFFICE_IP_TO_HOST_ADDRESS;
}
} else {
$email_host_address = $_SESSION['customers_host_address'];
}
// generate footer details for "also-send-to" emails
$extra_info=array();
$extra_info['TEXT'] =
OFFICE_USE . "\t" . "\n" .
OFFICE_FROM . "\t" . $from . "\n" .
OFFICE_EMAIL. "\t" . $email_from . "\n" .
(trim($login) !='' ? OFFICE_LOGIN_NAME . "\t" . $login . "\n" : '') .
(trim($login_email) !='' ? OFFICE_LOGIN_EMAIL . "\t" . $login_email . "\n" : '') .
($login_phone !='' ? OFFICE_LOGIN_PHONE . "\t" . $login_phone . "\n" : '') .
($login_fax !='' ? OFFICE_LOGIN_FAX . "\t" . $login_fax . "\n" : '') .
OFFICE_IP_ADDRESS . "\t" . $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR'] . "\n" .
OFFICE_HOST_ADDRESS . "\t" . $email_host_address . "\n" .
OFFICE_DATE_TIME . "\t" . date("D M j Y G:i:s T") . "\n\n";
$extra_info['HTML'] = '<table class="extra-info">' .
'<tr><td class="extra-info-bold" colspan="2">' . OFFICE_USE . '</td></tr>' .
'<tr><td class="extra-info-bold">' . OFFICE_FROM . '</td><td>' . $from . '</td></tr>' .
'<tr><td class="extra-info-bold">' . OFFICE_EMAIL. '</td><td>' . $email_from . '</td></tr>' .
($login !='' ? '<tr><td class="extra-info-bold">' . OFFICE_LOGIN_NAME . '</td><td>' . $login . '</td></tr>' : '') .
($login_email !='' ? '<tr><td class="extra-info-bold">' . OFFICE_LOGIN_EMAIL . '</td><td>' . $login_email . '</td></tr>' : '') .
($login_phone !='' ? '<tr><td class="extra-info-bold">' . OFFICE_LOGIN_PHONE . '</td><td>' . $login_phone . '</td></tr>' : '') .
($login_fax !='' ? '<tr><td class="extra-info-bold">' . OFFICE_LOGIN_FAX . '</td><td>' . $login_fax . '</td></tr>' : '') .
'<tr><td class="extra-info-bold">' . OFFICE_IP_ADDRESS . '</td><td>' . $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR'] . '</td></tr>' .
'<tr><td class="extra-info-bold">' . OFFICE_HOST_ADDRESS . '</td><td>' . $email_host_address . '</td></tr>' .
'<tr><td class="extra-info-bold">' . OFFICE_DATE_TIME . '</td><td>' . date('D M j Y G:i:s T') . '</td></tr>' . '</table>';
return $extra_info;
}
/**
* validates an email address
*
* Sample Valid Addresses:
*
* first.last@host.com
* firstlast@host.to
* "first last"@host.com
* "first@last"@host.com
* first-last@host.com
* first's-address@email.host.4somewhere.com
* first.last@[123.123.123.123]
*
* hosts with either external IP addresses or from 2-6 characters will pass (e.g. .jp or .museum)
*
* Invalid Addresses:
*
* first last@host.com
* 'first@host.com
* @param string The email address to validate
* @return booloean true if valid else false
**/
function zen_validate_email($email) {
$valid_address = true;
// fail if contains no @ symbol
if (!strstr($email,'@')) return false;
// split the email address into user and domain parts
// need to update to trap for addresses in the format of "first@last"@someplace.com
// this method will most likely break in that case
list( $user, $domain ) = explode( "@", $email );
$valid_ip_form = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}';
$valid_email_pattern = '^[a-z0-9]+[a-z0-9_\.\'\-]*@[a-z0-9]+[a-z0-9\.\-]*\.(([a-z]{2,6})|([0-9]{1,3}))$';
//preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9\._-]+)+$/', $email))
//preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*?[a-z]+$/is');
$space_check = '[ ]';
// strip beginning and ending quotes, if and only if both present
if( (ereg('^["]', $user) && ereg('["]$', $user)) ){
$user = ereg_replace ( '^["]', '', $user );
$user = ereg_replace ( '["]$', '', $user );
$user = ereg_replace ( $space_check, '', $user ); //spaces in quoted addresses OK per RFC (?)
$email = $user."@".$domain; // contine with stripped quotes for remainder
}
// fail if contains spaces in domain name
if (strstr($domain,' ')) return false;
// if email domain part is an IP address, check each part for a value under 256
if (ereg($valid_ip_form, $domain)) {
$digit = explode( ".", $domain );
for($i=0; $i<4; $i++) {
if ($digit[$i] > 255) {
$valid_address = false;
return $valid_address;
exit;
}
// stop crafty people from using internal IP addresses
if (($digit[0] == 192) || ($digit[0] == 10)) {
$valid_address = false;
return $valid_address;
exit;
}
}
}
if (!ereg($space_check, $email)) { // trap for spaces in
if ( eregi($valid_email_pattern, $email)) { // validate against valid email patterns
$valid_address = true;
} else {
$valid_address = false;
return $valid_address;
exit;
}
}
return $valid_address;
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -