#php #codeigniter-3
#php #codeigniter-3
Вопрос:
Я хочу отправлять почту в фоновом режиме, у меня есть функция для этого, и она работает нормально, но она блокирует передачу моего сообщения пользователю!
// я попробовал это
$er=1;
$outmsg = 'You are now registered,please check your email for verification!';
$this->common_model->partialResponse();
$this->mailer->send_mail($mail,$Mailconfig);
$type = ($er==1) ? "success" : "danger";
echo json_encode(array('msgtype'=>$type,'datacon'=>$outmsg));
function partialResponse()
{
$response=array();
ignore_user_abort(true);
ob_start();
echo json_encode($response);
header("Status: 200");
header($_SERVER["SERVER_PROTOCOL"] . " 200 Ok");
header("Content-Type: application/json");
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
}
Комментарии:
1. почему бы вам не сделать это последним?
2. потому что у меня есть 2 условия: одно для некоторой ошибки, второе для рассылки и, наконец, отправка ошибки throw json ! , но это сообщение не передается в json
3. если я помню, у CodeIgniter есть система очередей для фоновых процессов
4. я не знаю, но знаете ли вы, как использовать эту функцию, потому что я отлично работаю для своих нужд, но проблема в том, что она не передает значение переменной $ outmsg в массив json_encode ..?
Ответ №1:
Недавно я столкнулся с той же проблемой: медленная отправка электронной почты. Использование SMTP еще хуже. 3 ~ 4 секунды для отправки электронной почты.
Сначала я думаю, что мог бы сделать что-то, что вы пытаетесь архивировать, но этот метод может вызвать так много проблем, что оно того не стоило.
В конечном итоге я создаю таблицу электронной почты, чтобы поставить в очередь (и сохранить как историю) все электронные письма, которые могут быть отправлены.
Для обработки этой очереди я создал cronjob для запуска определенного контроллера / метода только для отправки этих электронных писем.