SilverStripe 4.1 电子邮件->addAttachment()?

SilverStripe 4.1 Email->addAttachment()?

我有一个接受文件输入的联系表单,我想将该文件附加到从表单发送的电子邮件中。

查看 API 参考并没有真正帮助,它指出该函数需要一个文件路径,除此之外没有任何说明。

提交操作会将 的记录保存到数据库中,这可以正常工作,例如:

$submission = MyDataObject::create();
$form->saveInto($submission);
$submission->write();

然后创建并发送电子邮件对象。这两个都按预期运行和工作。

正在尝试附加我试过的文件: $email->addAttachemnt($submission->MyFile()->Link()); 这是我最接近获取文档文件路径的方法。转储并粘贴该调用输出的结果文件路径将下载表单,但该行会引发错误并且似乎无法找到该文件。

我怀疑我误解了应该赋予函数的内容,非常感谢澄清。

P.S。我目前无法访问代码,我正在寻找有关函数本身的一些说明,而不是确切的答案:)。

我会尝试 $email->addAttachment($submission->MyFile()->Filename); 如果它不起作用,您可能需要在文件名前加上 $_SERVER['DOCUMENT_ROOT']

$email->addAttachment($_SERVER['DOCUMENT_ROOT'] . $submission->MyFile()->Filename);

在 SilverStripe 4 中,资产被抽象化,因此您无法保证该文件存在于您的网络服务器上。它通常会,但它同样可以存在于某个地方的 CDN 上。

当您在 SilverStripe 4 中处理文件时,您应该始终使用文件的 内容 和任何其他可用的元数据,而不是依赖文件系统调用来加载它。

这是 silverstripe/userforms 模块将文件附加到电子邮件的方式:

/** @var SilverStripe\Control\Email\Email $email */
$email->addAttachmentFromData(
    $file->getString(),   // stream of file contents
    $file->getFilename(), // original filename
    $file->getMimeType()  // mime type
);