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

Nod*_*mon 1 php swiftmailer yii2

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

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

$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();
}
Run Code Online (Sandbox Code Playgroud)

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

Bjo*_*orn 6

根据Yii文档,该attach()方法需要文件名(字符串)作为参数.要修复您的代码:

$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();
}
Run Code Online (Sandbox Code Playgroud)

  • 哈哈,你开玩笑吧?难道你不知道我错过了``setHtmlBody()`行上的`;`? (2认同)