codeigniter — почта php cron включает ссылки без имени хоста, base_url отсутствует

У нас есть платформа, основанная на Codeigniter PHP, которая иногда отправляет письма через CRON Job.
Чтобы не перегружать систему, мы помещаем все письма в виде BLOB в очередь базы данных, а затем через каждые x минут будут отправляться письма из этой очереди.

$mailTemplatePartials = load_template_passive_mail_volunteer($region->region_name);

//Create and sent a mail to volunteers (passive matching of vacancies)
$this->email->from(GENERAL_MAIL, 'Give a Day');
$this->email->to($vol->email);
$this->email->subject(lang("new_vacancies_matches"));
$message = $this->load->view($mailTemplatePartials, $mail_data, TRUE);
$this->email->message($message);
//Insert mail in the mail_queue_passive database table
insert_mail_in_passive_queue(GENERAL_MAIL, $vol->email, lang("new_vacancies_matches"), $this->email);

‘Load_template_passive_mail_volunteer’ загружает реальное почтовое представление, и в этом представлении мы создали URL с помощью функции base_url (). Например:

<img alt="" src="<?php echo base_url() . 'design/img/interesses/grey/' . $interest->img; ?>" width="30" style="max-width: 1188px; border-radius: 0%;" class="mcnImage">

‘Insert_mail_in_passive_queue’ вставит всю почту в очередь базы данных:

function insert_mail_in_passive_queue($from, $to, $subject, $mail_object) {
$CI = get_instance();
$CI->load->model('mail/mailQueuePassive_model');

$mail = new stdClass();
$mail->from = $from;
$mail->to = $to;
$mail->subject = $subject;
$mail->mail_object = serialize($mail_object);

return $CI->mailQueuePassive_model->add($mail);
}

Так что теперь в нашей очереди базы данных у нас есть полный почтовый объект с правильной разметкой и ссылками, весь почтовый контент уже на месте. Таким образом, мы не создаем содержимое письма в CRON, нам нужно только отправить его еще.

И затем есть метод CRON, который фактически проверяет в почтовой очереди, есть ли отправляемые письма или нет:

public function sendPassiveQueuingMails() {
ini_set('max_execution_time', 0); //Make sure the script does not time out
// this function can only be called from the command line
if (!$this->input->is_cli_request()) {
echo "Access is only allowed from the command line";
return;
}

$this->load->model('mail/mailQueuePassive_model');
$mailsToSent = $this->mailQueuePassive_model->getAllNotSent();

foreach ($mailsToSent as $mail) {
$this->mailQueuePassive_model->setLock($mail->mail_id);
$mailObject = unserialize($mail->mail_object);
$mailSent = $mailObject->send();

if ($mailSent == 1) {
$this->mailQueuePassive_model->setSentSuccessfull($mail->mail_id);
$this->mailQueuePassive_model->setUnlock($mail->mail_id);
} else {
//In een future uitbreiding kan hier de "amount of retries" ook telkens met 1 verhoogd worden, kan gebruikt worden door een slim algoritme (kolom moet nog aangemaakt worden dan)
$this->mailQueuePassive_model->setUnlock($mail->mail_id);
}
}
}

Если мы протестируем эту систему одной почтой, она будет работать отлично.
Письмо приходит и содержит правильные изображения и ссылки обратно на наш сайт.

Но когда мы активируем это с живыми данными, мы видим, что письма почему-то больше не включают имя хоста в URL ресурсов (изображения) и простые ссылки. Это будет около 400 писем, запускаемых систематически с задержкой в ​​2 минуты (или около того) заданием CRON.

Так, например, изображение или ссылка в письме больше не будут работать, потому что ссылка состоит из:
https: //nl-be/design/img/interesses/grey/interesse-reizen-grey.svg
вместо:
https://www.mydomein.be/design/img/interesses/grey/interesse-reizen-grey.svg

введите описание изображения здесь
введите описание изображения здесь

Кто-нибудь когда-либо испытывал что-то подобное или знает, что может пойти не так?

Это не первые письма, которые мы отправляли через задания CRON, но это первые письма, в которых мы получаем совершенно неправильные URL.

Заранее спасибо!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector