Yii2 Swiftmailer 无法发送图像和字体真棒图标

Yii2 Swiftmailer can't send image and font awesome icons

Mu控制器代码:

if ($model->load(Yii::$app->request->post())) {
    $data = $this->renderPartial('receivers/contact_form_output_quick_query', [
            'model' => $model,
            'formData' => $_REQUEST], true);
    $receiver_message = $this->renderPartial('receivers/receiver_message_quick_query',['data' => $data]);

    $message = Yii::$app->mailer->compose();
    $message->setFrom('info@company.com')
    ->setTo('info@company.com')
    ->setSubject('Subject Of email')
    ->setHtmlBody($data)
    ->send();

    $message = Yii::$app->mailer->compose();
    $message->setFrom('info@company.com')
    ->setTo($model->email)
    ->setSubject('Reply: Online Query')
    ->setHtmlBody($receiver_message)
    ->send();


    Yii::$app->session->setFlash('success', 'Congratulations! Your message has been successfully Sent.');
}

谁能告诉我图像和 Font Awesome 图标发送不正确的主要原因是什么?

我的收件人消息部分视图在此处:

<div>
    <table style="width: 600px;">

        <tr>
            <td>Thanks for your interest in our services. We have received your online query.</td>
        </tr>
        <tr>
            <td>Thanks again for contacting us.</td>
        </tr>
        <tr>
            <td style="height: 5px;"></td>
        </tr>
        <tr>
            <td>(It may take some time depending upon the number of queries in the pipeline. We appreciate your cooperation in this regard.)</td>
        </tr>
        <tr>
            <td>Regards!</td>
        </tr>

    </table>

    <?= $this->render('signature'); ?>

    <table>
        <tr>
            <td><strong style="font-size:16px;">Query Details that we received:</strong></td>
        </tr>
        <tr>
            <td><?= $data; ?></td>
        </tr>

    </table>
</div>

以上是接收消息的渲染局部视图:

我的签名部分观点是:

<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<table>
<tr>
    <td colspan="3">
        <img src="<?= $this->theme->baseUrl?>/images/email_signature.png">
    </td>
</tr>
<tr>
    <td style="height: 30px;"></td>
</tr>
<tr>
    <td>+123456778</td>
    <td colspan="2"> |  +123456778</td>
</tr>
<tr>
    <td>http://www.example.com</td>
    <td>|  info@company.com  </td>
    <td>|  <b>Skype:</b>  skypeid</td>
</tr>
<tr>
    <td><a target="_blank" href="https://www.linkedin.com"><i class="fa fa-linkedin"></i> Linked In | </a></td>
    <td><a target="_blank" href="https://www.facebook.com"><i class="fa fa-facebook"></i> Facebook | </a></td>
    <td><a target="_blank" href="https://twitter.com"><i class="fa fa-twitter"></i> https://www.twitter.com</a></td>
</tr>

以上是包含图像和字体真棒图标的签名的渲染局部视图,主要问题出在这个文件中。

并非每个邮件客户端都支持网络字体。所以可能最适合你的是将它下载为图像,将它保存在你的 public 资产文件夹中并使用 img 元素标签调用它。

如果我没记错的话,您需要使用 embed()attach() 来在电子邮件中显示内联图像。

$Imageid = $message->attach(Swift_Attachment::fromPath('path/to/image') 
       ->setDisposition('inline'));

然后使用 $cid 在您为电子邮件分配文本的位置显示电子邮件文本中的图像

<img src="' . $Imageid . '" alt="Image" />'

图片

$this->theme->baseUrl 将 return 主题路径,但没有域和方案部分(例如它将 return /themes/my-theme)。当您生成用于邮寄的 URLs 时,您需要使用方案和域填写 URL - 您应该像这样生成 URLs:

<img src="<?= Yii::$app->request->getHostInfo() . $this->theme->getBaseUrl() ?>/images/email_signature.png">

超棒的字体图标

我有一个坏消息要告诉你 - 许多客户端(尤其是网络邮件)不支持网络字体,所以你将无法以这种方式使用 Font Awesome 图标。对 SVG 的支持更差,所以这也不是解决方案。您可能应该坚持使用良好的旧 PNG 作为图标。

不幸的是,处理邮件就像是一次时间旅行 - 您应该像 10-20 年前创建网站一样构建电子邮件。忘掉花哨的 CSS3 功能吧——大多数防弹模板仍然是使用带有内联 CSS 的表格构建的...