Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Contribution] U HTML Emails


Recommended Posts

Well actually the reason I created this contribution were that I wanted html mails for my own site and I didn't find any contribution I felt were good enough.

 

If it is any good is up to you to decide, but I think it is very good ;)

 

No I do not think it is incompatible with anything.

The layouts must be programmed carfully due to the speciall rules for css and scripts in html emails that different mail clients have.

The provided layouts are working all ok I think.

 

 

Hi Olof,

 

There's a couple of HTML email addons out there. Is there anything your contib does better then the other ones?

Do you know if it is incompatible with any mail client or webmail?

 

Thanks,

Fredrik

Link to comment
Share on other sites

If you do not use programms for pc i can recommend SourceGear Diff Merge. That is a similar program i just found. It is free and can do almost the same things as beyond compare.

 

Ok you say that the dropdown is blank...

Take a look at the function:

function tep_cfg_pull_down_uhtml_email_layout_list($default_id)

in

"catalog/admin/includes/functions/general.php"

Is searches for the "create_account_XXXX.php" files in the folder

DIR_FS_CATALOG_MODULES.'UHtmlEmails/'

 

The layouts displayed in the dropdown are the different XXXX found.

 

If it is blank; no files were found.

 

Make sure the files are in the directory DIR_FS_CATALOG_MODULES.'UHtmlEmails/

Actually, BBEdit does a great job as well.

 

Anyway, I found the problem. I'm on 1.1 DuHuh

Link to comment
Share on other sites

Hello nice work with this but I am only receiving html emails when using "Cash on delivery, cheque or postal orders"

If a customer pays via paypal or protx the get a normal text email.

Im have tried with both supplied layouts.

 

Also with development mode = True. And pay by cheque/postal order i get this error....

Warning: fopen(Last_mail_from_checkout_process.php.htm) [function.fopen]: failed to open stream: Permission denied in /home/ians/public_html/checkout_process.php on line 297
can't open error log file

 

Am I doing something wrong, I have gone through the install.txt twice and checked all files and everything seems fine.

I updated the database via phpmyadmin

Link to comment
Share on other sites

Right I checked again and found I had made a mistake with inserting some code...

 

MODIFY THE FILE catalog/admin/orders.php

########		  FIND		   ########

if (isset($HTTP_POST_VARS['notify_comments']) && ($HTTP_POST_VARS['notify_comments'] == 'on')) {
		  $notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n\n";
}

I inseted BEFORE the last bracket :blush:

 

Everything works now, "Order Process" emails are in HTML form from Protx and Cheque/Postal orders BUT bloody Paypal is still playing up.

If someone pays using Paypal and completes the checkout process. The "Order Process" is in normal text form.

If I update that orders status though the email is sent in HTML.

 

I am using PayPal_Shopping_Cart_IPN_v3.1.4 by the way

 

Crazy

Edited by SimpleSi
Link to comment
Share on other sites

SimpleSi,

 

I am having the sample problem as you with getting the contrib to work with PayPal IPN. After researching this forum and no finding a direct answer, I found that by applying the following changes to the ipn.php file located in catalog/ext/modules/payment/paypal_ipn/ipn.php.

 

Find:

          $email_order = STORE_NAME . "\n" . 

 

Insert this on the line above:

// EOF content type fix by AlexStudio
// $order variables have been changed from checkout_process to work with the variables from the function query () instead of cart () in the order class
//---  Beginning of addition: Ultimate HTML Emails  ---//
if (EMAIL_USE_HTML == 'true') {
require(DIR_WS_MODULES . 'UHtmlEmails/checkout_process_'. ULTIMATE_HTML_EMAIL_LAYOUT .'.php');
$email_order = $html_email;
}else{//Send text email
//---  End of addition: Ultimate HTML Emails  ---//
         $order = new order($insert_id);

 

The line $order = new order($insert_id); may not be necessary. I added from another mod, I think. Just delete it if it doesn't work for you.

 

Find:

          tep_mail($order->customer['name'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);

 

Insert this on the line above:

//---  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_checkout_process.php.htm';
$TheFileHandle = fopen($TheFileName, 'w') or die("can't open error log file");
fwrite($TheFileHandle, $email_order);
fclose($TheFileHandle);
}
//---  End of addition: Ultimate HTML Emails  ---// 

 

This will generate the HTML email when the paypal ipn is used for checkout, however I'm now having a problem getting my order number to display. If any has an idea of why this is happening, I'm all ears. Also note that I am using PayPal IPN v2.3.3.

 

Thanks,

Walt

Link to comment
Share on other sites

hi there

i really love this contri and is working great but on some products we use product atributes options if the order comes in the email looks fine but didnt add the product attributes right its mixed up

 

any help

danta67 fixed it my mistake

Edited by danta67
Link to comment
Share on other sites

SimpleSi,

 

I am having the sample problem as you with getting the contrib to work with PayPal IPN. After researching this forum and no finding a direct answer, I found that by applying the following changes to the ipn.php file located in catalog/ext/modules/payment/paypal_ipn/ipn.php.

 

Find:

          $email_order = STORE_NAME . "\n" . 

 

Insert this on the line above:

// EOF content type fix by AlexStudio
// $order variables have been changed from checkout_process to work with the variables from the function query () instead of cart () in the order class
//---  Beginning of addition: Ultimate HTML Emails  ---//
if (EMAIL_USE_HTML == 'true') {
require(DIR_WS_MODULES . 'UHtmlEmails/checkout_process_'. ULTIMATE_HTML_EMAIL_LAYOUT .'.php');
$email_order = $html_email;
}else{//Send text email
//---  End of addition: Ultimate HTML Emails  ---//
         $order = new order($insert_id);

 

The line $order = new order($insert_id); may not be necessary. I added from another mod, I think. Just delete it if it doesn't work for you.

 

Find:

          tep_mail($order->customer['name'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);

 

Insert this on the line above:

//---  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_checkout_process.php.htm';
$TheFileHandle = fopen($TheFileName, 'w') or die("can't open error log file");
fwrite($TheFileHandle, $email_order);
fclose($TheFileHandle);
}
//---  End of addition: Ultimate HTML Emails  ---// 

 

This will generate the HTML email when the paypal ipn is used for checkout, however I'm now having a problem getting my order number to display. If any has an idea of why this is happening, I'm all ears. Also note that I am using PayPal IPN v2.3.3.

 

Thanks,

Walt

 

If you take a look at your module DIR_WS_MODULES . 'UHtmlEmails/checkout_process_'. ULTIMATE_HTML_EMAIL_LAYOUT .'.php you will find that the variable supposed to contain the order number is called: $insert_id

This variable is normaly set in checkout_process.php but if you are running this module from another file you should make sure to set this variable in that document. This goes for all variables in the module. You should check that they all exist in the file in which you include the module.

 

Regards, Olof

Link to comment
Share on other sites

hi there

i really love this contri and is working great but on some products we use product atributes options if the order comes in the email looks fine but didnt add the product attributes right its mixed up

 

any help

danta67 fixed it my mistake

 

Hi Danta,

Thank you for liking my contribution :lol:

Would you please describe your error more in detail. Please include as much information as possible so I can help you.

Or have you solved this problem of yours allready?

 

Regards, Olof

Link to comment
Share on other sites

Any plans to incorporate Notifications & Tell a Friend?

 

After the beauty of U HTML, plain text is ugly !!!!!!!!

 

Well this is a good idea. "Password fogotten" emails should allso be covered. If I get any freetime from school I will most truly fix this. The plugin should cover all emails sent from the store, not only the most important ones. This makes sense.

Link to comment
Share on other sites

Great contribution!! Works perfectly. I only have a guestion about U HTML Emails in combination with Paypal IPN.

 

Does anybody know how to put the Firstname, lastname, shippingcost + total amount in the e-mail in combination with Paypal IPN ?

 

Thx in advanced

Link to comment
Share on other sites

Great contribution!! Works perfectly. I only have a guestion about U HTML Emails in combination with Paypal IPN.

 

Does anybody know how to put the Firstname, lastname, shippingcost + total amount in the e-mail in combination with Paypal IPN ?

 

Thx in advanced

 

Which Paypal_IPN contrib are you using ?

Link to comment
Share on other sites

Hi I have a problem, do not modify DATABASE CHANGES

Run the 'Install.sql' file, for example using phpMyadmin.

This will create the configuration keys:

"E-mail Options" -> "Html Email Layout"

"E-mail Options" -> "Development mode"

Where I find the file and as install.sql change?

 

I have on my server installed directadminv1

 

Thanks

Link to comment
Share on other sites

Hi

 

Great idea!

 

Unfortunately it doesn't work with Fast Easy Checkout 3.2 v5.1 for RC2a.

 

I get the following error:

 

Warning: main(includes/modules/UHtmlEmails/checkout_process_Basic.php) [function.main]: failed to open stream: No such file or directory in xxxxxxxxxxxxxxxxxxxxxxxxx/checkout_process.php on line 256

 

Warning: main(includes/modules/UHtmlEmails/checkout_process_Basic.php) [function.main]: failed to open stream: No such file or directory in xxxxxxxxxxxxxxxxxxxxxxxx/checkout_process.php on line 256

 

Fatal error: main() [function.require]: Failed opening required 'includes/modules/UHtmlEmails/checkout_process_Basic.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/checkout_process.php on line 256

 

...and my code for checkout_process.php is:

 

<?php
/*
 $Id: checkout_process.php 1750 2007-12-21 05:20:28Z hpdl $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2007 osCommerce

 Released under the GNU General Public License
*/

////fec configuration
$allow_second_chance_account_in_email=0;// set to 1 to  allow create an account in email 
include('includes/application_top.php');
require(DIR_WS_LANGUAGES . $language . '/' . 'fast_account.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));
}
 }

 $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'], 
					  '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()', 
					  '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);

// initialized for the email confirmation
 $products_ordered = '';
 $subtotal = 0;
 $total_tax = 0;

 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 
						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 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'])) {
	  $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']) . "'");
	}
  }
}

// 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);

	$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'])) {
	  $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);
	}
	$products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
  }
}
//------insert customer choosen option eof ----
$total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']);
$total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty'];
$total_cost += $total_products_price;

$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";
 }

//fec start
// lets start with the email confirmation
 $email_order = STORE_NAME . "\n" . 
			 EMAIL_SEPARATOR . "\n" . 
			 EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n";
		   if (!tep_session_is_registered('createaccount'))
{ $email_order .= EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n";}
		  $email_order .=   EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
/////////////
$check_customer_query = tep_db_query("select customers_firstname, customers_lastname, customers_password, customers_id ,confirmation_key from " . TABLE_CUSTOMERS . " where customers_email_address = '" . $order->customer['email_address'] . "' AND createaccount='N'");

$check_customer = tep_db_fetch_array($check_customer_query);

$new_password = $check_customer['confirmation_key'];
///IMPORTANT YOU ADD THE NEXT FEW LINES IF YOU WANT TO OFFER SECOND CHANCE CREATE
//ACCOUNT IN EMAIL YOU CAN ALSO USE THIS VALUE TO INFORM THE CUSTOMER OF HIS
// AUTO GENERATED PASSWORD
if((tep_session_is_registered('createaccount'))&&($allow_second_chance_account_in_email == 1))
{
$email_order .= EMAIL_TEXT_INVOICE_PASSWORD . ' ' . tep_href_link('account_password_new.php', 'confirmation_password=' . $new_password.'&customers_id='.$check_customer['customers_id'], 'SSL', true) . "\n";
$email_order .= EMAIL_TEXT_INVOICE_PASSWORD_NOLINK. "\n";
}
//END OPTIONAL
////////////
 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";
//fast easy checkout end

 for ($i=0, $n=sizeof($order_totals); $i<$n; $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 .= $order->info['payment_method'] . "\n\n";
if ($payment_class->email_footer) { 
  $email_order .= $payment_class->email_footer . "\n\n";
}
 }
 tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);

// send emails to other people
 if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
 }

// 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');

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

 require(DIR_WS_INCLUDES . 'application_bottom.php');
?>

 

I like the html option but not sure where to go from here?

Edited by adam777
Link to comment
Share on other sites

does this contribution allow customers the choice to select email type as html or text during registration and also does it work with product attributes?

 

It does not allow customers the choice to select email type as html or text during registration.

It works with product attributes.

Link to comment
Share on other sites

  • 3 weeks later...

Hello all.

 

This is a great contribution and I want to thank Olof for sharing it with us.

 

I have a simple question . . . . I'm using the Forest Green email and I was wondering if there is a way to make the Store Name, that appears on the green portion (header) of the email, to show as an image? (I'd like to use my store logo image instead of just the name of the store)

 

Any help would be greatly appreciated.

 

Thank you! :thumbsup:

 

ski

Link to comment
Share on other sites

I have a simple question . . . . I'm using the Forest Green email and I was wondering if there is a way to make the Store Name, that appears on the green portion (header) of the email, to show as an image? (I'd like to use my store logo image instead of just the name of the store)

 

Never mind . . . . I figured it out on my own. ;)

 

 

Thanks again for this great contribution.

 

ski

Link to comment
Share on other sites

hi

 

I am trying to make it so that when the order status is updated a email is also sent to a person that packs my products and sends them to the customer. So I added the code in orders.php it sends the email but half of the varibles dont work like the customers address ect..

 

Here is the html code for the email:

<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=iso-8859-1">
<style type="text/css">
TD{FONT-FAMILY:Verdana,Tahoma,Arial,"Sans Serif";FONT-SIZE:10pt}
BODY{FONT-FAMILY:Verdana,Tahoma,Arial,"Sans Serif";FONT-SIZE:10pt}
.style2 {
font-size: 8pt;
font-style: italic;
}
.style3 {font-size: 8pt}
.style4 {color: #FFFFFF}
.style5 {color: #000000}
</style>
</head>
<body bgColor="#eeeeee">
<table cellSpacing="1" cellPadding="0" width="700" bgColor="#cccccc" border="0" align="center"><tr>
<td bgcolor="white">
<table cellSpacing="0" cellPadding="15" width="100%"><tr><td>
<table cellSpacing="0" cellPadding="0" width="100%" border="0"><tr>
<td><img src="' . HTTP_SERVER . '/site/shop/includes/modules/UHtmlEmails/files/header.gif" alt="Header" border="0"></td>
<td align="center"><div align="right"><img src="' . HTTP_SERVER . '/site/shop/includes/modules/UHtmlEmails/files/logo_shop.gif" alt="Logo" border="0"></div></td>
</tr></table>
<hr size="0" color="#CCCCCC">
<table cellspacing="0" cellpadding="10" width="100%"><tr><td><table cellspacing="0" cellpadding="10" width="100%">
<tr>
 <td>
<p><span class="style2"><small>This is an automated email regarding order: '.$oID.'</small></span><br>
</p>
<p>Order Details:</p>
<p><strong>Customer Name:</strong> '. $check_status['customers_name'] .'<br>
<table width="86%" border="0">
  <tr>
	<td width="79%" bgcolor="#333333"><strong><span class="style4">Customer Address: </span><br>
	</strong></td>
	<td width="3%" rowspan="2"> </td>
	<td width="18%" rowspan="2">Print Address</td>
  </tr>
  <tr>
	<td bgcolor="#CCCCCC">'. $check_status['delivery_street_address']. '<br>
'. $check_status['street_address']. '<br>
'. $check_status['suburb']. '<br>
'. $check_status['city']. '<br>
'. $check_status['postcode']. '<br>
'. $check_status['state']. '<br>
'. $check_status['country']. '</td>
  </tr>
</table>
<p> </p>
<table width="550" border="0">
  <tr bgcolor="#333333">
	<td width="43%"><div align="center" class="style1 style4"><strong>Product</strong></div></td>
	<td width="18%"><div align="center" class="style1 style4"><strong>Quantity</strong></div></td>
	</tr>';
		for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
		$html_ship_email .='
		<tr bgcolor="#CCCCCC">
	<td><div align="center" class="style1">' . $check_status[$i]["name"] . $html_ship_email_product_attributes[$i]. '</div></td>
	<td><div align="center" class="style1">' . $check_status[$i]["qty"].'</div></td>
	</tr>';
	}
	$html_ship_email .='
</table>
<p><br>
  <br>
  <br>
  </td>
</tr></table></td></tr></table>
<hr size="0" color="#CCCCCC">
<center>
 <br><small>© ' .$y. ' <a href="' . HTTP_SERVER . '" class="style5">' . STORE_NAME . '</a></small><br>
</center></td></tr></table></td></tr></table>
</body></html>

Link to comment
Share on other sites

Hi Mme,

I do not know if I'm answering your question realy, cause I'm not sure I understand your problem completely. One thing I saw however is that you use CSS code in the header of the file. This will not work.

 

If you would like to create a html email you should first make sure you know a bit about html emails.

Here are some liks that might be interesting for you:

 

http://www.xavierfrenette.com/articles/css...ort-in-webmail/

http://www.alistapart.com/articles/cssemail/

http://www.campaignmonitor.com/blog/archiv...e_to_css_1.html

http://www.reachcustomersonline.com/conten...27.00/index.php

 

As for the other problems with your email I do not know in wich file you include this file. I'm sure you can figure this problem out yourself. Good luck :)

Link to comment
Share on other sites

  • 1 month later...

Hi Olof,

 

Would it be possible for you to modify this contribution so that when I click 'Invoice' from the Orders section on the Admin side of my site it would show one of these HTML email templates instead of the boring standard OsCommerce invoice?

 

Thanks!

Link to comment
Share on other sites

Thanks for the contrib Olof... I have yet to install it but it appears to be just what one of our customer's needs. Question for you though, is the uhtml newsletter contribution able to have emails throttled? We have some customers with tens of thousands of email subscribers who would get black listed by their ISP's if they sent out that many newsletters at the same time.

 

Any insight is appreciated.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...