I wrote my own Code Igniter model for sending emails. Everything was fine until recently, when I started getting this error:
Fatal error: Unable to override phpmailerException class in / home / mysite / public _html / subdir / application / libraries / phpmailer / class.phpmailer.php on line 2319
I use:
CodeIgniter 2 PHPMailer 5.1
I tried to do the following:
- Added "$ mail-> SMTPDebug = 0" to disable errors.
- Added: "$ mail-> MailerDebug = false;"
- Modified by PHPMailer to show only errors when SMTPDebug is enabled.
- Search and delete any echo expressions
- Added try / catch blocks Tried add / remove: $ mail = new PHPMailer (true);
Here is my controller method (company / contact) that calls my model (message_model):
function contact() { //Do settings. $this->options->task='email'; $this->options->change = 'sent'; $this->options->form_validation=''; $this->options->page_title='Contact Us'; //Import library include_once('application/libraries/recaptcha/recaptchalib.php');//Include recaptcha library. //Keys for recaptcha, stored in mainconfig file. $this->options->publickey = $this->config->item('recaptcha_public'); $this->options->privatekey = $this->config->item('recaptcha_private'); //Form validation $this->form_validation->set_error_delimiters('<div class="error">', '</div>'); $this->form_validation->set_rules('name_field','Name of problem','trim|required|min_length[3]|max_length[100]'); $this->form_validation->set_rules('desc_field','Description','trim|required|min_length[10]|max_length[2000]'); $this->form_validation->set_rules('email_field','Your email address','trim|required|valid_email'); $this->form_validation->set_rules('recaptcha_response_field','captcha field','trim|required|callback__check_recaptcha'); //If valid. if( $this->form_validation->run() ) { //Set email contents. $message="This is a message from the contact form on ".$this->config->item('site_name')."<br /><br />"; $message.=convert_nl($this->input->post('desc_field')); $message.="<br /><br />Reply to this person by clicking this link: <a href=\"mailto:".$this->input->post('email_field')."\">".$this->input->post('name_field')."</a><br /><br />"; $options = array('host'=>$this->config->item('email_host'),//mail.fixilink.com 'username'=>$this->config->item('email_username'), 'password'=>$this->config->item('email_password'), 'from_name'=>$this->input->post('name_field'), 'to'=>array($this->config->item('email_to')=>$this->config->item('email_to') ), 'cc'=>$this->config->item('email_cc'), 'full_name'=>$this->input->post('name_field'), 'subject'=>'Email from '.$this->config->item('site_name').' visitor: '.$this->input->post('name_field'), 'message'=>$message, 'word_wrap'=>50, 'format'=>$this->config->item('email_format'), 'phpmailer_folder'=>$this->config->item('phpmailer_folder') ); //Send email using own email class and phpmailer. $result = $this->message_model->send_email($options); //Second email to sender //Set email contents. $message="Thank you for your enquiry, we aim to get a reply to you within 2 working days. In the meantime, please do follow us on www.facebook.com/autismworksuk"; $options = array('host'=>$this->config->item('email_host'),//mail.fixilink.com 'username'=>$this->config->item('email_username'), 'password'=>$this->config->item('email_password'), 'from_name'=>$this->input->post('name_field'), 'to'=>$this->input->post('email_field'), 'full_name'=>$this->input->post('name_field'), 'subject'=>'Email from '.$this->config->item('site_name'), 'message'=>$message, 'word_wrap'=>50, 'format'=>$this->config->item('email_format'), 'phpmailer_folder'=>$this->config->item('phpmailer_folder') ); //Send email using own email class and phpmailer. $result = $this->message_model->send_email($options); //Set result. if($result==-1) $this->session->set_flashdata('result', ucfirst($this->options->task).' was not '.$this->options->change.' because of a database error.'); elseif($result==0) $this->session->set_flashdata('result', 'No changes were made.'); else $this->session->set_flashdata('result', ucfirst($this->options->task).' was '.$this->options->change.' successfully.'); //Redirect to completed controller. redirect('completed'); } //Validation failed or first time through loop. $this->load->view('company/contact_view.php',$this->options); }
Here is my model method for sending emails. It worked, but without any changes that I can think of, now I get an exception error:
function send_email($options=array()) { if(!$this->_required(array('host','username','password','from_name','to','full_name','subject','message'),$options))//check the required options of email and pass aggainst provided $options. return false; $options = $this->_default(array('word_wrap'=>50,'format'=>'html','charset'=>'utf-8'),$options); try { if(isset($options['phpmailer_folder'])) require($options['phpmailer_folder']."/class.phpmailer.php"); else require("application/libraries/phpmailer/class.phpmailer.php");//Typical CI 2.1 folder. $mail = new PHPMailer(); $mail->MailerDebug = false; //Set main fields. $mail->SetLanguage("en", 'phpmailer/language/'); $mail->IsSMTP();// set mailer to use SMTP $mail->SMTPDebug = 0; $mail->Host = $options['host']; $mail->SMTPAuth = TRUE; // turn on SMTP authentication $mail->Username = $options['username']; $mail->Password = $options['password']; $mail->FromName = $options['from_name'];//WHo is the email from. $mail->WordWrap = $options['word_wrap'];// Set word wrap to 50 characters default. $mail->Subject = $options['subject']; $mail->Body = $options['message']; $mail->CharSet = $options['charset']; //From is the username on the server, not sender email. if(isset($options['from'])) $mail->From = $options['from']; else $mail->From = $mail->Username; //Default From email same as smtp user //Add reply to. if(isset($options['reply_to'])) $mail->AddReplyTo($options['reply_to'], $options['from']); if(isset($options['sender'])) $mail->Sender = $options['sender']; //Add recipients / to field (required) if(is_array($options['to'])) { foreach($options['to'] as $to =>$fn) $mail->AddAddress($to, $fn); } else { $mail->AddAddress($options['to']); //Email address where you wish to receive/collect those emails. } //Add cc to list if exists. Must be an array if(isset($options['cc'])) { if(is_array($options['cc'])) { foreach($options['cc'] as $to =>$fn) $mail->AddCC($to, $fn); } else { log_message('debug', '---->CC field must be an array for use with Message_Model.'); } } //Add bcc to list if exists. Must be an array if(isset($options['bcc'])) { if(is_array($options['bcc'])) { foreach($options['bcc'] as $to =>$fn) $mail->AddBCC($to, $fn); } else { log_message('debug', '---->BCC field must be an array for use with Message_Model.'); } } //Alternative text-only body. if(isset($options['alt_body'])) $mail->AltBody=$options['alt_body']; else $mail->AltBody = htmlspecialchars_decode( strip_tags( $options['message'] ),ENT_QUOTES );//Strip out all html and other chars and convert to plain text. //Plain/html format. if(isset($options['format'])) { if($options['format']=='html') $mail->IsHTML(true); // set email format to HTML } //Send email and set result. $return['message']=''; if(!$mail->Send()) { $return['message'].= "Message could not be sent.<br />\n"; $return['message'].= "Mailer Error: " . $mail->ErrorInfo."\n"; $return['result'] = 0; } else { $return['message'].= "Message has been sent successfully.\n"; $return['result'] = 1; } } catch (phpmailerException $e) { log_message('error', '---->PHPMailer error: '.$e->errorMessage() ); } catch (Exception $e) { log_message('error', '---->PHPMailer error: '.$e->errorMessage() ); } return $return; }