在 CodeIgniter 中发送电子邮件

Posted

技术标签:

【中文标题】在 CodeIgniter 中发送电子邮件【英文标题】:Send email in CodeIgniter 【发布时间】:2014-07-13 21:13:05 【问题描述】:

我是 CodeIgniter 的新手。我可以知道如何通过 localhost 吗?我应该在smtp_usersmtp_pass 中输入什么?下面是我的控制器代码:

function Forgot_Password()
    
        $this->form_validation->set_rules('Email', 'Email', 'trim|required|valid_email|callback_email_check');

        if ($this->form_validation->run() == FALSE)
        
            $this->load->view('templates/header');
            $this->load->view('Forgot_Password');
            $this->load->view('templates/footer'); 
        
        else
        
            $this->load->library('email');


           $config = Array(
               'protocol' => 'smtp',
               'smtp_host' => 'ssl://smtp.googlemail.com',
               'smtp_port' => 465,
               'smtp_user' => 'xxxxxxxxxx',
               'smtp_pass' => 'xxxxxxxxxx'
               );

            $this->load->library('email', $config);
            $this->email->set_newline("\r\n");
            $this->email->from('26328@siswa.unimas.my', 'Your Name');
            $this->email->to('foo.900.fch@gmail.com'); 
            //$this->email->cc('another@another-example.com'); 
            //$this->email->bcc('them@their-example.com'); 

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

            if($this->email->send())
            
                echo 'Email sent.';
            
            else
            
                show_error($this->email->print_debugger());
            
        
     

在 config.php(配置文件夹)中,我有:

$config['smtp_host'] = 'ssl://smtp.gmail.com'; // SMTP Server Address.
$config['smtp_port'] = '465'; // SMTP Port.
$config['protocol'] ='sendmail';

【问题讨论】:

有什么特别的错误吗? 无法使用 PHP mail() 发送电子邮件。您的服务器可能未配置为使用此方法发送邮件。我不知道我应该为 smtp_user 和 smtp_pass 放什么。 你使用的是本地主机吗? 是的。我想向现有帐户发送电子邮件。 您必须安装邮件服务器。 【参考方案1】:

ssl 需要 Google 邮件 SMTP 身份验证,因此 open_ssl 应该在您的 php.ini 中启用扩展

Codeigniter 邮件库有关 SSL/TLS 的更多详细信息click here

在 php 中启用 OPEN SSL click here

【讨论】:

ya.分号已被删除但仍无法发送电子邮件。 @Carson 好的,您是否还检查了服务器上的 open_ssl 扩展程序? 如何检查我服务器上的 open_ssl 扩展? @Carson ,我在答案中添加了另一个链接,请检查您的 php.ini 文件 你,检查并启用 open_ssl 但仍然无法发送。【参考方案2】:

您必须在系统中配置 sendmail。

如果您使用的是 ubuntu,请按照以下步骤操作: 如果您想在 Ubuntu-Linux 服务器上使用 Gmail 帐户作为免费的 SMTP 服务器,您会发现这篇文章很有用。本指南使用 Ubuntu 12.04 进行了测试。如果您遇到任何问题,请随时使用下面的 cmets-section。 通过 smtp.gmail.com 中继 Postfix 邮件:

首先,安装所有必要的软件包:

sudo apt-get install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules

如果您之前没有安装过 postfix,postfix 配置向导会询问您一些问题。只需选择您的服务器作为 Internet 站点,对于 FQDN,请使用 mail.example.com 之类的内容

然后打开你的后缀配置文件:

vim /etc/postfix/main.cf

以及以下几行:

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes

您可能已经注意到我们没有在上面的行中指定我们的 Gmail 用户名和密码。他们将进入不同的文件。打开/创建

vim /etc/postfix/sasl_passwd

并添加以下行:

[smtp.gmail.com]:587    USERNAME@gmail.com:PASSWORD

如果您想使用 Google 应用的域名,请将@gmail.com 替换为您的@domain.com

修复权限并更新后缀配置以使用 sasl_passwd 文件:

sudo chmod 400 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

接下来,验证证书以避免出错。只需运行以下命令:

cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/cacert.pem

最后,重新加载 postfix 配置以使更改生效:

sudo /etc/init.d/postfix reload

测试 检查邮件是否通过 Gmail SMTP 服务器发送

如果您已正确配置所有内容,以下命令应该会从您的服务器生成一封测试邮件到您的邮箱。

echo "Test mail from postfix" | mail -s "Test Postfix" you@example.com

更多详情:https://rtcamp.com/tutorials/linux/ubuntu-postfix-gmail-smtp/

感谢 rtcamp.com,它对我帮助很大:-)

【讨论】:

以上是关于在 CodeIgniter 中发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

无法在Codeigniter中发送电子邮件,没有错误消息。本地或远程

在测试 php 以在 xampp 中发送电子邮件验证时遇到问题

检查在 CakePHP 中发送电子邮件是不是成功/失败?

如何在android中发送电子邮件[重复]

如何在 VC++ 中发送电子邮件?

在 Codeigniter 3 中通过 Office365 帐户发送电子邮件 - 连接超时