Невозможно открыть файл для чтения [filename.pdf] yii2 swiftmailer - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь отправить электронное письмо с вложением, когда я использовал var_dump ($ filename), он возвращает имя файла, а gettype ($ filename) возвращает строку. но когда я пытаюсь отправить вложение, он все равно возвращает Невозможно открыть файл для чтения [filename.pdf], даже если $ file_attachment был зациклен, я попытался изменить UploadedFile :: getInstancesByName ('file_attachment');в UploadedFile :: getInstanceByName ('file_attachment');но ничего не случилосьПожалуйста, помогите мне.

Это мой контроллер

 if(Yii::$app->request->isPost){
            $email =  Yii::$app->request->post('email');
            $message = Yii::$app->request->post('message');
            $file_attachment = UploadedFile::getInstancesByName('file_attachment');
            if($file_attachment){
                $mail = Yii::$app->mailer->compose()
                ->setFrom(['myemail@gmail.com' => 'My Email'])
                ->setTo($email)
                ->setSubject('My Subject')
                ->setHtmlBody($message);
                foreach ($file_attachment as $file) {
                    $filename = $file->baseName. '.' . $file->extension;
                    $mail->attach($filename);
                }
                //$mail->send();

               //echo gettype($filename);
              // var_dump($filename);
                $mail->send();
            }else{
                $mail =  Yii::$app->mailer->compose()
                ->setFrom(['myemail@gmail.com' => 'My Email'])
                ->setTo($email)
                ->setSubject('My Subject')
                ->setHtmlBody($message)
                ->send();
            }
        }

Это вид

   <?php 
      echo FileInput::widget([
      'name' => 'file_attachment',
       'attribute' => 'file_attachment',
       'options' => ['multiple' => true]
       ]);

   ?>

1 Ответ

0 голосов
/ 08 ноября 2019

Свойство baseName в yii\web\UploadedFile содержит исходное имя файла, но файл отсутствует на сервере под его исходным именем. Вам необходимо использовать свойство tempName, которое содержит путь к загруженному файлу на сервере.

Ваше значение для каждого цикла, который прикрепляет файлы к почте, должно выглядеть следующим образом:

foreach ($file_attachment as $file) {
    $filename = $file->baseName. '.' . $file->extension;
    $mail->attach(
        $file->tempName,
       ['fileName' => $filename]
    );
}

Это также может бытьХорошая идея проверить hasError свойство yii\web\UploadedFile перед попыткой прикрепить файл, чтобы увидеть, была ли загрузка успешной.

Также убедитесь, что вы установили 'enctype' => 'multipart/form-data' в параметрах формы, когда выне используйте ActiveForm с ActiveField::fileInput(), иначе файлы могут быть не загружены.

...