SilverStripe 4.12 来自输入文件表单的电子邮件->addAttachment()

问题描述 投票:0回答:1

我正在使用 silvestripe 4.12,我正在尝试从表单发送电子邮件,但我需要从输入发送带有附件的电子邮件。

但是当我发送联系表单时,它会抛出服务器错误:抱歉,处理您的请求时出现问题。

我的代码:

   public function Reg_Form()
    {

        $fields = new FieldList(
            TextField::create('Name', 'Meno *')->setAttribute('placeholder', 'Vaše meno (stačí krstné)'),
            new FileField('zivotopis','Životopis, vyhláška, prípadne ďalší certifikát'),
            new FileField('foto','Pár foto vašej práce'),
        );

        $actions = new FieldList(
            FormAction::create('submit', 'Odoslať')->addExtraClass('btn')
        );

        $form = new Form($this, 'Reg_Form', $fields, $actions, $required);

        return $form;
    }

 public function submit($data, $form)
    {
        $name = $data['Name'];
         .
         .
        $file = $data['zivotopis'];
        $content = file_get_contents($file['tmp_name']);

        $messageBody = "
                <h1>Správa z online formuláru</h1>
                <p><strong>Meno:</strong> $name</p>
                                 .
                                 .

            ";

        if($data['Code'] != $data['Ans']) {
            return [
                'ErrorMessage' => 'Odpovedzte správne na overovaciu otázku'
            ];
        } else {
          
            $email = Email::create('[email protected]', '[email protected]', 'Správa z online formuláru',$messageBody);
            $email->addAttachment($content);
            $email->send();

            return [
                'Form' => '',
                $this->redirect($this->AbsoluteLink().'reg-form-ok')
            ];
        }
    }
email email-attachments silverstripe
1个回答
0
投票

我找到解决办法了

if ($_FILES['zivotopis']['tmp_name']) {
                $email->addAttachment($_FILES['zivotopis']['tmp_name'], $_FILES['zivotopis']['name']);
            }

            if ($_FILES["foto"]["tmp_name"]) {
                foreach ($_FILES["foto"]["error"] as $key => $error) {
                    if ($error == UPLOAD_ERR_OK) {
                        $tmp_name = $_FILES["foto"]["tmp_name"][$key];
                        $name = basename($_FILES["foto"]["name"][$key]);
                        $email->addAttachment($tmp_name, $name);
                    }
                }
            }
© www.soinside.com 2019 - 2024. All rights reserved.