CodeIgniter:$ this-> email-> send()后无法重定向

时间:2011-12-05 10:54:06

标签: email codeigniter

我有以下代码从发布的表单发送电子邮件:

$this->load->library('email');
$config['charset'] = 'iso-8859-1';
$config['mailtype'] = 'html';
$this->email->initialize($config);

$this->email->from('info@mysite.com', 'Scarabee');
$this->email->to('info@mysite.com');
$this->email->subject('Message via website');  
$data['msg'] = nl2br($this->input->post('msg'));
$data['msg'] .= '<br><br><b>Verstuurd door:</b><br>';
if($this->input->post('bedrijf')){
 $data['msg'] .= $this->input->post('bedrijf').'<br>';
}
$data['msg'] .= $this->input->post('naam').'<br>';
$data['msg'] .= $this->input->post('adres').' - '.$this->input->post('postcode').', '.$this->input->post('gemeente').'<br>';
$data['msg'] .= $this->input->post('tel').'<br>';
$data['msg'] .= $this->input->post('email');
$message = $this->load->view('email', $data, TRUE);
$this->email->message($message);
if($this->email->send()){
$success = 'Message has been sent';
$this->session->set_flashdata('msg', $success);
redirect('contact/'.$this->input->post('lang'));
}
else{
 show_error('Email could not be sent.'); 
}

问题:电子邮件以正确的格式(从电子邮件视图模板)发送,但页面随后变为空白。例如,如果我尝试在$ this-&gt; email-&gt; send()调用之下回显$ message,则不显示任何内容。正如我在上面尝试的那样,重定向显然也不起作用。我错过了什么吗?谢谢你的帮助...

更新

将问题追溯到/system/libraries/Email.php(CI的默认电子邮件库)中的函数。注释掉此函数中的代码可以发送邮件,以及正确的重定向:

protected function _set_error_message($msg, $val = '')
{
$CI =& get_instance();
$CI->lang->load('email');

if (substr($msg, 0, 5) != 'lang:' || FALSE === ($line = $CI->lang->line(substr($msg, 5))))
{
$this->_debug_msg[] = str_replace('%s', $val, $msg)."<br />";
}
else
{
$this->_debug_msg[] = str_replace('%s', $val, $line)."<br />";
}
}

导致错误的行是:$ CI-&gt; lang-&gt; load('email'); 去图......

更新2:已解决

我在控制器的构造中有这个:

function __construct() {
 parent::__construct();
 $this->lang = $this->uri->segment(2, 'nl');
}

我猜$ this-&gt; lang和_set_error_message函数之间存在冲突,该函数也会返回“lang”变量(请参阅var_dump more down)。

解决方案:将$ this-&gt; lang更改为$ this-&gt;语言,所有内容都是hunky dory!

以为我会在这里发布答案,以防其他人因类似问题而失去头发: - )

3 个答案:

答案 0 :(得分:1)

当您尝试发送电子邮件然后在执行期间终止脚本时,可能会发生错误。检查您的apache和PHP错误日志(/ var / log / apache /)并启用完整的错误报告。

答案 1 :(得分:0)

出于调试目的,您可以尝试这样做:

...
$this->email->message($message);
$this->email->send();
redirect('contact/'.$this->input->post('lang'));

这应该重定向您,无论您的邮件是否被发送(如果您仍然收到它,您可以认为重定向将是下一个发生的事情)。

我自己的解决方案如下:

...
if ( $this->email->send() )
{
  log_message('debug', 'mail library sent mail');
  redirect('contact/thankyou');
  exit;
}
log_message('error', 'mail library failed to send');
show_error('E-mail could not be send');

答案 2 :(得分:0)

{{1}}

通过使用上面的代码,您可以重定向到当前页面本身 您可以在重定向功能上方设置Flash消息。