Ссылки не корректно отображаются при отправке электронной почты из консоли - PullRequest
0 голосов
/ 24 мая 2018

У меня есть следующий код, который отправляет мою электронную почту:

/**
 * @param array $to
 * @param string $subject
 * @param array $vars
 * @param string $template
 * @param array $from
 */
public function sendEmail(array $to, $subject, array $vars, $template = 'default', array $from = ['dev@example.com' => 'Online'])
{
    $transport = 'default';
    if (Configure::read('debug')) {
        $transport = 'dev';
    }
    $mailer = new Email($transport);
    if ($this->isCommandLineInterface()) {
        $mailer->setDomain('http://local.peepznew.com');
    }
    $this->addRecipients($mailer, $to);
    $mailer->setFrom($from);
    $mailer->setSubject($subject);
    $mailer->setTemplate($template);
    if (isset($vars['preheaderText']) === false) {
        $vars['preheaderText'] = '';
    }
    $vars['subject'] = $subject;
    $mailer->setViewVars($vars);
    $mailer->setEmailFormat('both');
    $mailer->send();
}

Этот код вызывается как из веб-интерфейса, так и из командной строки.После попыток получить полный URL для отображения в сообщениях, отправленных из командной строки, я прочитал документы и наткнулся на this :

enter image description here

Именно поэтому я делаю вызов setDomain.Я снова запускаю свой код, и у него все еще нет полных URL.Итак, я создал точно такую ​​же функцию как в веб-интерфейсе, так и в cli, которая выглядит следующим образом:

$this->sendEmail(
    ['my.email@example.com'],
    'Test Email',
    [
        'title' => 'We need to select another peep',
        'showFooterLinks' => true,
    ]
);
die;

Шаблон по умолчанию выглядит так (буквально содержит только одну строку):

echo $this->Html->link('test link', ['controller' => 'jobs', 'action' => 'select_staff', 1, '_full' => true]);

Письма из веб-интерфейса, использующие приведенный выше код, отправляют безупречно.Полные URL и все.Однако из клика он просто отправляет /jobs/select_staff/1.

Почему это так и как мне это исправить?

1 Ответ

0 голосов
/ 24 мая 2018

Внимательно прочитайте документы, они говорят, что домен, установленный через setDomain(), используется при генерации идентификаторов сообщений, то есть он используется в заголовке электронной почты.

Генерация ссылок - это нечто совершенно другое,на него влияет параметр конфигурации App.fullBaseUrl, который по умолчанию выводится из env('HTTP_HOST') в ваших приложениях config/bootstrap.php, если он уже не настроен в config/app.php.

Также возможно настроить базовый URL-адрес отдельнодля среды CLI в вашем файле config/bootstrap_cli.php уже должен быть закомментированный фрагмент кода, который выглядит следующим образом:

// Set the fullBaseUrl to allow URLs to be generated in shell tasks.
// This is useful when sending email from shells.
//Configure::write('App.fullBaseUrl', php_uname('n'));

См. также

...