Results 1 to 3 of 3
  1. #1
    Join Date
    Apr 2009
    Location
    Chicago, IL
    Posts
    45
    Plugin Contributions
    0

    Default Duplicate Order Confirmation Emails

    Hi all,

    Whenever a customer makes a purchase, they get two confirmation emails. I looked at the Duplicate Orders thread, but my issue is different as it's just the order confirmation that's being duplicated. The order runs through once, and I get one new order email to my admin account.

    I turned on the email archiving and checked the database and the two confirmation emails are the exact same (from the checkout module) and sent 1 to 2 seconds apart.

    I'm running v. 1.3.8a with the Fast and Easy Checkout Mod and rl_invoice3 (not active but installed). You can see the additions made by these two modules in the code below.

    I've tried turning HTML emails on and off, I've made transactions with different payment types and I've tried turning FEC on and off and I still get the same duplicate confirmation emails. I just can't figure out why the ONLY thing duplicating would be the confirmation emails. Unfortunately, I didn't have the email archiving turned on until the beginning of this month and I installed FEC around the 26th of February and the invoice mod even earlier than that, so I can't pinpoint the culprit by the date of installation. Are there any other files that could be the source of this issue other than order.php?

    Here's the send_order_email code from my order.php:

    Code:
      function send_order_email($zf_insert_id, $zf_mode) {
        global $currencies, $order_totals, $zco_notifier;
    
        //      print_r($this);
        //      die();
        if ($this->email_low_stock != '' and SEND_LOWSTOCK_EMAIL=='1') {
          // send an email
          $email_low_stock = SEND_EXTRA_LOW_STOCK_EMAIL_TITLE . "\n\n" . $this->email_low_stock;
          zen_mail('', SEND_EXTRA_LOW_STOCK_EMAILS_TO, EMAIL_TEXT_SUBJECT_LOWSTOCK, $email_low_stock, STORE_OWNER, EMAIL_FROM, array('EMAIL_MESSAGE_HTML' => nl2br($email_low_stock)),'low_stock');
        }
    
        // lets start with the email confirmation
        // make an array to store the html version
        $html_msg=array();
    
    // COWOA Conditional
        if ($_SESSION['COWOA'])
        {
    	$invoiceInfo="";
    	$htmlInvoiceURL="";
    	$htmlInvoiceValue="";
        }
        else
        {
          $invoiceInfo=EMAIL_TEXT_INVOICE_URL . ' ' . zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false) . "\n\n";
    	$htmlInvoiceURL=EMAIL_TEXT_INVOICE_URL_CLICK;;
    	$htmlInvoiceValue=zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false);
        }
        //intro area
        $email_order = EMAIL_TEXT_HEADER . EMAIL_TEXT_FROM . STORE_NAME . "\n\n" .
        $this->customer['firstname'] . ' ' . $this->customer['lastname'] . "\n\n" .
        EMAIL_THANKS_FOR_SHOPPING . "\n" . EMAIL_DETAILS_FOLLOW . "\n" .
        EMAIL_SEPARATOR . "\n" .
        EMAIL_TEXT_ORDER_NUMBER . ' ' . $zf_insert_id . "\n" .
        EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n" . $invoiceInfo;
        $html_msg['EMAIL_TEXT_HEADER']     = EMAIL_TEXT_HEADER;
        $html_msg['EMAIL_TEXT_FROM']       = EMAIL_TEXT_FROM;
        $html_msg['INTRO_STORE_NAME']      = STORE_NAME;
        $html_msg['EMAIL_THANKS_FOR_SHOPPING'] = EMAIL_THANKS_FOR_SHOPPING;
        $html_msg['EMAIL_DETAILS_FOLLOW']  = EMAIL_DETAILS_FOLLOW;
        $html_msg['INTRO_ORDER_NUM_TITLE'] = EMAIL_TEXT_ORDER_NUMBER;
        $html_msg['INTRO_ORDER_NUMBER']    = $zf_insert_id;
        $html_msg['INTRO_DATE_TITLE']      = EMAIL_TEXT_DATE_ORDERED;
        $html_msg['INTRO_DATE_ORDERED']    = strftime(DATE_FORMAT_LONG);
        $html_msg['INTRO_URL_TEXT']        = $htmlInvoiceURL;
        $html_msg['INTRO_URL_VALUE']       = $htmlInvoiceValue;
    
        //comments area
        if ($this->info['comments']) {
          $email_order .= zen_db_output($this->info['comments']) . "\n\n";
          $html_msg['ORDER_COMMENTS'] = nl2br(zen_db_output($this->info['comments']));
        } else {
          $html_msg['ORDER_COMMENTS'] = '';
        }
    
        //products area
        $email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
        EMAIL_SEPARATOR . "\n" .
        $this->products_ordered .
        EMAIL_SEPARATOR . "\n";
        $html_msg['PRODUCTS_TITLE'] = EMAIL_TEXT_PRODUCTS;
        $html_msg['PRODUCTS_DETAIL']='<table class="product-details" border="0" width="100%" cellspacing="0" cellpadding="2">' . $this->products_ordered_html . '</table>';
    
        //order totals area
        $html_ot .= '<td class="order-totals-text" align="right" width="100%">' . '&nbsp;' . '</td> ' . "\n" . '<td class="order-totals-num" align="right" nowrap="nowrap">' . '---------' .'</td> </tr>' . "\n" . '<tr>';
        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";
          $html_ot .= '<td class="order-totals-text" align="right" width="100%">' . $order_totals[$i]['title'] . '</td> ' . "\n" . '<td class="order-totals-num" align="right" nowrap="nowrap">' .($order_totals[$i]['text']) .'</td> </tr>' . "\n" . '<tr>';
        }
        $html_msg['ORDER_TOTALS'] = '<table border="0" width="100%" cellspacing="0" cellpadding="2"> ' . $html_ot . ' </table>';
    
        //addresses area: Delivery
        $html_msg['HEADING_ADDRESS_INFORMATION']= HEADING_ADDRESS_INFORMATION;
        $html_msg['ADDRESS_DELIVERY_TITLE']     = EMAIL_TEXT_DELIVERY_ADDRESS;
        $html_msg['ADDRESS_DELIVERY_DETAIL']    = ($this->content_type != 'virtual') ? zen_address_label($_SESSION['customer_id'], $_SESSION['sendto'], true, '', "<br />") : 'n/a';
        $html_msg['SHIPPING_METHOD_TITLE']      = HEADING_SHIPPING_METHOD;
        $html_msg['SHIPPING_METHOD_DETAIL']     = (zen_not_null($this->info['shipping_method'])) ? $this->info['shipping_method'] : 'n/a';
    
        if ($this->content_type != 'virtual') {
          $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
          EMAIL_SEPARATOR . "\n" .
          zen_address_label($_SESSION['customer_id'], $_SESSION['sendto'], 0, '', "\n") . "\n";
        }
    
        //addresses area: Billing
        $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
        EMAIL_SEPARATOR . "\n" .
        zen_address_label($_SESSION['customer_id'], $_SESSION['billto'], 0, '', "\n") . "\n\n";
        $html_msg['ADDRESS_BILLING_TITLE']   = EMAIL_TEXT_BILLING_ADDRESS;
        $html_msg['ADDRESS_BILLING_DETAIL']  = zen_address_label($_SESSION['customer_id'], $_SESSION['billto'], true, '', "<br />");
    
        if (is_object($GLOBALS[$_SESSION['payment']])) {
          $cc_num_display = (isset($this->info['cc_number']) && $this->info['cc_number'] != '') ? substr($this->info['cc_number'], 0, 4) . str_repeat('X', (strlen($this->info['cc_number']) - 8)) . substr($this->info['cc_number'], -4) . "\n\n" : '';
          $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
          EMAIL_SEPARATOR . "\n";
          $payment_class = $_SESSION['payment'];
          $email_order .= $GLOBALS[$payment_class]->title . "\n\n";
          $email_order .= (isset($this->info['cc_type']) && $this->info['cc_type'] != '') ? $this->info['cc_type'] . ' ' . $cc_num_display . "\n\n" : '';
          $email_order .= ($GLOBALS[$payment_class]->email_footer) ? $GLOBALS[$payment_class]->email_footer . "\n\n" : '';
        } else {
          $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
          EMAIL_SEPARATOR . "\n";
          $email_order .= PAYMENT_METHOD_GV . "\n\n";
        }
        $html_msg['PAYMENT_METHOD_TITLE']  = EMAIL_TEXT_PAYMENT_METHOD;
        $html_msg['PAYMENT_METHOD_DETAIL'] = (is_object($GLOBALS[$_SESSION['payment']]) ? $GLOBALS[$payment_class]->title : PAYMENT_METHOD_GV );
        $html_msg['PAYMENT_METHOD_FOOTER'] = (is_object($GLOBALS[$_SESSION['payment']]) && $GLOBALS[$payment_class]->email_footer != '') ? nl2br($GLOBALS[$payment_class]->email_footer) : (isset($this->info['cc_type']) && $this->info['cc_type'] != '' ? $this->info['cc_type'] . ' ' . $cc_num_display . "\n\n" : '');
    
        // include disclaimer
        $email_order .= "\n-----\n" . sprintf(EMAIL_DISCLAIMER, STORE_OWNER_EMAIL_ADDRESS) . "\n\n";
        // include copyright
        $email_order .= "\n-----\n" . EMAIL_FOOTER_COPYRIGHT . "\n\n";
    
        while (strstr($email_order, '&nbsp;')) $email_order = str_replace('&nbsp;', ' ', $email_order);
    
        $html_msg['EMAIL_FIRST_NAME'] = $this->customer['firstname'];
        $html_msg['EMAIL_LAST_NAME'] = $this->customer['lastname'];
        //  $html_msg['EMAIL_TEXT_HEADER'] = EMAIL_TEXT_HEADER;
        $html_msg['EXTRA_INFO'] = '';
        $zco_notifier->notify('NOTIFY_ORDER_INVOICE_CONTENT_READY_TO_SEND', array('zf_insert_id' => $zf_insert_id, 'text_email' => $email_order, 'html_email' => $html_msg));
        zen_mail($this->customer['firstname'] . ' ' . $this->customer['lastname'], $this->customer['email_address'], EMAIL_TEXT_SUBJECT . EMAIL_ORDER_NUMBER_SUBJECT . $zf_insert_id, $email_order, STORE_NAME, EMAIL_FROM, $html_msg, 'checkout', $this->attachArray);
    
        // BOF rl_invoice3
        $this->attachArray = array();
        if(RL_INVOICE3_SEND_PDF=='1'){
            if(!(0==$this->info['total'] && RL_INVOICE3_NOT_NULL_INVOICE==0)){     
                if( (defined('RL_INVOICE3_ORDERSTATUS')) && ($this->info['order_status'] >= RL_INVOICE3_ORDERSTATUS)) {
                    require_once(DIR_WS_INCLUDES . 'classes/class.rl_invoice3.php');
                    
                    $pdfT = new rl_invoice3($zf_insert_id, $paper['orientation'], $paper['unit'], $paper['format']);
                    $pdfT -> createPdfFile(true);
                    $this->attachArray = $pdfT->getPDFAttachments();
                    #$this->attachArray[] = array('file'=>$x, 'mime_type'=>'pdf');
                }
            }
        }
        zen_mail($this->customer['firstname'] . ' ' . $this->customer['lastname'], $this->customer['email_address'], EMAIL_TEXT_SUBJECT . EMAIL_ORDER_NUMBER_SUBJECT . $zf_insert_id, $email_order, STORE_NAME, EMAIL_FROM, $html_msg, 'checkout', $this->attachArray);
        // EOF rl_invoice3
    
    
        // send additional emails
        if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
          $extra_info=email_collect_extra_info('','', $this->customer['firstname'] . ' ' . $this->customer['lastname'], $this->customer['email_address'], $this->customer['telephone']);
          $html_msg['EXTRA_INFO'] = $extra_info['HTML'];
    
          if ($GLOBALS[$_SESSION['payment']]->auth_code || $GLOBALS[$_SESSION['payment']]->transaction_id) {
            $pmt_details = 'AuthCode: ' . $GLOBALS[$_SESSION['payment']]->auth_code . '  TransID: ' . $GLOBALS[$_SESSION['payment']]->transaction_id . "\n\n";
            $email_order = $pmt_details . $email_order;
            $html_msg['EMAIL_TEXT_HEADER'] = nl2br($pmt_details) . $html_msg['EMAIL_TEXT_HEADER'];
          }
    
          zen_mail('', SEND_EXTRA_ORDER_EMAILS_TO, SEND_EXTRA_NEW_ORDERS_EMAILS_TO_SUBJECT . ' ' . EMAIL_TEXT_SUBJECT . EMAIL_ORDER_NUMBER_SUBJECT . $zf_insert_id,
          $email_order . $extra_info['TEXT'], STORE_NAME, EMAIL_FROM, $html_msg, 'checkout_extra', $this->attachArray);
        }
        $zco_notifier->notify('NOTIFY_ORDER_AFTER_SEND_ORDER_EMAIL');
      }
    
    }
    Thank you for looking!

  2. #2
    Join Date
    Apr 2009
    Location
    Chicago, IL
    Posts
    45
    Plugin Contributions
    0

    Default Re: Duplicate Order Confirmation Emails

    Wow, it was staring me right in the face - I had accidentally duplicated this guy when I updated the order class to include FEC:
    Code:
    zen_mail($this->customer['firstname'] . ' ' . $this->customer['lastname'], $this->customer['email_address'], EMAIL_TEXT_SUBJECT . EMAIL_ORDER_NUMBER_SUBJECT . $zf_insert_id, $email_order, STORE_NAME, EMAIL_FROM, $html_msg, 'checkout', $this->attachArray);

  3. #3
    Join Date
    Sep 2009
    Location
    Stuart, FL
    Posts
    13,892
    Plugin Contributions
    96

    Default Re: Duplicate Order Confirmation Emails

    Thanks for this, I noticed this too after I'd installed rl_invoice3 and was wondering where it came from!

 

 

Similar Threads

  1. Duplicate Orders/Order Confirmation
    By Beer_man in forum Managing Customers and Orders
    Replies: 130
    Last Post: 16 Sep 2017, 07:10 PM
  2. v154 Order confirmation emails and Contact Us emails not being received
    By jcrewe in forum General Questions
    Replies: 5
    Last Post: 22 Mar 2015, 06:36 PM
  3. v153 Additional Order Confirmation & Order Update emails
    By dchquilling in forum General Questions
    Replies: 2
    Last Post: 13 Oct 2014, 05:04 PM
  4. Help: Not receiving [NEW ORDER] Order Confirmation Emails!
    By RocketFoot in forum General Questions
    Replies: 1
    Last Post: 15 Feb 2011, 05:55 PM
  5. Replies: 49
    Last Post: 23 Feb 2010, 08:52 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
disjunctive-egg