我编写了自己的Code Igniter模型来发送电子邮件.一切都很好,直到最近我才开始出现这个错误:
致命错误:无法在第2319行的/home/mysite/public_html/subdir/application/libraries/PHPmailer/class.PHPmailer.PHP中重新声明类PHPmailerException
我正在使用:
CodeIgniter 2
PHPMailer 5.1
>添加了“$mail-> SMTPDebug = 0”以关闭错误.
>新增:“$mail-> MailerDebug = false;”
>修改PHPMailer仅在打开SMTPDebug时显示错误.
>查找并删除任何echo语句
>添加了try / catch块尝试添加/删除:$mail = new PHPMailer(true);
这是我的控制器方法(公司/联系人),它调用我的模型(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'),'to'=>$this->input->post('email_field'),'subject'=>'Email from '.$this->config->item('site_name'),'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); }
这是我的模型发送电子邮件的方法.它曾经工作但没有任何改变我现在可以想到我得到一个异常错误:
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,'---->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; }