多个文件使用Yii2附件和发送邮件

时间:2015-07-18 10:34:25

标签: php yii2 swiftmailer

在这里,我想清楚地解释我的问题

  

能够上传多个文件,但问题是没有得到   在我的邮件中附加文件,只有一个附件正在接收,在   服务器保存所有文件

$model->attachment = UploadedFile::getInstances($model, 'attachment');
$files = '';

if ( $model->attachment )
{
    foreach ($model->attachment as $file) 
    {
        $file->saveAs('emailattachments/' .$file->baseName. '.' . $file->extension);
        $files = 'emailattachments/' .$file->baseName. '.' . $file->extension;
        $model->attachment = $files;
    }

}
if( $model->attachment )
{
    $value = Yii::$app->mailer->compose()
    ->setFrom([ Yii::$app->user->identity->email => 'Sample Mail'])
    ->setTo($model->email)
    ->setSubject($model->subject)
    ->setHtmlBody($model->content)
    ->attach($model->attachment)
    ->send();
}

上传多个文件但在发送邮件时,只收到一个附件本身。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

根据Yii docsattach()方法需要文件名(字符串)作为参数。修复你的代码:

$model->attachment = UploadedFile::getInstances($model, 'attachment');

if($model->attachment) {
    $message = Yii::$app->mailer->compose()
    ->setFrom([ Yii::$app->user->identity->email => 'Sample Mail'])
    ->setTo($model->email)
    ->setSubject($model->subject)
    ->setHtmlBody($model->content);

    foreach ($model->attachment as $file) {
        $filename = 'emailattachments/' .$file->baseName. '.' . $file->extension; # i'd suggest adding an absolute path here, not a relative.
        $file->saveAs($filename);
        $message->attach($filename);
    }

    $message->send();
}

答案 1 :(得分:0)

在您的代码中,您只分配最后一个。如果您想要所有文件,您应该以组合文件或与您的电子邮件撰写方式兼容的方式将它们连接起来。

尝试使用类似的东西

<ul>
  <li class="mainMenuItem menuTour">
    <a href="#">Tour</a>
    <div class="sub_nav" data-grid-id="sub_menu_stay">
        bla bla bla
    </div>
  </li>
  <li class="mainMenuItem">
    <a href="#">Offer</a>
    <div class="sub_nav" data-grid-id="sub_menu_stay">
        bla bla bla
    </div>
  </li>
<ul>