使用Yii2无法使用Swiftmailer嵌入图像

时间:2018-04-02 16:59:22

标签: yii2 swiftmailer

我正在尝试使用swiftmailer在我的电子邮件中嵌入图像,但它没有嵌入其中。我已经尝试过论坛中提供的所有解决方案,但仍无法使其正常运行。以下是我的代码。请注意,我能够在我的模板中使用HTML内容,但只是图像没有嵌入其中。

i) 'imgN'=> Yii::getAlias('@web/assets/image.png'),
ii) 'imgN'=>Yii::getAlias('@app/assets/image.png'),
iii)'imgN'=> '@app/web/assets/image.png',

我也尝试过使用:

 <?php
     use yii\swiftmailer\Message;
     $message = new Message;
    ?>

视图中的代码:

    <img src="<?= $message->embed($imgN); ?>" alt="No Image"/>

并在HTML正文中:

<mat-drawer>

请指出我可能做的任何错误? 这将是一个很大的帮助。 谢谢!

2 个答案:

答案 0 :(得分:0)

尝试

$message = Yii::$app->mailer->compose();
$message->setFrom($from);
$message->setTo($to);
$message->setSubject(self::$subject);
$message->setHtmlBody(Yii::$app->mailer->render('registration', [
    'img' => $message->embed(\Yii::getAlias('@app/assets/image.png')),
], Yii::$app->mailer->htmlLayout));

return $message->send();

并且在视野中:

<img src="<?= $img ?>">

答案 1 :(得分:0)

我想用电子邮件的html显示嵌入式图像。我发现你做不到正常        Yii :: $ app-> mailer-> compose('view_file') 因为您需要在html中引用嵌入图像的“ cid”。

因此,您需要首先创建电子邮件对象

  $email = Yii::$app->mailer->compose($view, ['model' => $model ])
                    ->setFrom($from)
                    ->setTo($emailTo)
                    ->setSubject($subject);

然后创建每个嵌入式对象

  $cid = $email->embed($model->filename,[
                    'fileName' => $model->id,".jpg",
                    'contentType' => 'image/jpeg'
                     ]);
  // save the returned cid
  $images[$item->id] = '<img src="'.$cid.'"/>';

然后通过渲染视图(或其他方式来创建html)来创建html

  $html = Yii::$app->mailer->render('@common/mail/receipt', ['model' => $this, 'images' => $images ]);
  $email->setHtmlBody($html);

然后在您的视图中回显图像

  foreach ( $images as $image )
      echo $image;

然后发送电子邮件

   $result = $email->send()