【问题标题】:Codeigniter: Cannot send email Gmail SMTPCodeigniter:无法发送电子邮件 Gmail SMTP
【发布时间】:2016-01-17 16:51:45
【问题描述】:

我在使用 Codeigniter 的电子邮件库通过 google mail 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'] = "username@gmail.com";
                $config['smtp_pass'] = "*****";
                $config['charset'] = "utf-8";
                $config['mailtype'] = "html";
                $config['newline'] = "\r\n";

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

                $ci->email->from('username@gmail.com', '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

谁能给我一个解决方案?感谢您的帮助:)

【问题讨论】:

  • 如果您使用本地主机,请确保您已设置电子邮件设置,如此处为 wamp 和 xampp youtube.com/watch?v=TO7MfDcM-Ho
  • 还要确保您使用 CI 3 的文件名 owner.php 更改为 Owner.php 控制器的第一个字母和模型的类和文件名应该是大写的。

标签: php codeigniter email


【解决方案1】:

下载https://github.com/PHPMailer/PHPMailer。 将 PHPMailer 保存在 application\libraries 中。

在application\config\config.php中添加:

//administrator
$config['admin_email'] = "email@gmail.com";
$config['admin_nome'] = "admin name";

//PHP Mailer | gmail send account
$config['host'] = "smtp.gmail.com";
$config['user'] = "account@gmail.com";
$config['pass'] = "passwordaccount";
$config['port'] = 587;    
$config['to'][0] = array("email"=>"email1@gmail.com","nome"=>"Email 1");
$config['to'][1] = array("email"=>"email2@gmail.com","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();

【讨论】:

  • 如何解决这个问题?消息:require_once(application/libraries/PHPMailer/class.phpmailer.php):打开流失败:没有这样的文件或目录
【解决方案2】:

嘿试试这个它对我来说很顺利

$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('abc@xyz.com'); // change it to yours
$this->email->to(yours@yours.com);// 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...";
}

【讨论】:

  • 我收到此错误消息:未定义属性:CI_Loader::$email
【解决方案3】:

试试这个代码,它对我来说很好用。我希望它也对你有用。

<?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' => 'yourEmailAddress@gmail.com',
            '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());
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-21
    • 2012-10-20
    • 2022-01-21
    • 2021-07-06
    • 2016-11-19
    • 2021-03-26
    相关资源
    最近更新 更多