SilverStripe 4.1 Email-> addAttachment()?

时间:2018-07-27 18:27:11

标签: silverstripe

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

看一下API参考并没有真正的帮助,它指出该函数期望一个文件路径,除此之外没有任何澄清。

submit操作会将的记录保存到数据库中,并且可以正常工作,类似于:

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

然后创建并发送一个电子邮件对象。这两个功能均正常运行。

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

我怀疑我误解了应该为该功能提供什么,澄清将不胜感激。

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

2 个答案:

答案 0 :(得分:0)

我会尝试$parent_user = User::where('email', $organiser->email)->first(); ,如果它不起作用,则可能需要在文件名前加上$email->addAttachment($submission->MyFile()->Filename);

$_SERVER['DOCUMENT_ROOT']

答案 1 :(得分:0)

在SilverStripe 4中,资产被抽象化了,因此您不能保证文件在您的Web服务器上。它通常可以,但是例如可以在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
);