首页 > 解决方案 > codeigniter smtp 邮件无法正常工作

问题描述

我已经使用 gmail smtp 电子邮件库从 codeingiter 项目发送邮件。但是提交表单时显示以下错误:

A PHP Error was encountered
Severity: Warning

Message: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()

Filename: libraries/Email.php

Line Number: 1902

Backtrace:

File: D:\xampp\htdocs\projectName\application\controllers\Users.php
Line: 66
Function: send

File: D:\xampp\htdocs\projectName\index.php
Line: 315
Function: require_once

我的控制器功能代码:

$config = array(
            'protocol'  => 'smtp',
            'smtp_host' => 'smtp.gmail.com',
            'smtp_port' => 587, //if 80 dosenot work use 24 or 21
            'smtp_user'  => '**',  
            'smtp_pass'  => '**',  
            '_smtp_auth' => true,
            'smtp_crypto' => 'tls',
            'protocol' => 'smtp',
            'mailtype'  => 'html', 
            'charset'    => 'iso-8859-1',
            'wordwrap'   => TRUE
       );
             $this->load->library('email', $config);
             $this->email->set_newline("\r\n");
             $this->email->from('users@gmail.com');  //same email u use for smtp_user 
             $this->email->to($this->input->post('user_email'));
             $this->email->subject($subject);
             $this->email->message($message);
                
        if($this->email->send())

我的 php.ini 文件:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP=localhost
; http://php.net/smtp-port
smtp_port=25

但是邮件还是发不出去。

我的控制器有问题吗?

标签: phpcodeigniteremailsmtp

解决方案


您的代码的问题是您没有初始化电子邮件设置。你的控制器代码在 $this->load->library('email', $config); 是错的。加载电子邮件库后,您必须单独初始化电子邮件设置。

看看这段代码。

$config['protocol'] = 'smtp';
$config['smtp_host'] = 'smtp.gmail.com';
$config['smtp_port'] = 587, //if 80 dosenot work use 24 or 21
$config['smtp_user']  = '**';  
$config['smtp_pass']  = '**';  
$config['_smtp_auth'] = true,
$config['smtp_crypto'] = 'tls';
$config['protocol'] = 'smtp';
$config['mailtype']  = 'html'; 
$config['charset']    = 'iso-8859-1';
$config['wordwrap']   = TRUE

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

$this->email->set_newline("\r\n");
$this->email->from('users@gmail.com');  //same email u use for smtp_user 
$this->email->to($this->input->post('user_email'));
$this->email->subject($subject);
$this->email->message($message);
$this->email->send();

有关更多信息,请查看此处


推荐阅读