Php 编码点火器;SendGrid在基于cPanel的主机上不工作

Php 编码点火器;SendGrid在基于cPanel的主机上不工作,php,codeigniter,email,smtp,phpmailer,Php,Codeigniter,Email,Smtp,Phpmailer,我在基于cPanel/centOS的主机上运行CodeIgniter项目。(正在运行的)在此主机上不工作,但在本地和其他环境中工作 当我们在基于cPanel的主机上运行下面的代码时,我们从PHPMailer调试函数中得到一个无法解释的错误: 遇到以下SMTP错误:+�W��电视���:����;�D���Q�� 无法使用PHP SMTP发送电子邮件。您的服务器可能未配置为使用此方法发送邮件 奇怪的是,直到两天前,一切都正常工作,而且(据我所知)在代码级别上没有任何更改 当我们检查错误日志时,

我在基于cPanel/centOS的主机上运行CodeIgniter项目。(正在运行的)在此主机上不工作,但在本地和其他环境中工作

  • 当我们在基于cPanel的主机上运行下面的代码时,我们从PHPMailer调试函数中得到一个无法解释的错误:

    遇到以下SMTP错误:+�W��电视���:����;�D���Q�� 无法使用PHP SMTP发送电子邮件。您的服务器可能未配置为使用此方法发送邮件

  • 奇怪的是,直到两天前,一切都正常工作,而且(据我所知)在代码级别上没有任何更改

  • 当我们检查错误日志时,会看到以下内容:
严重性:警告-->流\u套接字\u启用\u加密():对等证书 CN=
*.mywebhost.com'与预期的CN=
smtp.sendgrid.net'不匹配 /home/myenv/public_html/system/libraries/Email.php

上述情况使我相信:

  • 主机正在利用某种配置(如“FKA SMTP调整”)阻止我们连接到SendGrid。(我打开/关闭了这个,但似乎什么也没发生)
  • 存在某种SSL问题
我一直在尝试与我们的主持人进行诊断,但他们到目前为止都没有帮助,所以任何见解都是非常受欢迎的,请提前感谢

请告知我们是否可以提供更多信息,并提前感谢您的合作

$config                     = array();
$config['useragent']        = 'PHPMailer';
$config['protocol']         = 'smtp';
$config['mailpath']         = '/usr/sbin/sendmail';
$config['smtp_host']        = 'smtp.sendgrid.net';
$config['smtp_user']        = 'USER';
$config['smtp_pass']        = 'PASSWORD';
$config['smtp_port']        = 587;
$config['smtp_timeout']     = 5;
$config['smtp_crypto']      = 'tls';
$config['wordwrap']         = true;
$config['wrapchars']        = 76;
$config['mailtype']         = 'html';
$config['charset']          = 'iso-8859-1';
$config['validate']         = true;
$config['priority']         = 3;
$config['crlf']             = "\n";
$config['newline']          = "\n";
$config['bcc_batch_mode']   = false;
$config['bcc_batch_size']   = 200;

$this->load->library('email');
$this->email->initialize($config);
$this->email->from('my@email.com', 'Your Name');
$this->email->to('my@email.com');
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');
$this->email->send();
show_error($this->email->print_debugger());

您的配置中有以下内容:

$config['smtp_host']        = 'smtp.sendgrid.net';
但你在错误中看到了这一点:

Peer certificate CN=*.mywebhost.com did not match expected CN=smtp.sendgrid.net
这告诉我们,您的主机提供商正在将SMTP通信重定向到其自己的邮件服务器。由于此重定向对您不可见,因此由TLS发现预期名称与提供的证书不匹配,并中止连接,因为这实际上是中间人攻击


您需要要求提供商停止重定向SMTP通信,或找到新的托管服务。

注意:此解决方案可能会有所不同,但这正是解决我的问题的方法。(请参阅@Syncro的评论,更准确地说……下面的“解决方案”是我如何在我的特殊情况下与托管提供商解决问题的)

我的主机提供商必须:

  • 确保服务器将接受传出连接
  • 重新启动防火墙
  • 确保已禁用FKA SMTP调整

这就是说,我已经测试了SendGrid,并且可能会使用它。我认为PHPMailer是一个很好的解决方案,但在某些情况下(比如我的),某些托管提供商可能会干扰它。

您的托管公司建议使用的smtp\U主机是什么?我在共享主机环境中设置了
protocol='smtp'
smtp\u host='**mail**.domain.com'
。我们使用SendGrid是因为它在许多其他情况下工作可靠。而且,在三天前一切都正常,我想这取决于你的主机提供商,让你对他们最近的变化有更多的了解。如果他们是“无用的”考虑转移到另一个提供者……要清楚,你的意思是“托管提供商”(当我读到“ISP”时,我想到的是“互联网服务提供商”……我想不会对重定向有任何控制)。如果这是一个基于CPANL的系统,您知道我将在哪里禁用本地SMTP服务器吗?是的,我是指您的托管提供商。鉴于提供的通配符证书,我猜这是在cPanel控件之上的级别完成的,因此您需要询问您的主机提供商。例如,我知道scaleway.com就是这样工作的。问题不在于你有一个本地邮件服务器,而是防火墙正在重定向你的流量。好的,这很有意义,非常感谢你抽出时间。最后一个问题,如果我们通过CloudFlare运行DNS,我们是否必须通过CloudFlare进行管理,或者它是否位于服务器/主机端?不,DNS不是一个因素,而是主机提供商重定向的出站网络流量。如果您尝试从您的服务器“openssl s_client-connect smtp.google.com:465”,我希望看到它显示相同的证书。非常感谢您的见解!在和我的主人吵了一架之后,我们终于让这项工作开始了。归根结底,这似乎是一系列问题的结合。