Ron Goral - 2013-11-27 16:47:17
First, thank you for this class. It has been very helpful to me. I am hopeful that these suggestions will be helpful to you.
I attempted to implement this code and ran into a couple issues: 1) an attachment would not be attached to the email, rather it would print in the message body; 2) without an attachment, I got errors about incorrect parameters being sent to the php mail function call.
I would suggest making the following four changes to the cMail.mail function: 1) vars are enclosed in {} while part of a non-literal string; 2) introduced the $msg var to contain the email body and attachment; 3) consolidated actions to take if the $file var is not empty; 4) added some double newlines in certain places.
public function mail( $to, $from, $subject, $message, $file = "" ){
$msg = '';
$uid = md5( uniqid( time() ) );
$header = "From: {$from}".$this->newline;
$header .= "Reply-To: {$from}".$this->newline;
$header .= "MIME-Version: 1.0".$this->newline;
$header .= "Content-Type: multipart/mixed; boundary=\"{$uid}\"".$this->newline;
$msg .= "--{$uid}".$this->newline;
$msg .= "Content-type:text/html; charset=\"UTF-8\"".$this->newline;
$msg .= "Content-Transfer-Encoding: 7bit".$this->newline.$this->newline;
$msg .= $message.$this->newline.$this->newline;
if( $file != "" ){
$fn = explode("/", $file);
$filename = $fn[sizeof($fn)-1];
$attachment = chunk_split( base64_encode( file_get_contents( $file ) ) );
$msg .= "--{$uid}".$this->newline;
$msg .= "Content-Type: application/octet-stream; name=\"{$filename}\"".$this->newline;
$msg .= "Content-Transfer-Encoding: base64".$this->newline;
$msg .= "Content-Disposition: attachment; filename=\"{$filename}\"".$this->newline.$this->newline;
$msg .= $attachment.$this->newline.$this->newline;
}
$msg .= "--".$uid."--";
$subject = '=?UTF-8?B?'.base64_encode( $subject ).'?=';
if( mail( $to, $subject, $msg, $header ) ){return true;}
else {return false;}
}