CODEIGNITER - fwrite (): операция SSL завершилась неудачно с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 140D00CF: подпрограммы SSL: SSL_write: протокол отключен

У меня есть конфигурация электронной почты smtp для отправки электронной почты через Codeigniter следующим образом:

$config = [
  'protocol' => 'smtp',
  'smtp_host' => 'ssl://cph.dnet.net.id',
  'smtp_port' => 465,
  'smtp_timeout' => 50,
  'smtp_user' => '[email protected]',
  'smtp_pass' => 'MyPaSsWoRd',
  'smtp_keepalive' => 'TRUE',
  'mailtype' => 'html',
  'charset' => 'iso-8859-1'
];
$this->email->initialize($config); 

Если я отправлю всего несколько писем, это всегда сработает. Однако, когда я отправляю много писем, возникает следующая ошибка:

Fatal error: Maximum execution time of 30 seconds exceeded in C:\XAMPP\htdocs\sicuti\system\libraries\Email.php on line 2268

ошибка решается редактированием "php.ini" в значении "max_execution_time" на 9999 .b но codeigniter отображает новые проблемы вроде этого:

fwrite(): SSL operation failed with code 1. OpenSSL Error messages: error:140D00CF:SSL routines:SSL_write:protocol is shutdown

хотя моя конфигурация smtp правильная, согласно рекомендациям в моей cpanel

CODEIGNITER - fwrite (): операция SSL завершилась неудачно с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 140D00CF: подпрограммы SSL: SSL_write: протокол отключен

Если только несколько писем определенно будут работать, но если появится более 10 ошибок, что мне следует изменить, чтобы я мог отправлять несколько писем за раз? Спасибо, я ценю любой ответ.

Первую ошибку, хотя и смягченную путем изменения максимального времени выполнения в PHP, нельзя считать окончательно решенной. Увеличение максимального времени выполнения может серьезно повлиять на производительность вашего сервера в будущем, плюс это позволит избежать ошибок только на стороне PHP. Тем не менее, 140D00CF указывает, что сокет OpenSSL никогда не открывался или закрылся сам и больше не доступен. Возможно, это связано с тем, что розетка остается открытой в течение длительного времени.

Javier Larroulet 08.09.2018 08:56

Мое предложение: можете ли вы измерить время с помощью секундомера, сколько времени нужно, чтобы эти ошибки обнаружились? Если это всегда одно и то же количество секунд, это может быть директива SMTP-сервера, которая закрывает соединение. Вы можете отключить сокет и открывать новый в каждом письме, но это может привести к значительным накладным расходам. Если вам действительно нужно отправлять массовые электронные письма с помощью цикла, я бы посоветовал вам подумать о службе доставки почты вместо того, чтобы отправлять электронные письма самостоятельно.

Javier Larroulet 08.09.2018 09:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
3 662
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня есть функция цикла для отправки нескольких электронных писем, что вызывает ошибки, потому что я отправляю много писем одновременно, поэтому я даю перенаправление для каждой доставки электронной почты, чтобы доставка работала нормально. В следующую функцию цикла я вставил функцию перенаправления, и она работает очень хорошо:

function index () {
  if (!empty($this->Leave_Model->count_all_leave_wait())) {
    $leave_wait_data = $this->Leave_Model->get_all_leave_wait();
    foreach ($leave_wait_data as $res) {
      if (date('Y-m-d')>$res->Confirm_Date) {
        $this->Send_Leave_Request($res->L_Request_ID); # Send Email
        $this->Leave_Model->update_lvd_confirm_date($res->L_Request_ID); # Update Confirm Date When Success Send
        redirect('Login_Employe'); # Redirect
      }
    }
  }
}

function Send_Leave_Request ($id)
{
  # bla bla bla
  $this->email->message('Bla bla  la  bla  bla...');
  $this->email->send();
}

Другие вопросы по теме