Post by sitina » Fri Feb 15, 2008 8:19 pm

I had to face following problem after the setup of opencart: all mail sent from the shop had all encoding inside message correct, but the subject and from field had some troubles displaying utf-8 fields.

That is why I tried to find some solution and finally found following: encode also the subject of mail and from field.

I added following function into mail.php

Code: Select all

function mime_header_encode($text, $encoding = "utf-8") {
    	return "=?$encoding?Q?" . imap_8bit($text) . "?=";
}
and called in on the last line of send() function :

Code: Select all

mail($to, $this->mime_header_encode($this->subject), $message, $headers);
and while constructing headers in the same function (is around line 91):

Code: Select all

$headers  = 'From: ' . $this->mime_header_encode($this->sender) . '<' . $this->from . '>' . $eol; 
$headers .= 'Reply-To: ' . $this->mime_header_encode($this->sender) . '<' . $this->from . '>' . $eol;   
Hope this will help to someone.

Regards,

Jiri Sitina
http://www.sitina.net

Newbie

Posts

Joined
Mon Feb 04, 2008 2:57 pm
Location - Czech republic

Post by Fresher » Tue Mar 18, 2008 11:23 pm

can you show me how the script with these changes looks like? because for me it doesnt work :/

New member

Posts

Joined
Thu Mar 13, 2008 5:40 pm

Post by Fresher » Mon Mar 31, 2008 5:25 am

my script looks like this, but no possitive result...

Code: Select all

<?php 
class ControllerMail extends Controller {
	var $error = array();
	 
	function index() {
		$request  =& $this->locator->get('request');
		$response =& $this->locator->get('response');
		$database =& $this->locator->get('database');
		$config   =& $this->locator->get('config');
		$url      =& $this->locator->get('url');
		$language =& $this->locator->get('language');
		$template =& $this->locator->get('template');
		$module   =& $this->locator->get('module');
		$session  =& $this->locator->get('session');
		$mail     =& $this->locator->get('mail');

		$language->load('controller/mail.php');

		$template->set('title', $language->get('heading_title'));
		
		if (($request->isPost()) && ($this->validate())) {
			$email = array();
			
			switch ($request->get('to', 'post')) {
				case 'newsletter':
					$results = $database->getRows("select email from customer where newsletter = '1'");
			
					foreach ($results as $result) {
						$email[] = $result['email'];
					}				
					break;
				case 'customer':
					$results = $database->getRows("select email from customer");
			
					foreach ($results as $result) {
						$email[] = $result['email'];
					}						
					break;
				default: 
					$result = $database->getRow("select email from customer where customer_id = '" . (int)$request->get('to', 'post') . "'");

					$email = $result['email'];
					break;
			}
function mime_header_encode($text, $encoding = "windows-1257") {
    	return "=?$encoding?Q?" . imap_8bit($text) . "?=";
}
			
			if ($email) {		
				$mail->setTo($email);
				$mail->setFrom($config->get('config_email'));
	    		$mail->setSender($config->get('config_store'));
	    		$mail->setSubject($request->get('subject', 'post'));
				$mail->setHtml($request->get('content', 'post'));	 
mail($to, $this->mime_header_encode($this->subject), $message, $headers);   	
	    		$mail->send();

			}
			
			$session->set('message', $language->get('text_message'));
					 
			$response->redirect($url->href('mail'));
		}

		$view = $this->locator->create('template');

		$view->set('heading_title', $language->get('heading_title'));
		$view->set('heading_description', $language->get('heading_description'));

		$view->set('text_newsletter', $language->get('text_newsletter'));
		$view->set('text_customer', $language->get('text_customer'));
		
		$view->set('entry_to', $language->get('entry_to'));
		$view->set('entry_subject', $language->get('entry_subject'));
		$view->set('entry_content', $language->get('entry_content'));
		
		$view->set('button_send', $language->get('button_send'));
		
		$view->set('error', @$this->error['message']);
		$view->set('error_to', @$this->error['to']);
		$view->set('error_subject', @$this->error['subject']);
		$view->set('error_content', @$this->error['content']);
		
		$view->set('message', $session->get('message'));
		
		$session->delete('message');
				
		$view->set('action', $url->ssl('mail'));
		
		$customer_data = array();
		
$headers  = 'From: ' . $this->mime_header_encode($this->sender) . '<' . $this->from . '>' . $eol; 
$headers .= 'Reply-To: ' . $this->mime_header_encode($this->sender) . '<' . $this->from . '>' . $eol;

		$results = $database->getRows("select * from customer order by firstname, lastname, email");
		
		foreach ($results as $result) {
			$customer_data[] = array(
				'customer_id' => $result['customer_id'],
				'name'        => $result['firstname'] . ' ' . $result['lastname'] . ' (' . $result['email'] . ')'
			);
		}	
		
		$view->set('customers', $customer_data);
		
		$view->set('to', $request->get('to', 'post'));
		$view->set('subject', $request->get('subject', 'post'));
		$view->set('content', $request->get('content', 'post'));
								
		$template->set('content', $view->fetch('content/mail.tpl'));

		$template->set($module->fetch());

		$response->set($template->fetch('layout.tpl'));
	}
	
	function validate() {
		$request  =& $this->locator->get('request');
		$language =& $this->locator->get('language');
		$user     =& $this->locator->get('user');	
		
		if (!$user->hasPermission('modify', 'mail')) {
			$this->error['message'] = $language->get('error_permission');
		}
				
		if (!$request->get('subject', 'post')) {
			$this->error['subject'] = $language->get('error_subject');
		}

		if (!$request->get('content', 'post')) {
			$this->error['content'] = $language->get('error_content');
		}
						
		if (!$this->error) {
			return TRUE;
		} else {
			return FALSE;
		}
	}	
}
?>

New member

Posts

Joined
Thu Mar 13, 2008 5:40 pm
Who is online

Users browsing this forum: No registered users and 1 guest