【问题标题】:Sending Email Using CodeIgniter From Hosted Server从托管服务器使用 CodeIgniter 发送电子邮件
【发布时间】:2026-02-10 03:00:02
【问题描述】:

在我将源上传到托管服务器后,电子邮件发送不起作用,我的代码如下:

function sendMail($code,$email)
    {
        $config = Array(        
            'protocol' => 'smtp',
            'smtp_host' => 'ssl://smtp.gmail.com',
            'smtp_port' => 465,
            'smtp_user' => 'something@gmail.com',
            'smtp_pass' => 'something',
            'smtp_timeout' => '4',
            'mailtype'  => 'text', 
            'charset'   => 'utf-8'//'iso-8859-1'
        );

        $message = 'Your Verification code is :'.$code;
        $this->load->library('email',$config);
        $this->email->set_newline("\r\n");
        $this->email->from('isecvr@gmail.com',"iSec Community"); // change it to yours
        $this->email->to($email);// change it to yours
        $this->email->subject('Activate your account');
        $this->email->message($message);
        if($this->email->send())
        {
            return true;
        }
        else
        {
         show_error($this->email->print_debugger());
            return false;
        }

    }

我尝试完成这项工作,有些成功,但它们被发送到垃圾邮件而不是收件箱,有些根本不起作用:

1 - 更改 'protocol' => 'sendmail' [FAILED]

2 - 更改 'smtp_host' => 'smtp.gmail.com''smtp_host' => 'ssl://smtp.gmail.com''smtp_host' => 'ssl://smtp.googlemail.com''smtp_host' => 'smtp.googlemail.com'所有[失败]

3 - 更改 'smtp_port' => 587'smtp_port' => 25 [FAILED]

4 - 在我的谷歌电子邮件中,我允许 Less Secure AppsDisabled 2 Step Verification [FAILED]

5 - 评论/删除 $config 变量 [SUCCESS] 但电子邮件被发送到垃圾邮件,并带有以下黄色背景警告 This message may not have been sent by: isecvr@gmail.com

请建议我该怎么做,我现在尝试发送电子邮件超过 10 个小时。

【问题讨论】:

  • 没什么,我的文件在实时托管服务器上,在 xampp 代码中工作正常,但现在不是
  • OK 只需检查一下您的控制器文件,您是否确保只有第一个字母大写,如Example.phpclass Example extends CI_Controller {},CI3 版本是必须的。可能是您的提供商有问题?
  • 是的 @wolfgang1983 这是我的班级名称,看起来像 User extends REST_Controller
  • 和文件名User.php
  • 是的,文件名是 User.php @wolfgang1983

标签: php codeigniter email ssl smtp


【解决方案1】:

问题很简单

  1. 在通过谷歌提交表单时,最好的做法是回调直接 smtp 服务器,而不是ssl://,它永远不会那样工作。

  2. Gmail 使用TLS 发送带有端口587465 的邮件。它永远不会使用 465 通过 SSL 发送邮件。

我还发现没有设置对 TLS 的身份验证。

还要确保在 gmail 帐户设置下访问不太安全的应用程序已关闭,如果已打开,请将其关闭。

我根据技术原因给出的答案。

【讨论】:

    【解决方案2】:

    从本地主机发送电子邮件:

    1.如果您将从 localhost SMTP 发送电子邮件,即评论 $config 数组,您的邮件将始终被重定向到垃圾邮件,除非

    您已将您的服务器配置为邮件服务器(正确安装 Postfix/Sendmail 并在您的域的 DNS 区域中配置了 MX、SPF 和 DKIM 记录)。

    2。如果您使用 Gmail SMTP 作为中继发送电子邮件:

    见:Sending email with gmail smtp with codeigniter email library

    只需确保在防火墙配置中打开端口 465 或 587。

    注意:在我个人看来,这不是一个好的做法,而且总是有一定的局限性。例如:发件人地址将始终作为用户名 SMTP 配置中使用的地址。

    我建议设置并尝试免费的第 3 方 SMTP 服务,例如 SparkPost、Sendgrid 和 mandrill,并在您的代码中使用它们。

    【讨论】:

      【解决方案3】:

      可能是您的服务器不允许与 gmail 服务器通信?这可能是其中一种可能性。如果不是这种情况,那么“show_error($this->email->print_debugger());”的输出是什么?你一定会从这一行得到一些输出。

      【讨论】: