【问题标题】:How to convert UploadedFile object to Swift_Mime_MimeEntity如何将 UploadedFile 对象转换为 Swift_Mime_MimeEntity
【发布时间】:2018-03-14 14:48:43
【问题描述】:

我有一个发送电子邮件的 Symfony 3.3 联系表。现在我正在尝试向表单添加附件。我在 sendEmail 函数中插入以下行:

        ->attach($data["attachment"])

...我收到以下错误:

传递给 Swift_Mime_SimpleMessage::attach() 的参数 1 必须实现 接口 Swift_Mime_MimeEntity,实例 Symfony\Component\HttpFoundation\File\UploadedFile 给出

所以我的问题是:如何将 UploadedFile 对象转换为 SwiftMailer 会满意的对象?

====

编辑#1:我试过这个没有成功:

$fullFilePath = $data["attachment"]->getPath() . '/' . $data["attachment"]->getClientOriginalName();
$attachment = \Swift_Attachment::fromPath($fullFilePath);

附加该“附件”只会导致电子邮件未发送,尽管应用程序的行为就像它已发送表单一样。

====

编辑#2:进步!我现在能够得到一个有用的错误。这段代码...

        $extension = $data["attachment"]->guessExtension();
    if($extension !== 'rtf'){
        die('Please give us an rtf file. TODO: Put a better message here!');
    }
    $newFilePath = '/tmp';
    $newFileName = 'temporary.rtf';
    $data["attachment"]->move($newFilePath, $newFileName);

... 给我这样的错误:

无法将文件“/tmp/phpnIqXDr”移动到“/tmp/temporary.rtf”()

...这很令人沮丧,因为我知道/tmp 是每个用户都可以写的。

【问题讨论】:

    标签: php forms symfony swiftmailer


    【解决方案1】:

    您不需要移动文件,Symfony\Component\HttpFoundation\File\UploadedFile 类返回路径并具有获取文件名和 mimetype 的方法。

    此代码适用于我:

    $message->attach(
        \Swift_Attachment::fromPath($data["attachment"])
            ->setFilename(
                $data["attachment"]->getClientOriginalName()
            )
            ->setContentType(
                $data["attachment"]->getClientMimeType()
            )
    );
    

    感谢toolpixx

    【讨论】:

      【解决方案2】:

      这是最终为我工作的代码:

      private function sendEmail($data)
      {
          $vgmsContactMail = self::contactMail;
          $mailer = $this->get('mailer');
          /* @var $uploadedFile UploadedFile */
          $uploadedFile = $data["attachment"];
          $extension = $uploadedFile->guessExtension();
          if(!in_array($extension, ['pdf','rtf']) ){
              die('Please upload a .pdf or .rtf file.');
          }
          $newFilePath = '/tmp';
          $newFileName = 'temporary' . rand(0,10000) . '.rtf';
          $uploadedFile->move($newFilePath, $newFileName);
          $attachment = \Swift_Attachment::fromPath('/tmp/' . $newFileName);
          $message = \Swift_Message::newInstance("VGMS Contact Form: ". $data["subject"])
              ->setFrom(array($vgmsContactMail => "Message by ".$data["name"]))
              ->setTo(array(
                  $vgmsContactMail => $vgmsContactMail
              ))
              ->setBody($data["message"]."<br>ContactMail :".$data["email"])
              ->attach($attachment)
          ;
          return $mailer->send($message);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        • 2018-02-13
        • 2011-05-26
        • 2017-10-20
        相关资源
        最近更新 更多