2013-07-31 24 views
7

Tôi không thể hiểu tại sao nếu tôi cố gắng sử dụng Lớp Email CI nó không gửi email, trong khi nếu tôi sử dụng PHP mail() Class hoạt động.

Phải lưu ý rằng đôi khi tôi nhận được "email đã gửi" trong khi không thực sự được gửi và đôi khi tôi nhận được lỗi "máy chủ của tôi không được thiết lập".

Tôi cố gắng để tìm ra cách để cài đặt nó nhưng ... không có gì ...

điều khiển đang sau:

if($this->form_validation->run()){ 

       //Set Language 
       $this->lang->load('site', $this->session->userdata('lang')); 

       //Random key 
       $user_valid_key = md5(uniqid()); 

       //Prepare email 
       $this->load->library('email', array('mailtype' => 'html')); 
       $this->email->from($this->config->item('email_signup_from'), 'Wondermark.net'); 
       $this->email->to($this->input->post('email')); 
       $this->email->subject($this->lang->line('email_signup_subject')); 

       //Format mail con %s per inserire i campi necessari 
       $signup_msg = sprintf($this->lang->line('email_signup_message'), $this->input->post('fname'), base_url().'main/signup_confirm/'.$user_valid_key); 

       $this->email->message((string)$signup_msg); 

       if($this->email->send()){ 
        //TODO: load view... 
        echo "email sent"; 
       }else{ 
        $to = $this->input->post('email'); 
        mail($to, 'test', 'Other sent option failed'); 
        echo $this->input->post('email'); 
        show_error($this->email->print_debugger()); 
       } 

       //TODO: Add to db 

      }else{ 

      // Form validation failed 

} 
+0

Tôi tin rằng bạn đã [kiểm tra kỹ lưỡng Lớp Email] (http://ellislab.com/codeigniter/user-guide/libraries/email.html)? – Ohgodwhy

+0

Yap. Tôi đang tự hỏi nếu điều này được thực hiện trực tuyến, không "từ email" phải là một email tên miền? (ví dụ: [email protected])? –

+0

Tôi sẽ nói có. nếu không, bạn phải là người gửi đáng tin cậy trong bản ghi SPF của tên miền. Hầu hết các nhà cung cấp email [đọc: tốt] sẽ yêu cầu xác thực trước khi thiết lập kết nối với máy chủ SMTP để gửi thư. – Ohgodwhy

Trả lời

20

Sử dụng email thiết lập này ..

$this->load->library('email'); 

$config['protocol'] = 'smtp'; 

$config['smtp_host'] = 'ssl://smtp.gmail.com'; 

$config['smtp_port'] = '465'; 

$config['smtp_timeout'] = '7'; 

$config['smtp_user'] = '[email protected]'; 

$config['smtp_pass'] = 'password'; 

$config['charset'] = 'utf-8'; 

$config['newline'] = "\r\n"; 

$config['mailtype'] = 'text'; // or html 

$config['validation'] = TRUE; // bool whether to validate email or not  

$this->email->initialize($config); 


$this->email->from('[email protected]', 'sender_name'); 
$this->email->to('[email protected]'); 


$this->email->subject('Email Test'); 

$this->email->message('Testing the email class.'); 

$this->email->send(); 

echo $this->email->print_debugger(); 
+0

CÓ! WOW. Tôi đã thử mọi thứ, từ mọi câu trả lời từ mọi biến thể trên trang web này. Thay đổi cấu hình, một lần nữa và một lần nữa thử các hệ thống khác nhau. Nhưng cuối cùng đó đã làm điều đó. Cảm ơn bạn. – MrJinPengyou

+1

giải pháp này không hoạt động mọi lúc. Tôi đã thử nó. –

+0

Làm việc để thử nghiệm, sẽ không sử dụng nó trong sản xuất! – Sorin

2

CodeIgniter Hướng dẫn sử dụng: http://ellislab.com/codeigniter/user-guide/libraries/email.html

Thiết lập này làm việc cho tôi:

$config = Array(
      'protocol' => 'smtp', 
      'smtp_host' => 'Your SMTP Server', 
      'smtp_port' => 25, 
      'smtp_user' => 'Your SMTP User', 
      'smtp_pass' => 'Your SMTP Pass', 
      'mailtype' => 'html' 
      ); 
$this->load->library('email', $config); 
$this->email->set_newline("\r\n"); 

//Add file directory if you need to attach a file 
$this->email->attach($file_dir_name); 

$this->email->from('Sending Email', 'Sending Name'); 
$this->email->to('Recieving Email address'); 

$this->email->subject('Email Subject'); 
$this->email->message('Email Message'); 

if($this->email->send()){ 
    //Success email Sent 
    echo $this->email->print_debugger(); 
}else{ 
    //Email Failed To Send 
    echo $this->email->print_debugger(); 
} 
+0

Tks. Tôi đã thử và chỉ tải nhiều thời gian hơn (cố gắng truy cập smtp?) Và ném một lỗi ... –

+0

Làm việc cho tôi, tôi đã thêm cấu hình trên /application/config/email.php – workdreamer

+0

không hoạt động cho tôi. Đã thử tất cả các giải pháp được đề xuất –

1

Sau khi chiến đấu với cùng một vấn đề này trong một vài giờ, cuối cùng tôi đã quyết định thay đổi cấu hình của mình để gửi qua một máy chủ khác. Máy chủ ban đầu của tôi vì một số lý do sẽ gửi đến một số địa chỉ nhưng không gửi cho người khác (trong cùng một tên miền). Ngay sau khi tôi thay đổi để gửi nó làm việc như mong đợi.

Nếu bạn không nhận được kết quả mong đợi, hãy thử một máy chủ SMTP khác. Vấn đề có thể không phải là mã của bạn ...

+0

Tôi có cùng một vấn đề. Làm thế nào bạn sửa lỗi này? – user1424508

+0

Như tôi đã nói, hãy thử một máy chủ smtp khác. Bạn cũng có thể hỏi chủ nhà của bạn nếu có những hạn chế tại chỗ. Ví dụ, GoDaddy chỉ cho phép email được gửi qua máy chủ của họ. –

5

Tôi gặp sự cố này và tìm thấy giải pháp sau. Chỉ cần một chút thay đổi trong cấu hình email và nó hoạt động 100%:

$config['protocol'] = 'ssmtp'; 
$config['smtp_host'] = 'ssl://ssmtp.gmail.com'; 
+1

giải pháp này cũng không hoạt động –

1

Tôi đã gặp vấn đề tương tự và tôi thử bên dưới mã thay vì chức năng thư của Codeignitor.

mail('[email protected]' , 'Test', 'Test Email'); 

Nó hoạt động và thư được gửi đến địa chỉ email. Thư đó đã được gửi bằng địa chỉ email đã được tạo (Như tôi nghĩ). Trong trường hợp của tôi là:

[email protected] 

Vì vậy, tôi sao chép địa chỉ email này và dùng thử với mã bên dưới.

$this->email->from('[email protected]', 'www.domainserver.com'); 

Và nó hoạt động tốt. Có vẻ như một số máy chủ cần phải tạo địa chỉ email để gửi email trong khi những người khác KHÔNG.

Hy vọng điều này rõ ràng và hữu ích.

Các vấn đề liên quan