cakephp - 从控制台发送的电子邮件中的链接未正确呈现
问题描述
我有以下代码发送我的电子邮件:
/**
* @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();
}
从 Web 界面和命令行调用此代码。在努力让完整的 url 显示在从命令行发送的消息中之后,我阅读了文档并遇到了这个:
这就是我进行 setDomain 调用的原因。我再次运行我的代码,它仍然没有完整的 URL。所以我在 web 界面和 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 和一切。但是从 cli 中,它只是发送/jobs/select_staff/1
.
为什么会这样,我该如何解决?
解决方案
仔细阅读文档,他们说setDomain()
在生成消息 ID 时正在使用域设置,即在电子邮件标头中使用它。
生成链接是完全不同的事情,并受App.fullBaseUrl
配置选项的影响,默认情况下,该选项派生自env('HTTP_HOST')
您的应用程序config/bootstrap.php
,除非已经在config/app.php
.
也可以在config/bootstrap_cli.php
文件中为 CLI 环境单独配置基本 URL,应该已经有一个注释片段,如下所示:
// 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'));
也可以看看
推荐阅读
- php - 如何在 Windows 中升级 PHP 版本?
- c# - 如何在 rd.xml 中为 .Net Native 定义程序集(corert)
- java - 如何在到达带有注释的句柄之前转换 Requestbody 的字段
- ios - 以编程方式设置文本时,UITextField 占位符在 UITextField.text 后面显示阴影。为什么?
- excel - 将具有多行数据的列转换为具有多列的行,删除重复的参考编号
- django - Django 管理模型关系
- python - 如何以内存有效的方式将图像数据集作为 numpy 数组读取?
- c++ - sscanf 无法读取双十六进制
- bootstrap-4 - Bootstrap 4.3 - 使用卡片图像覆盖创建销售标签
- c# - 在 c# 和 xamarin 中解析 JSON