Письма php cron включают ссылки без имени хоста, base_url отсутствует - PullRequest
0 голосов
/ 10 декабря 2018

У нас есть платформа, основанная на 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-адреса обратно на наш веб-сайт.

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

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

enter image description here enter image description here

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...