Jump to content
Olof Larsson

[Contribution] U HTML Emails

Recommended Posts

Hi Olaf,

 

i have been busy with this contrib and it is working great with images, links, backgrounds.

At the moment i want to add html email to other mails that are provided from other modules.

Now i am busy with tho admin/customers.php file with the contrib control login (http://addons.oscommerce.com/info/1154). Here an email will be send when customer account is approved by admin. I added UHtmlEmails/customers.php and the language file as needed. I also added the lines needed on admin/customers.php. The email can be send and received. But i only see hardcore html in the mail. No images or backgrounds!

I have seen this problem ones before but i can't find the solution again how i solved it at that time.

 

Hope you can give that little advice i need.

 

Thanks, Gerard

 

p.s. in order editor it works fine where i installed uhtml emails to.

 

Here is a piece of the lines from admin/customers.php

// BOF Control Login
	case 'setflag':
       	if ( ($HTTP_GET_VARS['flag'] == '0') || ($HTTP_GET_VARS['flag'] == '1') ) {
             if ($HTTP_GET_VARS['cID']) {
           tep_set_customers_status($HTTP_GET_VARS['cID'], $HTTP_GET_VARS['flag']);
		}
 if(CONTROL_LOGIN == 'true') {
// BOF Control Login email mod to notify customers when their account has been activated - by Martin Mills March 05
if ($HTTP_GET_VARS['flag'] == '1') {
	//selects user's profile based on the URL parameter used to reset status
   	$query = 'SELECT * from customers where customers_id='.$HTTP_GET_VARS['cID'];
	$result = mysql_query($query);
			if (!$result) {
//this will show you any errors in the query - for testing purposes
  $message  = 'Invalid query: ' . mysql_error() . "\n";
  $message .= 'Whole query: ' . $query;
  die($message);
			}
$row = mysql_fetch_assoc($result);
//define recipient's email address
$email=$row{'customers_email_address'};
//define recipient's first name
$firstname=$row{'customers_firstname'};
//define return address
$headers  = EMAIL_ACTIVATE_FROM;
		   mail;
//define your message
//---  Beginning of addition: Ultimate HTML Emails  ---//
if (EMAIL_USE_HTML == 'true') {
	require(DIR_FS_CATALOG_MODULES . 'html_mail/'. HTML_EMAIL_LAYOUT .'/control_login.php');
	$message = $html_email;
	}else{
//---  End of addition: Ultimate HTML Emails  ---//

$message = EMAIL_ACTIVATE_GREETING. ' ' .$firstname. ",\n\n".EMAIL_ACTIVATE_MESSAGE."\n\n".STORE_OWNER_EMAIL_ADDRESS."\n\n".STORE_NAME_ADDRESS."\n\n".EMAIL_ACTIVATE_SIGNOFF."\n\n".STORE_OWNER.", ".STORE_NAME;

//---  Beginning of addition: Ultimate HTML Emails  ---//
}
if(HTML_EMAIL_DEVELOPMENT_MODE === 'true'){
	//Save the contents of the generated html email to the harddrive in .htm file. This can be practical when developing a new layout.
	$TheFileName = 'Last_mail_from_control_login.php.htm';
	$TheFileHandle = fopen($TheFileName, 'w') or die("can't open error log file");
	fwrite($TheFileHandle, $message);
	fclose($TheFileHandle);
	}
//---  End of addition: Ultimate HTML Emails  ---//
mail ($email, EMAIL_ACTIVATE_SUBJECT, $message, $headers);
		}
 }
// EOF Control Login email mod
	}
       tep_redirect(tep_href_link(FILENAME_CUSTOMERS, '', 'NONSSL'));
       break;
// EOF Control Login

Share this post


Link to post
Share on other sites

Hello, I'm using this mod without any problems in my 2.3.1 shop exept for the newsletter. This one isn't send in HTML. Can you please tell what I have to change to also send the newsletter in HTML?

 

Thx

Edited by Swingy

Share this post


Link to post
Share on other sites

Has anyone had trouble with this once the google the capatcha mod is added??? -

 

 

ISSUE SOLVED - Was an error in my databsase

Share this post


Link to post
Share on other sites

Yes for someone who knows html. But the person who have to send the newsletter doesn't know html so it has to be a template for sending de newsletter.

Share this post


Link to post
Share on other sites

[update text/plain has no linefeeds]

 

.. alternative 2.

 

Solution is relative simple without any heavy modifications (as far I can see).

 

Modification IN ADDITION to U HTML v2.1 (2008/08/02):

 

--- step 1 modify admin/includes/functions/general.php AND catalog/includes/functions/general.php ---

Find:

  function tep_mail($to_name, $to_email_address, $email_subject, $email_text, $from_email_name, $from_email_address) {
if (SEND_EMAILS != 'true') return false;

// Instantiate a new mail object
$message = new email(array('X-Mailer: osCommerce'));

// Build the text version
$text = strip_tags($email_text);
if (EMAIL_USE_HTML == 'true') {
  $message->add_html($email_text, $text);

Add after:

//---  Beginning of addition: Ultimate HTML Emails  ---//	  
  global $UHTML_html_text;
  if (tep_not_null($UHTML_html_text) ){
	  $message->html_text = $UHTML_html_text;
  }
//---  End of addition: Ultimate HTML Emails  ---//

--- step 2 add text/plain ---

For the e-mail you want to modify the text/plain go to:

catalog/includes/modules/UHtmlEmails/LAYOUT_NAME/FILENAME.php

At the end of the file, before '?>' insert:

$UHTML_html_text = "This is the text/plain code\nwith linefeeds.\n\nYou can also use the variables used in the $html_email.";

 

That's all...

 

This code is also added to the ADDONS-page.

 

Kind regards, Patrick

 

 

I also had the problem with text displaying as one block without any linefeeds for users that allow emails as text only. So I tried the above fix on a 2.2rca - without ANY result actually although I am sure that I have applied the above fix as directed.

 

 

So I was wondering if anyone ever figured out another way of displaying the email correctly for those users accepting only text emails?

Regards

tom

Edited by Tom172

Share this post


Link to post
Share on other sites

Hi.

it possible change subject email like "OUR STORE: YOUR ORDER Nr:" + 'The Order Number' + 'The Status of the order with oID'...

 

update orders and when a customer confir order

Edited by sakkiotto

Share this post


Link to post
Share on other sites

There is only one thing I cant get to work with this contrib.

 

The order totals dont show up in the order confirmation email. Ive had to change the variables to work with Paypal IPN but cant get the order totals variable to work.

 

Anyone resolved this?

Any help would be greatly appreciated!

Share this post


Link to post
Share on other sites

hi

 

on oscommerce 2.3.1 everything works great except for the orders status update, there is no instruction for that.

 

 

any help please?

 

 

edit ADMIN/ORDERS.php

 

at :

$email = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID, 'SSL') . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);

 

add above:

 

//--- Beginning of addition: Ultimate HTML Emails ---//

if (EMAIL_USE_HTML == 'true') {

require(DIR_FS_CATALOG . DIR_WS_MODULES . 'UHtmlEmails/Green/orders_update.php');

$email = $html_email;

}else{//Send text email

//--- End of addition: Ultimate HTML Emails ---//

 

add below:

 

}

 

----------------------------------

 

NOW - in UTHML EMIALS---- includes/modules/uhtml emails/orders.php, copy and and save as orders_update.php

 

------------------------------

 

Now edit orders_update.php accordingly!!

 

----------------------------

 

WORKS FINE!

Share this post


Link to post
Share on other sites

Hi!

I followed the install.txt from line-by-line. It works fine.

My only problem is, that i cant change the layout. This green background isnt good for my shop. How can it be changed?

Please help me!

I have 2.3.1 version.

Share this post


Link to post
Share on other sites

simply go online and find a nice loking html email template you like-

 

copy and paste this code into the relevant $html =

 

i have attached a sample, copy and paste his into the green folder - you will need to do your own langaue bits but this my help. test and see.

 

 

populate as you wish with the php strongs that pull db info. etc etc...

Edited by gfasal

Share this post


Link to post
Share on other sites

Hope to fix the following if someone can please give me advice to correct it

 

When customer orders something with attributes the description and models gets all mixed up.

I narrowed it down to the line 303 - $products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];

I think it's in the wrong place or not even sure

 

Any help will be very much appreciated.

 

My checkout_process.php file.

<?php
/*
 $Id: checkout_process.php 1750 2007-12-21 05:20:28Z hpdl $
 adapted for Separate Pricing Per Customer 2006/09/09 (attribute prices for groups, hide attributes from groups
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com
 Copyright (c) 2007 osCommerce
 Released under the GNU General Public License
*/
 include('includes/application_top.php');
// if the customer is not logged on, redirect them to the login page
 if (!tep_session_is_registered('customer_id')) {
   $navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
   tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
 }
// if there is nothing in the customers cart, redirect them to the shopping cart page
 if ($cart->count_contents() < 1) {
   tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
 }
// if no shipping method has been selected, redirect the customer to the shipping method selection page
 if (!tep_session_is_registered('shipping') || !tep_session_is_registered('sendto')) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
 }
 if ( (tep_not_null(MODULE_PAYMENT_INSTALLED)) && (!tep_session_is_registered('payment')) ) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
}
// avoid hack attempts during the checkout procedure by checking the internal cartID
 if (isset($cart->cartID) && tep_session_is_registered('cartID')) {
   if ($cart->cartID != $cartID) {
  tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
   }
 }
 include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS);
// load selected payment module
 require(DIR_WS_CLASSES . 'payment.php');
 $payment_modules = new payment($payment);
// load the selected shipping module
 require(DIR_WS_CLASSES . 'shipping.php');
 $shipping_modules = new shipping($shipping);
 require(DIR_WS_CLASSES . 'order.php');
 $order = new order;

// Stock Check
 $any_out_of_stock = false;
 if (STOCK_CHECK == 'true') {
   for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
  if (tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) {
    $any_out_of_stock = true;
  }
   }
   // Out of Stock
   if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) {
  tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
   }
 }
 $any_bundle_only = false;
 $products = $cart->get_products();
 for ($i=0, $n=sizeof($products); $i<$n; $i++) {
   if ($products[$i]['sold_in_bundle_only'] == 'yes') $any_bundle_only = true;
 }
 if ($any_bundle_only) tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
 $payment_modules->update_status();
 if ( ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
 }
 require(DIR_WS_CLASSES . 'order_total.php');
 $order_total_modules = new order_total;
 $order_totals = $order_total_modules->process();
// load the before_process function from the payment modules
 $payment_modules->before_process();
 $sql_data_array = array('customers_id' => $customer_id,
					  'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'],
					  'customers_company' => $order->customer['company'],
					  'customers_street_address' => $order->customer['street_address'],
					  'customers_suburb' => $order->customer['suburb'],
					  'customers_city' => $order->customer['city'],
					  'customers_postcode' => $order->customer['postcode'],
					  'customers_state' => $order->customer['state'],
					  'customers_country' => $order->customer['country']['title'],
					  'customers_telephone' => $order->customer['telephone'],
					  'customers_email_address' => $order->customer['email_address'],
					  'customers_address_format_id' => $order->customer['format_id'],
					  'delivery_name' => trim($order->delivery['firstname'] . ' ' . $order->delivery['lastname']),
					  'delivery_company' => $order->delivery['company'],
					  'delivery_street_address' => $order->delivery['street_address'],
					  'delivery_suburb' => $order->delivery['suburb'],
					  'delivery_city' => $order->delivery['city'],
					  'delivery_postcode' => $order->delivery['postcode'],
					  'delivery_state' => $order->delivery['state'],
					  'delivery_country' => $order->delivery['country']['title'],
					  'delivery_address_format_id' => $order->delivery['format_id'],
					  'billing_name' => $order->billing['firstname'] . ' ' . $order->billing['lastname'],
					  'billing_company' => $order->billing['company'],
					  'billing_street_address' => $order->billing['street_address'],
					  'billing_suburb' => $order->billing['suburb'],
					  'billing_city' => $order->billing['city'],
					  'billing_postcode' => $order->billing['postcode'],
					  'billing_state' => $order->billing['state'],
					  'billing_country' => $order->billing['country']['title'],
					  'billing_address_format_id' => $order->billing['format_id'],
					  'payment_method' => $order->info['payment_method'],
					  'shipping_module' => $shipping['id'],
					  'cc_type' => $order->info['cc_type'],
					  'cc_owner' => $order->info['cc_owner'],
					  'cc_number' => $order->info['cc_number'],
					  'cc_expires' => $order->info['cc_expires'],
					  'date_purchased' => 'now()',
					  'last_modified' => 'now()',
					  'orders_status' => $order->info['order_status'],
					  'currency' => $order->info['currency'],
					  'currency_value' => $order->info['currency_value']);
 tep_db_perform(TABLE_ORDERS, $sql_data_array);
 $insert_id = tep_db_insert_id();
 for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
   $sql_data_array = array('orders_id' => $insert_id,
					    'title' => $order_totals[$i]['title'],
					    'text' => $order_totals[$i]['text'],
					    'value' => $order_totals[$i]['value'],
					    'class' => $order_totals[$i]['code'],
					    'sort_order' => $order_totals[$i]['sort_order']);
   tep_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array);
 }
 $customer_notification = (SEND_EMAILS == 'true') ? '1' : '0';
 $sql_data_array = array('orders_id' => $insert_id,
					  'orders_status_id' => $order->info['order_status'],
					  'date_added' => 'now()',
					  'customer_notified' => $customer_notification,
					  'comments' => $order->info['comments']);
 tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);

  //kgt - discount coupons
 if( tep_session_is_registered( 'coupon' ) && is_object( $order->coupon ) ) {
  $sql_data_array = array( 'coupons_id' => $order->coupon->coupon['coupons_id'],
						 'orders_id' => $insert_id );
  tep_db_perform( TABLE_DISCOUNT_COUPONS_TO_ORDERS, $sql_data_array );
 }
 //end kgt - discount coupons
// initialized for the email confirmation
 $products_ordered = '';
 $subtotal = 0;
 $total_tax = 0;
// begin product bundles
 function reduce_bundle_stock($bundle_id, $qty_sold) {
   $bundle_query = tep_db_query('select pb.subproduct_id, pb.subproduct_qty, p.products_bundle, p.products_quantity from ' . TABLE_PRODUCTS_BUNDLES . ' pb, ' . TABLE_PRODUCTS . ' p where p.products_id = pb.subproduct_id and bundle_id = ' . (int)tep_get_prid($bundle_id));
   while ($bundle_info = tep_db_fetch_array($bundle_query)) {
  if ($bundle_info['products_bundle'] == 'yes') {
    reduce_bundle_stock($bundle_info['subproduct_id'], ($qty_sold * $bundle_info['subproduct_qty']));
    // update quantity of nested bundle sold
    tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', ($qty_sold * $bundle_info['subproduct_qty'])) . " where products_id = " . (int)$bundle_info['subproduct_id']);
  } else {
    $bundle_stock_left = $bundle_info['products_quantity'] - ($qty_sold * $bundle_info['subproduct_qty']);
    tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = " . (int)$bundle_stock_left . ", products_ordered = products_ordered + " . (int)($qty_sold * $bundle_info['subproduct_qty']) . " where products_id = " . (int)$bundle_info['subproduct_id']);
    if ( ($bundle_stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
	  tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = " . (int)$bundle_info['subproduct_id']);
    }
  }
   }
 }
 for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
// Stock Update - Joao Correia
   if (STOCK_LIMITED == 'true') {
  if (DOWNLOAD_ENABLED == 'true') {
    $stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename, products_bundle
					    FROM " . TABLE_PRODUCTS . " p
					    LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa
						 ON p.products_id=pa.products_id
					    LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
						 ON pa.products_attributes_id=pad.products_attributes_id
					    WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'";
// Will work with only one option for downloadable products
// otherwise, we have to build the query dynamically with a loop
    $products_attributes = $order->products[$i]['attributes'];
    if (is_array($products_attributes)) {
	  $stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'";
    }
    $stock_query = tep_db_query($stock_query_raw);
  } else {
    $stock_query = tep_db_query("select products_quantity, products_bundle from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
  }
  if (tep_db_num_rows($stock_query) > 0) {
    $stock_values = tep_db_fetch_array($stock_query);
// do not decrement quantities if products_attributes_filename exists
    if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) {
	  if ($stock_values['products_bundle'] == 'yes') {
	    reduce_bundle_stock($order->products[$i]['id'], $order->products[$i]['qty']);
	    $stock_left = 1; // products_quantity has no meaning for bundles but must be at least one for bundle to sell, bundle quantity check is done by other means
	  } else {
	    $stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty'];
	  }
    } else {
	  $stock_left = $stock_values['products_quantity'];
    }
    tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
    if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
	  tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
    }
  }
   }
 // end product bundles

// Update products_ordered (for bestsellers list)
   tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
   $sql_data_array = array('orders_id' => $insert_id,
					    'products_id' => tep_get_prid($order->products[$i]['id']),
					    'products_model' => $order->products[$i]['model'],
					    'products_name' => $order->products[$i]['name'],
					    'products_price' => $order->products[$i]['price'],
					    'final_price' => $order->products[$i]['final_price'],
					    'products_tax' => $order->products[$i]['tax'],
					    'products_quantity' => $order->products[$i]['qty']);
   tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
   $order_products_id = tep_db_insert_id();
//------insert customer choosen option to order--------
   $attributes_exist = '0';
   $products_ordered_attributes = '';
   if (isset($order->products[$i]['attributes'])) {
  $attributes_exist = '1';
  for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
    if (DOWNLOAD_ENABLED == 'true') {
	  $attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename
						   from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
						   left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
						    on pa.products_attributes_id=pad.products_attributes_id
						   where pa.products_id = '" . $order->products[$i]['id'] . "'
						    and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "'
						    and pa.options_id = popt.products_options_id
						    and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "'
						    and pa.options_values_id = poval.products_options_values_id
						    and popt.language_id = '" . $languages_id . "'
						    and poval.language_id = '" . $languages_id . "'";
	  $attributes = tep_db_query($attributes_query);
    } else {
	  $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'");
    }
    $attributes_values = tep_db_fetch_array($attributes);
// BOF Separate Pricing Per Customer attribute_groups mod
 if (isset($_SESSION['sppc_customer_group_id']) && $_SESSION['sppc_customer_group_id'] != '0') {
   $attributes_group_query = tep_db_query("select pag.options_values_price, pag.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa left join " . TABLE_PRODUCTS_ATTRIBUTES_GROUPS . " pag using(products_attributes_id) where pa.products_id = '" . tep_get_prid($order->products[$i]['id']) . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pag.customers_group_id = '" . (int)$_SESSION['sppc_customer_group_id'] . "'");
  if ($attributes_group = tep_db_fetch_array($attributes_group_query)) {
   $attributes_values['options_values_price'] = $attributes_group['options_values_price'];
   $attributes_values['price_prefix'] = $attributes_group['price_prefix'];
  }
 }
// EOF Separate Pricing Per Customer attribute_groups mod

    $sql_data_array = array('orders_id' => $insert_id,
						    'orders_products_id' => $order_products_id,
						    'products_options' => $attributes_values['products_options_name'],
						    'products_options_values' => $attributes_values['products_options_values_name'],
						    'options_values_price' => $attributes_values['options_values_price'],
						    'price_prefix' => $attributes_values['price_prefix']);
    tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);
    if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) {
// BOF Super Download Shop v1.0 mod
	  if (DOWNLOADS_CONTROLLER_FILEGROUP_STATUS != 'Yes' || !strstr($attributes_values['products_attributes_filename'], 'Group_Files-')) {
	    $sql_data_array = array('orders_id' => $insert_id,
							    'orders_products_id' => $order_products_id,
							    'orders_products_filename' => $attributes_values['products_attributes_filename'],
							    'download_maxdays' => $attributes_values['products_attributes_maxdays'],
							    'download_count' => $attributes_values['products_attributes_maxcount']);
	    tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
	  } else {
	    $filegroup_array = explode('Group_Files-', $attributes_values['products_attributes_filename']);
	    $filegroup_id = $filegroup_array[1];
	    $groupfiles_query = tep_db_query("select download_group_filename
										  from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD_GROUPS_FILES . "
										  where download_group_id = '" . (int)$filegroup_id . "'");
	    while ($groupfile_array = tep_db_fetch_array($groupfiles_query)) {
		  $sql_data_array = array('orders_id' => $insert_id,
								  'orders_products_id' => $order_products_id,
								  'orders_products_filename' => $groupfile_array['download_group_filename'],
								  'download_maxdays' => $attributes_values['products_attributes_maxdays'],
								  'download_count' => $attributes_values['products_attributes_maxcount']);
		  tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
	    }
	  }
// EOF Super Download Shop v1.0 mod
    }
    $products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
  }
   }
//------insert customer choosen option eof ----
//BEGIN SEND HTML MAIL//
   $products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n";
   $products_quantity .= nl2br($order->products[$i]['qty'] . "\n");
$products_name .= nl2br("" . $order->products[$i]['name'] . $products_ordered_attributes . "\n");

if (!tep_not_null($order->products[$i]['model'])) {
   $products_model .= ''.EMAIL_NO_MODEL.'' ;
	 }
   else
   $products_model .= nl2br($order->products[$i]['model'] . "\n");


   $products_price .= nl2br($currencies->format($order->products[$i]['final_price'] * $order->products[$i]['qty']) . "\n");
}

for ($i=0; $i<sizeof($order_totals); $i++) {
   $Vartaxe .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
 }

if ($order->content_type != 'virtual') {
   $Varaddress .= tep_address_label($customer_id, $sendto, 0, '', "\n") ;
 }
   if (is_object($$payment)) {
   $Varmodepay .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
			    EMAIL_SEPARATOR . "\n";
   $payment_class = $$payment;
   $Varmodpay .= $payment_class->title . "\n";
   if ($payment_class->email_footer) {
  $Varmodpay .= $payment_class->email_footer . "\n\n";
   }
 }
$Varlogo = ''.VARLOGO.'' ;
$Vartable1 = ''.VARTABLE1.'' ;
$Vartable2 = ''.VARTABLE2.'' ;
$Vartext1 = ' <b>' . EMAIL_TEXT_DEAR . ' ' . $order->customer['firstname'] . ' ' . $order->customer['lastname'] .' </b><br>' . EMAIL_MESSAGE_GREETING ;
$Vartext2 = '    ' . EMAIL_TEXT_ORDER_NUMBER . ' <STRONG> ' . $insert_id . '</STRONG><br>' . EMAIL_TEXT_DATE_ORDERED . ': <strong>' . strftime(DATE_FORMAT_LONG) . '</strong><br><a href="' . HTTP_SERVER . DIR_WS_CATALOG . 'account_history_info.php?order_id=' . $insert_id .'">' . EMAIL_TEXT_INVOICE_URL . '</a>' ;
$Varmailfooter = ''.VARMAILFOOTER.'' ;
$VarArticles= ''.EMAIL_TEXT_PRODUCTS_ARTICLES.'' ;
$VarModele= ''.EMAIL_TEXT_PRODUCTS_MODELE.'' ;
$VarQte= ''.EMAIL_TEXT_PRODUCTS_QTY .'' ;
$VarTotal= ''.EMAIL_TEXT_TOTAL.'' ;
$VarAddresship = ''.EMAIL_TEXT_DELIVERY_ADDRESS.'' ;
$VarAddressbill = ''.EMAIL_TEXT_BILLING_ADDRESS.'' ;
$Varmetodpaye = ''.EMAIL_TEXT_PAYMENT_METHOD.'' ;
$Vardetail = ''.DETAIL .'' ;
$Varhttp = ''.VARHTTP.'';
$Varstyle = ''.VARSTYLE.'';
$Varshipaddress =''.tep_address_label($customer_id, $sendto).'';
require(DIR_WS_MODULES . 'email/html_checkout_process.php');
$email_order = $html_email_order ;
// lets start with the email confirmation
if (EMAIL_USE_HTML == 'true') {
$email_order;
}
else
{
$email_order = STORE_NAME . "\n" .
			 EMAIL_SEPARATOR . "\n" .
			 EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
			 EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" .
			 EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
 if ($order->info['comments']) {
+    $email_order .= tep_db_output($order->info['comments']) . "\n\n";
 }
 $email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
			  EMAIL_SEPARATOR . "\n" .
			  $products_ordered .
			  EMAIL_SEPARATOR . "\n";
 for ($i=0; $i<sizeof($order_totals); $i++) {
   $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
 }
 if ($order->content_type != 'virtual') {
   $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
			    EMAIL_SEPARATOR . "\n" .
			    tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
 }
 $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
			  EMAIL_SEPARATOR . "\n" .
			  tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
 if (is_object($$payment)) {
   $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
			    EMAIL_SEPARATOR . "\n";
   $payment_class = $$payment;
   $email_order .= $payment_class->title . "\n\n\n\n\n";
   if ($payment_class->email_footer) {
  $email_order .= $payment_class->email_footer . "\n\n";
   }
 }
 $email_order .= "\n" . EMAIL_TEXT_FOOTER . "\n" .
				    HTTP_SERVER . DIR_WS_CATALOG . "\n" .
				    EMAIL_TEXT_FOOTERR . "\n" ;
}

 tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, nl2br($email_order), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, '');
 $email_order=preg_replace("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/","<a href=\"\\0\">\\0</a>", $email_order);
// send emails to other people
 if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
$email_order = $html_email_order ;
if (EMAIL_USE_HTML == 'true') {
$email_order;
}
else
{
$email_order = STORE_NAME . "\n" .
			 EMAIL_SEPARATOR . "\n" .
			 EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
			 EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" .
			 EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
 if ($order->info['comments']) {
+    $email_order .= tep_db_output($order->info['comments']) . "\n\n";
 }
 $email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
			  EMAIL_SEPARATOR . "\n" .
			  $products_ordered .
			  EMAIL_SEPARATOR . "\n";
 for ($i=0; $i<sizeof($order_totals); $i++) {
   $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
 }
 if ($order->content_type != 'virtual') {
   $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
			    EMAIL_SEPARATOR . "\n" .
			    tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
 }
 $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
			  EMAIL_SEPARATOR . "\n" .
			  tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
 if (is_object($$payment)) {
   $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
			    EMAIL_SEPARATOR . "\n";
   $payment_class = $$payment;
   $email_order .= $payment_class->title . "\n\n\n\n\n";
   if ($payment_class->email_footer) {
  $email_order .= $payment_class->email_footer . "\n\n";
   }
 }
 $email_order .= "\n" . EMAIL_TEXT_FOOTER . "\n" .
				    HTTP_SERVER . DIR_WS_CATALOG . "\n" .
				    EMAIL_TEXT_FOOTERR . "\n" ;
}
   tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, nl2br($email_order), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, '');
   $email_order=preg_replace("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/","<a href=\"\\0\">\\0</a>", $email_order);
 }
//END SEND HTML MAIL//
// load the after_process function from the payment modules
 $payment_modules->after_process();
 $cart->reset(true);
// unregister session variables used during checkout
 tep_session_unregister('sendto');
 tep_session_unregister('billto');
 tep_session_unregister('shipping');
 tep_session_unregister('payment');
 tep_session_unregister('comments');
 //kgt - discount coupons
 tep_session_unregister('coupon');
 //end kgt - discount coupons
 tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
 require(DIR_WS_INCLUDES . 'application_bottom.php');
?>


Getting the Phoenix off the ground

Share this post


Link to post
Share on other sites

Hi all,

 

Love the contrib. But has anyone succesfully integrated it with sending newsletters in HTML, as in the version for 2.3.1 newsletters still get send in plain text. I would like to send newsletters in html using a uhtml template but can't figure out how to do it.

 

So if anyone knows, thanks in advance for the help.

 

Regards

Share this post


Link to post
Share on other sites

Hello All !

 

 

How to encode mail order? my website is in UTF-8, I get the mail order with symbols like this:

 

€ = ≠¬

é = é

etc...

 

How to convert emails to UTF-8?

 

that this change in general.php ..??? :

 

// Instantiate a new mail object
   $message = new email(array('X-Mailer: osCommerce'));

   // Build the text version
   $text = strip_tags($email_text);
   if (EMAIL_USE_HTML == 'true') {
  $message->add_html($email_text, $text);
   } else {
  $message->add_text($text);
   }

 

Thank you ! :thumbsup:

Share this post


Link to post
Share on other sites

I of course placed in:

 

module/UHtmlEmails/Forest Green/checkout_process.php

 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

 

But this does not solved my problem :'(

Edited by mamegaga

Share this post


Link to post
Share on other sites

Hi I'm using 2.3.1 and this seems to work apart from two issues:

 

 

a) Existing users - if they ask to reset their password - no password is sent an email. this only works of HTML is turned OFF

 

 

 

B) New customers signing up Don't get an initial email.

 

Again, all works if HTML is turned off.

 

 

 

Any ideas??

Share this post


Link to post
Share on other sites

Hi Olof,

 

I just downloaded your contribution but I cannot find the install text, there is only a small text in Portuguese and 5 php files, is that okey?

Share this post


Link to post
Share on other sites

I am completly stuck on this one....

 

for some odd reason I really can't find it isn't sending welcome emails in HTML. Here is the create account.php snippet:

if (EMAIL_USE_HTML == 'true') {
require(DIR_WS_MODULES . 'UHtmlEmails/'. ULTIMATE_HTML_EMAIL_LAYOUT .'/create_account.php');
$email_text = $html_email;

}else{
bla bla bla

No I have no idea why but EMAIL_USE_HTML content is ALWAYS false. No mather what it selected.

in the DB:

it is 'true' but for some odd reason it isn't getting selected!

 

i'm on 2.2RC2 heavy modified

 

Anyone knows why?

Edited by nielss

Share this post


Link to post
Share on other sites

ok check this:

 

create account.php

 

tep_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);

 

$address_id = tep_db_insert_id();

 

tep_db_query("update " . TABLE_CUSTOMERS . " set customers_default_address_id = '" . (int)$address_id . "' where customers_id = '" . (int)$customer_id . "'");

 

tep_db_query("insert into " . TABLE_CUSTOMERS_INFO . " (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('" . (int)$customer_id . "', '0', now())");

 

if (SESSION_RECREATE == 'True') {

tep_session_recreate();

}

 

$customer_first_name = $firstname;

$customer_default_address_id = $address_id;

$customer_country_id = $country;

$customer_zone_id = $zone_id;

tep_session_register('customer_id');

tep_session_register('customer_first_name');

tep_session_register('customer_default_address_id');

tep_session_register('customer_country_id');

tep_session_register('customer_zone_id');

 

// reset session token

$sessiontoken = md5(tep_rand() . tep_rand() . tep_rand() . tep_rand());

 

// restore cart contents

$cart->restore_contents();

 

// build the message content

//--- Beginning of addition: Ultimate HTML Emails ---//

if (EMAIL_USE_HTML == 'true') {

require(DIR_WS_MODULES . 'UHtmlEmails/'. ULTIMATE_HTML_EMAIL_LAYOUT .'/create_account.php');

$email_text = $html_email;

}else{

//--- End of addition: Ultimate HTML Emails ---//

$name = $firstname . ' ' . $lastname;

 

if (ACCOUNT_GENDER == 'true') {

if ($gender == 'm') {

$email_text = sprintf(EMAIL_GREET_MR, $lastname);

} else {

$email_text = sprintf(EMAIL_GREET_MS, $lastname);

}

} else {

$email_text = sprintf(EMAIL_GREET_NONE, $firstname);

}

 

$email_text .= EMAIL_WELCOME . EMAIL_TEXT . EMAIL_CONTACT . EMAIL_WARNING;

//--- Beginning of addition: Ultimate HTML Emails ---//

}

 

if(ULTIMATE_HTML_EMAIL_DEVELOPMENT_MODE === 'true'){

//Save the contents of the generated html email to the harddrive in .htm file. This can be practical when developing a new layout.

$TheFileName = 'Last_mail_from_create_account.php.htm';

$TheFileHandle = fopen($TheFileName, 'w') or die("can't open error log file");

fwrite($TheFileHandle, $email_text);

fclose($TheFileHandle);

}

//--- End of addition: Ultimate HTML Emails ---//

tep_mail($name, $email_address, EMAIL_SUBJECT, $email_text, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);

 

tep_redirect(tep_href_link(FILENAME_CREATE_ACCOUNT_SUCCESS, '', 'SSL'));

}

}

 

$breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_CREATE_ACCOUNT, '', 'SSL'));

 

require(DIR_WS_INCLUDES . 'template_top.php');

require('includes/form_check.js.php');

?>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×