Page 1 of 1

Opencart 1.3.3 base64 bug for mail

Posted: Tue Nov 10, 2009 9:20 pm
by JNeuhoff
Some e-mail clients like Outlook or Evolution sometimes have problems with the base64 transfer encoding. See attached screen dumps.

I think we should have the option to disable the base64 transfer encoding.

Re: Opencart 1.3.3 base64 bug for mail

Posted: Wed Nov 11, 2009 12:57 pm
by jfima
gmail have this bug too!!

Re: Opencart 1.3.3 base64 bug for mail

Posted: Thu Nov 12, 2009 4:05 am
by JNeuhoff
What email client are you using? Outlook? Thunderbird? Evolution? KMail? Others?

Re: Opencart 1.3.3 base64 bug for mail

Posted: Fri Nov 13, 2009 7:16 pm
by Daniel
this has to be a problem with the server because I just did a test to my gmail account with both text and html mails and both worked perfectly!

Re: Opencart 1.3.3 base64 bug for mail

Posted: Fri Nov 13, 2009 7:25 pm
by Daniel
are you all using 1.3.3 with this problem?

Re: Opencart 1.3.3 base64 bug for mail

Posted: Fri Nov 13, 2009 10:08 pm
by JNeuhoff
I am using 1.3.3. I just ran a test using the Admin's Customer > Mail function, with the following test message:

Code: Select all

<p>
	This is just a test message, please ignore.</p>
<p>
	Juergen</p>
Using 1.3.3 on a 32bit Fedora Core 10 system results in the following correct message (shown here as the message source):

Code: Select all

To: testbuyer@mhccorp.com
Subject: test message
From: Your Store<testseller@mhccorp.com>
Reply-To: Your Store<testseller@mhccorp.com>
X-Mailer: PHP/5.2.9
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_63b69330b19b824aed115fbfd20d0681"
X-Evolution-Source: pop://neuhoff%40mhccorp.com@mail.mhccorp.com/


------=_NextPart_63b69330b19b824aed115fbfd20d0681
Content-Type: multipart/alternative; boundary="----=_NextPart_63b69330b19b824aed115fbfd20d0681_alt"


------=_NextPart_63b69330b19b824aed115fbfd20d0681_alt
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

bm90IHN1cHBvcnQgSFRNTCBlbWFpbCE=
------=_NextPart_63b69330b19b824aed115fbfd20d0681_alt
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

PGh0bWwgZGlyPSJsdHIiIGxhbmc9ImVuIj4KPGhlYWQ+Cjx0aXRsZT50ZXN0IG1lc3NhZ2U8L3Rp
dGxlPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsg
Y2hhcnNldD1VVEYtOCI+CjwvaGVhZD4KPGJvZHk+PHA+DQoJVGhpcyBpcyBqdXN0IGEgdGVzdCBt
ZXNzYWdlLCBwbGVhc2UgaWdub3JlLjwvcD4NCjxwPg0KCUp1ZXJnZW48L3A+DQo8L2JvZHk+Cjwv
aHRtbD4K
------=_NextPart_63b69330b19b824aed115fbfd20d0681_alt--

------=_NextPart_63b69330b19b824aed115fbfd20d0681--
Doing exactly the same from a 64bit CentOS server results in this wrongly base64 encoded message:

Code: Select all

To: testbuyer@mhccorp.com
Subject: test message
From: Fireworx Scotland Display Company <info@terabytetechnology.co.uk>
Reply-To: Fireworx Scotland Display Company <info@terabytetechnology.co.uk>
X-Mailer: PHP/5.1.6
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_f4bbac5b4a893c2e88445493c246a48c"
X-Spam-Status: No, score=4.9
X-Spam-Score: 49
X-Spam-Bar: ++++
X-Spam-Flag: NO
X-Evolution-Source: pop://neuhoff%40mhccorp.com@mail.mhccorp.com/


------=_NextPart_f4bbac5b4a893c2e88445493c246a48c

Content-Type: multipart/alternative; boundary="----=_NextPart_f4bbac5b4a893c2e88445493c246a48c_alt"



------=_NextPart_f4bbac5b4a893c2e88445493c246a48c

Content-Type: text/plain; charset="utf-8"

Content-Transfer-Encoding: base64

VGhpcyBpcyBhIEhUTUwgZW1haWwgYW5kIHlvdXIgZW1haWwgY2xpZW50IHNvZnR3YXJlIGRvZXMg

bm90IHN1cHBvcnQgSFRNTCBlbWFpbCE=

------=_NextPart_f4bbac5b4a893c2e88445493c246a48c

Content-Type: text/html; charset="utf-8"

Content-Transfer-Encoding: base64



PGh0bWwgZGlyPSJsdHIiIGxhbmc9ImVuIj4KPGhlYWQ+Cjx0aXRsZT50ZXN0IG1lc3NhZ2U8L3Rp

dGxlPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsg

Y2hhcnNldD1VVEYtOCI+CjwvaGVhZD4KPGJvZHk+PHA+DQoJVGhpcyBpcyBqdXN0IGEgdGVzdCBt

ZXNzYWdlLCBwbGVhc2UgaWdub3JlLjwvcD4NCjxwPg0KCUp1ZXJnZW48L3A+PC9ib2R5Pgo8L2h0

bWw+Cg==

------=_NextPart_f4bbac5b4a893c2e88445493c246a48c



------=_NextPart_f4bbac5b4a893c2e88445493c246a48c--
So maybe the problem is because of using a 64bit system?

Re: Opencart 1.3.3 base64 bug for mail

Posted: Fri Nov 13, 2009 10:41 pm
by Daniel
many thansk J.Neuhoff.

I'm lookign into this now.

Re: Opencart 1.3.3 base64 bug for mail

Posted: Fri Nov 13, 2009 10:52 pm
by Daniel
what about if you change the

eol from \r\n to \n

in your second eample it shows a space between the lines.

Re: Opencart 1.3.3 base64 bug for mail

Posted: Fri Nov 13, 2009 11:14 pm
by Daniel
can you please test this code by replacing your mail class with it?

Code: Select all

<?php 
final class Mail { 
	protected $to;
  	protected $from;
  	protected $sender;
  	protected $subject;
  	protected $text;
  	protected $html;
  	protected $attachments = array();
	protected $protocol = 'mail';
	protected $hostname;
	protected $username;
	protected $password;
	protected $port = 25;
	protected $timeout = 5;
	public $charset = 'utf-8';
	public $eol = "\r\n";

	public function __construct($protocol = 'mail', $hostname = '', $username = '', $password = '', $port = '25', $timeout = '5') {
		$this->protocol = $protocol;
		$this->hostname = $hostname;
		$this->username = $username;
		$this->password = $password;
		$this->port = $port;
		$this->timeout = $timeout;	
	}
	
	public function setTo($to) {
    	$this->to = $to;
  	}
	
  	public function setFrom($from) {
    	$this->from = $from;
  	}
	
 	public function addheader($header, $value) {
		$this->headers[$header] = $value;
	}
	
  	public function setSender($sender) {
    	$this->sender = $sender;
  	}
 
  	public function setSubject($subject) {
    	$this->subject = $subject;
  	}
	
	public function setText($text) {
    	$this->text = $text;
  	}

  	public function setHtml($html) {
    	$this->html = $html;
  	}
	
  	public function addAttachment($attachment) {
		if (!is_array($attachment)) {
			$this->attachments[] = $attachment;
		} else{
			$this->attachments = array_merge($this->attachments, $attachment);
		}
  	}

  	public function send() {	
    	if (!$this->to) {
      		exit('Error: E-Mail to required!');
    	}
	
    	if (!$this->from) {
      		exit('Error: E-Mail from required!');
    	}
    
    	if (!$this->sender) {
      		exit('Error: E-Mail sender required!');
    	}
		
		if (!$this->subject) {
      		exit('Error: E-Mail subject required!');
    	}
			
		if ((!$this->text) && (!$this->html)) {
      		exit('Error: E-Mail message required!');
    	}

		if (is_array($this->to)) {
      		$to = implode(',', $this->to);
    	} else {
      		$to = $this->to;
    	}
	  	
		$boundary = '----=_NextPart_' . md5(rand());  
		
		$header = '';
		
		if ($this->protocol != 'mail') {
			$header .= 'To: ' . $to . $this->eol;
			$header .= 'Subject: ' . $this->subject . $this->eol;
		}
		
		$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->eol; 
    	$header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->eol;   
		$header .= 'Return-Path: ' . $this->from . $this->eol;
		$header .= 'X-Mailer: PHP/' . phpversion() . $this->eol;  
    	$header .= 'MIME-Version: 1.0' . $this->eol; 
		$header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->eol;  
	
		if (!$this->html) {
	  		$message  = '--' . $boundary . $this->eol;  
	  		$message .= 'Content-Type: text/plain; charset="' . $this->charset . '"' . $this->eol; 
	  		$message .= 'Content-Transfer-Encoding: base64' . $this->eol . $this->eol;
      		$message .= chunk_split(base64_encode($this->text), 76, $this->eol);
		} else {
	  		$message  = '--' . $boundary . $this->eol;
	  		$message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->eol . $this->eol;
	  		$message .= '--' . $boundary . '_alt' . $this->eol;
	  		$message .= 'Content-Type: text/plain; charset="' . $this->charset . '"' . $this->eol; 
	  		$message .= 'Content-Transfer-Encoding: base64' . $this->eol;
	  
	  		if ($this->text) {
        		$message .= chunk_split(base64_encode($this->text), 76, $this->eol);
	  		} else {
	    		$message .= chunk_split(base64_encode('This is a HTML email and your email client software does not support HTML email!'), 76, $this->eol);
      		}	
	  
	  		$message .= '--' . $boundary . '_alt' . $this->eol;
      		$message .= 'Content-Type: text/html; charset="' . $this->charset . '"' . $this->eol; 
      		$message .= 'Content-Transfer-Encoding: base64' . $this->eol . $this->eol;
	  		$message .= chunk_split(base64_encode($this->html), 76, $this->eol); 
			$message .= '--' . $boundary . '_alt--' . $this->eol;		 
		}
		
    	foreach ($this->attachments as $attachment) {  
      		$filename = basename($attachment);  
      		$handle = fopen($attachment, 'r'); 
      		$content = fread($handle, filesize($attachment));
      
	  		fclose($handle);  
	  
      		$message .= '--' . $boundary . $this->eol;
      		$message .= 'Content-Type: application/octetstream' . $this->eol;    
      		$message .= 'Content-Transfer-Encoding: base64' . $this->eol; 
      		$message .= 'Content-Disposition: attachment; filename="' . $filename . '"' . $this->eol; 
      		$message .= 'Content-ID: <' . $filename . '>' . $this->eol . $this->eol;
      		$message .= chunk_split(base64_encode($content), 76, $this->eol);
    	}  

		if ($this->protocol == 'mail') {
			ini_set('sendmail_from', $this->from);
		
    		mail($to, $this->subject, $message, $header);  
		} elseif ($this->protocol == 'smtp') {
			$handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout);	
			
			if (!$handle) {
				error_log('Error: ' . $errstr . ' (' . $errno . ')');
			} else {
				if (substr(PHP_OS, 0, 3) != 'WIN') {
					socket_set_timeout($handle, $this->timeout, 0);
				}
				
				while ($line = fgets($handle, 515)) {
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
			
				if (substr($this->hostname, 0, 3) == 'tls') {
					fputs($handle, 'STARTTLS' . $this->eol);
					
					
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
				
					if (substr($reply, 0, 3) != 220) {
						error_log('Error: STARTTLS not accepted from server!');
					}					
				}
			
				if (!empty($this->username)  && !empty($this->password)) {
					fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->eol);
					
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
				
					if (substr($reply, 0, 3) != 250) {
						error_log('Error: EHLO not accepted from server!');
					}
					
					fputs($handle, 'AUTH LOGIN' . $this->eol);
	
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
					
					if (substr($reply, 0, 3) != 334) {
						error_log('Error: AUTH LOGIN not accepted from server!');
					}
	
					fputs($handle, base64_encode($this->username) . $this->eol);
	
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
					
					if (substr($reply, 0, 3) != 334) {
						error_log('Error: Username not accepted from server!');
					}				
	
					fputs($handle, base64_encode($this->password) . $this->eol);
	
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
					
					if (substr($reply, 0, 3) != 235) {
						error_log('Error: Password not accepted from server!');					
					}	
				} else {
					fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->eol);
	
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
					
					if (substr($reply, 0, 3) != 250) {
						error_log('Error: HELO not accepted from server!');
					}				
				}
	
				fputs($handle, 'MAIL FROM: <' . $this->from . '>XVERP' . $this->eol);
	
				$reply = '';
			
				while ($line = fgets($handle, 515)) {
					$reply .= $line;
				
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
				
				if (substr($reply, 0, 3) != 250) {
					error_log('Error: MAIL FROM not accepted from server!');
				}
				
				if (!is_array($this->to)) {
					fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->eol);
		
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
				
					if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
						error_log('Error: RCPT TO not accepted from server!');
					}			
				} else {
					foreach ($this->to as $recipient) {
						fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->eol);
			
						$reply = '';
					
						while ($line = fgets($handle, 515)) {
							$reply .= $line;
						
							if (substr($line, 3, 1) == ' ') { 
								break; 
							}
						}
					
						if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
							error_log('Error: RCPT TO not accepted from server!');
						}						
					}
				}
	
				fputs($handle, 'DATA' . $this->eol);
	
				$reply = '';
			
				while ($line = fgets($handle, 515)) {
					$reply .= $line;
				
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
						
				if (substr($reply, 0, 3) != 354) {
					error_log('Error: DATA not accepted from server!');
				}
				
				fputs($handle, $header . $message . $this->eol);
				fputs($handle, '.' . $this->eol);
				
				$reply = '';
			
				while ($line = fgets($handle, 515)) {
					$reply .= $line;
				
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
				
				if (substr($reply, 0, 3) != 250) {
					error_log('Error: DATA not accepted from server!');
				}
	
				fputs($handle, 'QUIT' . $this->eol);
	
				$reply = '';
			
				while ($line = fgets($handle, 515)) {
					$reply .= $line;
				
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
				
				if (substr($reply, 0, 3) != 221) {
					error_log('Error: QUIT not accepted from server!');
				}			
				
				fclose($handle);
			}
		}
	}
}
?>

Re: Opencart 1.3.3 base64 bug for mail

Posted: Sat Nov 14, 2009 12:33 am
by JNeuhoff
Just tested your updated mail.php on both the 32bit Fedora Core 10 server and the 64bit CentOS server, still the same problem with the 64bit CentOS server, OK on the 32bit Fedora Core 10 machine.

Re: Opencart 1.3.3 base64 bug for mail

Posted: Thu Dec 17, 2009 9:16 pm
by elion
I meet same problem too!
after compare with "mail.php" at Opercart 1.3.2
I think it can be fixed by the next code.
add

Code: Select all

if (strpos(PHP_OS, 'WIN') === false) {
			$this->eol = "\n";
		} else {
			$this->eol = "\r\n";
		}
into function __construct ().

I test it at the website http://www.BuyDiscountJerseys.com and it succeed!

the whole code of mail.php may like this:

Code: Select all


<?php 
final class Mail {
	protected $to;
  	protected $from;
  	protected $sender;
  	protected $subject;
  	protected $text;
  	protected $html;
  	protected $attachments = array();
	protected $protocol = 'mail';
	protected $hostname;
	protected $username;
	protected $password;
	protected $port = 25;
	protected $timeout = 5;
	public $charset = 'utf-8';
	public $eol = "\r\n";

	

	public function __construct($protocol = 'mail', $hostname = '', $username = '', $password = '', $port = '25', $timeout = '5') {
		$this->protocol = $protocol;
		$this->hostname = $hostname;
		$this->username = $username;
		$this->password = $password;
		$this->port = $port;
		$this->timeout = $timeout;	

		if (strpos(PHP_OS, 'WIN') === false) {
			$this->eol = "\n";
		} else {
			$this->eol = "\r\n";
		}
	}
	
	public function setTo($to) {
    	$this->to = $to;
  	}
	
  	public function setFrom($from) {
    	$this->from = $from;
  	}
	
 	public function addheader($header, $value) {
		$this->headers[$header] = $value;
	}
	
  	public function setSender($sender) {
    	$this->sender = $sender;
  	}
 
  	public function setSubject($subject) {
    	$this->subject = $subject;
  	}
	
	public function setText($text) {
    	$this->text = $text;
  	}

  	public function setHtml($html) {
    	$this->html = $html;
  	}
	
  	public function addAttachment($attachment) {
		if (!is_array($attachment)) {
			$this->attachments[] = $attachment;
		} else{
			$this->attachments = array_merge($this->attachments, $attachment);
		}
  	}

  	public function send() {	
    	if (!$this->to) {
      		exit('Error: E-Mail to required!');
    	}
	
    	if (!$this->from) {
      		exit('Error: E-Mail from required!');
    	}
    
    	if (!$this->sender) {
      		exit('Error: E-Mail sender required!');
    	}
		
		if (!$this->subject) {
      		exit('Error: E-Mail subject required!');
    	}
			
		if ((!$this->text) && (!$this->html)) {
      		exit('Error: E-Mail message required!');
    	}

		if (is_array($this->to)) {
      		$to = implode(',', $this->to);
    	} else {
      		$to = $this->to;
    	}
	  	
		$boundary = '----=_NextPart_' . md5(rand());  
		
		$header = '';
		
		if ($this->protocol != 'mail') {
			$header .= 'To: ' . $to . $this->eol;
			$header .= 'Subject: ' . $this->subject . $this->eol;
		}
		
		$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->eol; 
    	$header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->eol;   
		$header .= 'Return-Path: ' . $this->from . $this->eol;
		$header .= 'X-Mailer: PHP/' . phpversion() . $this->eol;  
    	$header .= 'MIME-Version: 1.0' . $this->eol; 
		$header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->eol;  
	
		if (!$this->html) {
	  		$message  = '--' . $boundary . $this->eol;  
	  		$message .= 'Content-Type: text/plain; charset="' . $this->charset . '"' . $this->eol; 
	  		$message .= 'Content-Transfer-Encoding: base64' . $this->eol . $this->eol;
      		$message .= chunk_split(base64_encode($this->text));
		} else {
	  		$message  = '--' . $boundary . $this->eol;
	  		$message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->eol . $this->eol;
	  		$message .= '--' . $boundary . '_alt' . $this->eol;
	  		$message .= 'Content-Type: text/plain; charset="' . $this->charset . '"' . $this->eol; 
	  		$message .= 'Content-Transfer-Encoding: base64' . $this->eol;
	  
	  		if ($this->text) {
        		$message .= chunk_split(base64_encode($this->text));
	  		} else {
	    		$message .= chunk_split(base64_encode('This is a HTML email and your email client software does not support HTML email!'));
      		}	
	  
	  		$message .= '--' . $boundary . '_alt' . $this->eol;
      		$message .= 'Content-Type: text/html; charset="' . $this->charset . '"' . $this->eol; 
      		$message .= 'Content-Transfer-Encoding: base64' . $this->eol . $this->eol;
	  		$message .= chunk_split(base64_encode($this->html)); 
			$message .= '--' . $boundary . '_alt--' . $this->eol;		 
		}
		
    	foreach ($this->attachments as $attachment) {  
      		$filename = basename($attachment);  
      		$handle = fopen($attachment, 'r'); 
      		$content = fread($handle, filesize($attachment));
      
	  		fclose($handle);  
	  
      		$message .= '--' . $boundary . $this->eol;
      		$message .= 'Content-Type: application/octetstream' . $this->eol;    
      		$message .= 'Content-Transfer-Encoding: base64' . $this->eol; 
      		$message .= 'Content-Disposition: attachment; filename="' . $filename . '"' . $this->eol; 
      		$message .= 'Content-ID: <' . $filename . '>' . $this->eol . $this->eol;
      		$message .= chunk_split(base64_encode($content));
    	}  

		if ($this->protocol == 'mail') {
			ini_set('sendmail_from', $this->from);
		
    		mail($to, $this->subject, $message, $header);  
		} elseif ($this->protocol == 'smtp') {
			$handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout);	
			
			if (!$handle) {
				error_log('Error: ' . $errstr . ' (' . $errno . ')');
			} else {
				if (substr(PHP_OS, 0, 3) != 'WIN') {
					socket_set_timeout($handle, $this->timeout, 0);
				}
				
				while ($line = fgets($handle, 515)) {
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
			
				if (substr($this->hostname, 0, 3) == 'tls') {
					fputs($handle, 'STARTTLS' . $this->eol);
					
					
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
				
					if (substr($reply, 0, 3) != 220) {
						error_log('Error: STARTTLS not accepted from server!');
					}					
				}
			
				if (!empty($this->username)  && !empty($this->password)) {
					fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->eol);
					
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
				
					if (substr($reply, 0, 3) != 250) {
						error_log('Error: EHLO not accepted from server!');
					}
					
					fputs($handle, 'AUTH LOGIN' . $this->eol);
	
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
					
					if (substr($reply, 0, 3) != 334) {
						error_log('Error: AUTH LOGIN not accepted from server!');
					}
	
					fputs($handle, base64_encode($this->username) . $this->eol);
	
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
					
					if (substr($reply, 0, 3) != 334) {
						error_log('Error: Username not accepted from server!');
					}				
	
					fputs($handle, base64_encode($this->password) . $this->eol);
	
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
					
					if (substr($reply, 0, 3) != 235) {
						error_log('Error: Password not accepted from server!');					
					}	
				} else {
					fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->eol);
	
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
					
					if (substr($reply, 0, 3) != 250) {
						error_log('Error: HELO not accepted from server!');
					}				
				}
	
				fputs($handle, 'MAIL FROM: <' . $this->from . '>XVERP' . $this->eol);
	
				$reply = '';
			
				while ($line = fgets($handle, 515)) {
					$reply .= $line;
				
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
				
				if (substr($reply, 0, 3) != 250) {
					error_log('Error: MAIL FROM not accepted from server!');
				}
				
				if (!is_array($this->to)) {
					fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->eol);
		
					$reply = '';
				
					while ($line = fgets($handle, 515)) {
						$reply .= $line;
					
						if (substr($line, 3, 1) == ' ') { 
							break; 
						}
					}
				
					if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
						error_log('Error: RCPT TO not accepted from server!');
					}			
				} else {
					foreach ($this->to as $recipient) {
						fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->eol);
			
						$reply = '';
					
						while ($line = fgets($handle, 515)) {
							$reply .= $line;
						
							if (substr($line, 3, 1) == ' ') { 
								break; 
							}
						}
					
						if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
							error_log('Error: RCPT TO not accepted from server!');
						}						
					}
				}
	
				fputs($handle, 'DATA' . $this->eol);
	
				$reply = '';
			
				while ($line = fgets($handle, 515)) {
					$reply .= $line;
				
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
						
				if (substr($reply, 0, 3) != 354) {
					error_log('Error: DATA not accepted from server!');
				}
				
				fputs($handle, $header . $message . $this->eol);
				fputs($handle, '.' . $this->eol);
				
				$reply = '';
			
				while ($line = fgets($handle, 515)) {
					$reply .= $line;
				
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
				
				if (substr($reply, 0, 3) != 250) {
					error_log('Error: DATA not accepted from server!');
				}
	
				fputs($handle, 'QUIT' . $this->eol);
	
				$reply = '';
			
				while ($line = fgets($handle, 515)) {
					$reply .= $line;
				
					if (substr($line, 3, 1) == ' ') { 
						break; 
					}
				}
				
				if (substr($reply, 0, 3) != 221) {
					error_log('Error: QUIT not accepted from server!');
				}			
				
				fclose($handle);
			}
		}
	}
}
?>
Good Luck!

Re: Opencart 1.3.3 base64 bug for mail

Posted: Thu Dec 17, 2009 9:37 pm
by JNeuhoff
Hi elion ,

Is your server running on a 32bit or 64bit operating system? And is it Linux?

Re: Opencart 1.3.3 base64 bug for mail

Posted: Thu Dec 17, 2009 10:19 pm
by elion
Yes, JNeuhoff,
my OS is Linux , the Kernel Version is 2.6.28.5-grsec-sg2
by the way , I am using Opencart 1.3.4

Re: Opencart 1.3.3 base64 bug for mail

Posted: Sat Mar 06, 2010 10:01 pm
by adelaida
was it fixed already? the encoding in my email client is ok