我有以下代码从发布的表单发送电子邮件:
$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!
以为我会在这里发布答案,以防其他人因类似问题而失去头发: - )
答案 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消息。