CodeIgniter, PHPMailer & SendGrid не работают на хосте на основе cPanel - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть проект CodeIgniter, запущенный на хосте cPanel / centOS. Класс электронной почты CodeIgniter (работает на phpMailer v 6.1.4 ) не работает на этом хосте, но работает локально и в других средах.

  • Когда мы запускаем приведенный ниже код на нашем хосте на основе cPanel, мы получаем непонятную ошибку от функции отладки PHPMailer:

    Обнаружена следующая ошибка SMTP: + �W��TV ���: ����; �D���q�� Невозможно отправить электронное письмо с использованием PHP SMTP. Возможно, ваш сервер не настроен на отправку почты с использованием этого метода.

  • Странно то, что все работало до двух дней go, и ничего не изменилось (в мои знания) на уровне кода.

  • Когда мы проверяем журналы ошибок, мы видим следующее:

Серьезность: Предупреждение -> stream_socket_enable_crypto (): Сертификат пэра CN = *.mywebhost.com' did not match expected CN= smtp.sendgrid. net '/home/myenv/public_html/system/libraries/Email.php

Вышесказанное заставляет меня верить, что:

  • Хост использует какую-то конфигурацию (например, «FKA SMTP Tweak»), не позволяющую нам подключиться к 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());

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

ПРИМЕЧАНИЕ. Это решение может отличаться, но это то, что решило мою проблему. (см. Комментарий @ Syncro, точнее ... нижеприведенное «решение» заключалось в том, как я решил проблему с хостинг-провайдером в моем конкретном случае).

Мой хостинг-провайдер должен был :

  • Убедитесь, что сервер будет принимать исходящие соединения
  • Перезапустите брандмауэр
  • Убедитесь, что настройка FKA SMTP отключена.

Тем не менее, я протестировал API-библиотеку PHP SendGrid и, вероятно, собираюсь go с этим. Я думаю, что PHPMailer - отличное решение, но в некоторых случаях (например, у меня) некоторые хостинг-провайдеры могут мешать ему.

0 голосов
/ 20 февраля 2020

У вас есть это в вашей конфигурации:

$config['smtp_host']        = 'smtp.sendgrid.net';

Но вы видите это в своих ошибках:

Peer certificate CN=*.mywebhost.com did not match expected CN=smtp.sendgrid.net

Это говорит нам о том, что ваш хостинг-провайдер перенаправляет SMTP traffi c на свой собственный почтовый сервер. Поскольку это перенаправление невидимо для вас, оно оставлено на усмотрение TLS, чтобы определить, что ожидаемое имя не соответствует представленному сертификату, и прервать соединение, поскольку в действительности это атака типа "человек посередине".

Вам нужно попросить своего провайдера прекратить перенаправление вашего SMTP-трафика c или найти новую услугу хостинга.

...