2016-01-17 11 views
0

У меня проблема с отправкой электронной почты через SMTP Google Mail, используя электронную библиотеку от Codeigniter.Codeigniter: Не удается отправить письмо Gmail SMTP

Вот код моего контроллера:

<?php 
    class User extends CI_Controller{ 

     function __construct(){ 
      parent::__construct(); 
      $this->load->model('user_model'); 
     } 

function forgot_password($user_id){ 
      $data = $this->user_model->get_user_detail($user_id); 

      if(count($data) == 0){ 
       $response["error"] = TRUE; 
       $response["error_message"] = "No user data was found"; 
      }else{ 
       $response["error"] = FALSE; 
       $pass = $data->user_password;    

       $ci = get_instance(); 
       $ci->load->library('email'); 
       $config['protocol'] = "smtp"; 
       $config['smtp_host'] = "ssl://smtp.gmail.com"; 
       $config['smtp_port'] = "465"; 
       $config['smtp_timeout']="30"; 
       $config['smtp_user'] = "[email protected]"; 
       $config['smtp_pass'] = "*****"; 
       $config['charset'] = "utf-8"; 
       $config['mailtype'] = "html"; 
       $config['newline'] = "\r\n"; 

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

       $ci->email->from('[email protected]', 'Name'); 
       $list = array($user_id); 
       $ci->email->to($list); 
       $ci->email->subject('Test: Forgot Password'); 
       $ci->email->message($pass); 
       if ($this->email->send()) { 
        echo 'Email sent!'; 
       } else { 
        show_error($this->email->print_debugger()); 
       } 
      } 
     } 
    } 
?> 

И это мой Код модели:

<?php 
    class User_model extends CI_Model{ 

function get_user_detail($user_id){ 
       $this->db->where("user_id", $user_id); 
       $query = $this->db->get('user'); 
       return $query->row(); 
     } 
} 
?> 

Я получаю такого рода ошибки, когда я использую эти функции:

PHP-ошибка был обнаружен

Существенность: предупреждение

Message: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

Filename: libraries/Email.php 

Line Number: 1959 

Backtrace: 

File: C:\xampp\htdocs\rest_api\application\controllers\owner.php 
Line: 71 
Function: send 

File: C:\xampp\htdocs\rest_api\index.php 
Line: 292 
Function: require_once 
A PHP Error was encountered 

Severity: Warning 

Message: fsockopen(): Failed to enable crypto 

Filename: libraries/Email.php 

Line Number: 1959 

Backtrace: 

File: C:\xampp\htdocs\rest_api\application\controllers\owner.php 
Line: 71 
Function: send 

File: C:\xampp\htdocs\rest_api\index.php 
Line: 292 
Function: require_once 
A PHP Error was encountered 

Severity: Warning 

Message: fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) 

Filename: libraries/Email.php 

Line Number: 1959 

Backtrace: 

File: C:\xampp\htdocs\rest_api\application\controllers\owner.php 
Line: 71 
Function: send 

File: C:\xampp\htdocs\rest_api\index.php 
Line: 292 
Function: require_once 

Может ли кто-нибудь дать мне решение? Я ценю любую помощь :)

+0

Если вы используете локальный хост, пожалуйста, убедитесь, что вы установили настройку, как по электронной почте здесь для WAMP и XAMPP https://www.youtube.com/watch?v=TO7MfDcM-Ho – user4419336

+0

Также убедитесь, если вы используете CI 3, имя файла owner.php изменилось на первую букву контроллеров Owner.php, а модели класса и имени файла должны быть в верхнем регистре. – user4419336

ответ

0

скачать https://github.com/PHPMailer/PHPMailer. Сохраните PHPMailer в приложении \ libraries.

Добавить в приложении \ Config \ config.php:

//administrator 
$config['admin_email'] = "[email protected]"; 
$config['admin_nome'] = "admin name"; 

//PHP Mailer | gmail send account 
$config['host'] = "smtp.gmail.com"; 
$config['user'] = "[email protected]"; 
$config['pass'] = "passwordaccount"; 
$config['port'] = 587;  
$config['to'][0] = array("email"=>"[email protected]","nome"=>"Email 1"); 
$config['to'][1] = array("email"=>"[email protected]","nome"=>"Email 2"); 

В контроллере:

require_once("application/libraries/PHPMailer/class.phpmailer.php"); 

$admin_email = $this->config->item('admin_email'); 
$admin_nome = $this->config->item('admin_nome'); 

$mail = new phpmailer(); 

$mail->IsSMTP(); 
$mail->Host = $this->config->item('host'); 
$mail->SMTPAuth = true; 
$mail->Username = $this->config->item('user'); 
$mail->Password = $this->config->item('pass'); 
$mail->Port= $this->config->item('port'); 
$mail->SMTPSecure = "tls";//or ssl 

$mail->From = $admin_email; 
$mail->FromName = $admin_nome; 

$arr_address = $this->config->item('to'); 

for($i=0;$i<sizeof($arr_address);$i++){ 

    $mail->AddAddress($arr_address[$i]["email"],$arr_address[$i]["nome"]);  
} 

$mail->IsHTML(true); 

$mail->Subject = utf8_decode("Notification"); 

$mail->Body = "<p>Test message!</p>"; 
$mail->Body = utf8_decode($mail->Body); 

$mail->Send(); 
+0

Как это решить? Сообщение: require_once (application/libraries/PHPMailer/class.phpmailer.php): не удалось открыть поток: нет такого файла или каталога – Damian

0

Эй попробовать это это работает для меня плавно

$config = Array(
    'protocol' => 'smtp', 
    'smtp_host' => 'ssl://smtp.googlemail.com', 
    'smtp_port' => 465, 
    'smtp_user' => 'xxx', 
    'smtp_pass' => 'xxx', 
    'mailtype' => 'html', 
    'charset' => 'iso-8859-1' 
); 
$this->load->library('email', $config); 
$this->email->set_newline("\r\n"); 
$this->email->from('[email protected]'); // change it to yours 
$this->email->to([email protected]);// change it to yours 
$this->email->subject('A test email from CodeIgniter using Gmail'); 
$this->email->message('A test email from CodeIgniter using Gmail'); 
$result = $this->email->send(); 
if($result){ 
    echo "Mail sent successfully..."; 
} 
else{ 
echo "error in mail sending..."; 
} 
+0

он не работает :( – Damian

+0

та же ошибка или другая? –

+0

Я получил это сообщение об ошибке: Неопределенное свойство: CI_Loader :: $ электронная почта – Damian

0

Попробуйте этот код , он отлично работает для меня. Надеюсь, это сработает и для вас.

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 
class Email extends CI_Controller 
{ 
    public function index() 
    { 
     $config = Array(
      'protocol' => 'smtp', 
      'smtp_host' => 'ssl://smtp.gmail.com', 
      'smtp_port' => 465, 
      'smtp_user' => '[email protected]', 
      'smtp_pass' => 'yourPassword', 
      'mailtype' => 'html', 
      'charset' => 'iso-8859-1', 
      'wordwrap' => TRUE 
     ); 
     $this->load->library('email', $config); 
     $this->email->set_newline("\r\n"); 
     $this->email->from('sendersEmail', 'sendersName'); 
     $this->email->to('receiverEmail'); 
     $this->email->subject('emailSubject'); 
     $this->email->message('emailMessage'); 
     if ($this->email->send()) { 
      echo 'Email sent.'; 
     } else { 
      show_error($this->email->print_debugger()); 
     } 
    } 
} 
Смежные вопросы