我有一个接受文件输入的联系表,我想将该文件附加到从该表发送的电子邮件中。
看一下API参考并没有真正的帮助,它指出该函数期望一个文件路径,除此之外没有任何澄清。
submit操作会将的记录保存到数据库中,并且可以正常工作,类似于:
$submission = MyDataObject::create();
$form->saveInto($submission);
$submission->write();
然后创建并发送一个电子邮件对象。这两个功能均正常运行。
尝试附加我尝试过的文件:
$email->addAttachemnt($submission->MyFile()->Link());
这是我获取文档的文件路径最接近的路径。转储并粘贴该调用输出的结果文件路径将下载表单,但该行会引发错误,并且似乎无法找到文件。
我怀疑我误解了应该为该功能提供什么,澄清将不胜感激。
P.S。我目前无法访问代码,我正在寻找有关函数本身的澄清信息,而不是确切的答案:)。
答案 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
);