【问题标题】:Unable to open file for reading [filename.pdf] yii2 swiftmailer无法打开文件以读取 [filename.pdf] yii2 swiftmailer
【发布时间】:2019-11-08 04:06:26
【问题描述】:

当我使用 var_dump($filename) 返回文件名和 gettype($filename) 返回字符串时,我正在尝试发送带有附件的电子邮件。但是当我尝试发送附件时,即使 $file_attachment 被循环,它仍然返回 Unable to open file for reading [filename.pdf] 我试图更改 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]
       ]);

   ?>

【问题讨论】:

    标签: yii2 swiftmailer


    【解决方案1】:

    yii\web\UploadedFile 的 baseName 属性包含原始文件名,但该文件在服务器上不存在于其原始文件名下。您需要使用 tempName 属性,该属性包含服务器上上传文件的路径。

    将文件附加到邮件的每个周期应如下所示:

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

    在尝试附加文件之前检查yii\web\UploadedFile 的hasError 属性以查看上传是否成功也是一个好主意。

    当您不使用ActiveForm 和ActiveField::fileInput() 时,还要确保您在表单选项中设置了'enctype' =&gt; 'multipart/form-data',否则可能无法上传文件。

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 2021-02-07
      • 2014-08-06
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 2022-08-13
      • 1970-01-01
      • 2019-07-11
      相关资源
      最近更新 更多