2011-12-05 30 views
2

我有下面的代碼從一個發佈形式發送電子郵件:

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

$this->email->from('[email protected]', 'Scarabee'); 
$this->email->to('[email protected]'); 
$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-> email-> 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->朗>負載(「電子郵件」); 去圖...

更新2:解決

我在控制器的結構有這樣的:

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

我想有$這個 - 之間的衝突>郎和_set_error_message函數,它也返回一個「lang」變量(更多地參見var_dump)。

解決方案:已將$ this-> lang更改爲$ this-> language,並且所有內容都是hunky dory!

想我會發布的情況下,任何人在這裏的答案是不斷脫髮類似的問題:-)

回答

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'); 
+0

我試過了上面提到的兩個版本 - 都導致了空白頁。但是,檢查日誌文件時,我發現這樣:** PHP致命錯誤:調用1973上的/Applications/MAMP/htdocs/sitename/system/libraries/Email.php中的非對象上的成員函數load() **。該行的內容如下:$ CI-> lang-> load('email');所以有些事情是不對的,但我不知道它是什麼o_O – Mudshark

+1

這看起來很平常,但是你的CodeIgniter更新了嗎?你使用的是http://codeigniter.com的最新版本嗎? – Repox

+0

是的:CI 2.1是最新版本。我註釋了1973年開始的函數內部的代碼,並猜測:郵件被髮送,加上正確的重定向。我最終用應用程序/庫/ Email.php內的我自己的版本(註釋掉的代碼)覆蓋了系統/庫/ Email.php。 – Mudshark

1

當您嘗試發送一封電子郵件,然後它在執行過程中殺死你的腳本這可能是一個錯誤發生。檢查你的Apache和PHP錯誤日誌(/ var/log/apache /)並啓用完整的錯誤報告。

+0

檢查錯誤日誌,並得到這個:PHP致命錯誤:調用一個非對象的成員函數load()在/Applications/MAMP/htdocs/sitename/system/libraries/Email.php在線1973 – Mudshark

+0

它看起來好像你的CodeIgniter安裝有問題。但是,您可以嘗試加載語言助手並查看是否可以解決您的問題。在發佈任何代碼之前,請放置$ this-> load-> helper(「language」)。另外,我假設這段代碼在Controller方法或其他CI子類中? – wrren

+0

先嚐試加載語言助手,沒有任何改變。該代碼確實在控制器「聯繫人」中... – Mudshark

0
$ref2 = $this->input->server('HTTP_REFERER', TRUE); 
redirect($ref); 

通過使用上面的代碼,你可以重定向到當前頁面本身 ,你可以設置上面的重定向功能的提示信息。