eduardokum/laravel-mail-auto-embed

自动嵌入电子邮件中的图像库

2.11 2024-03-12 22:10 UTC

This package is auto-updated.

Last update: 2024-09-12 23:21:47 UTC


README

Packagist Packagist Packagist GitHub Actions GitHub forks

Laravel Mail Auto Embed

自动解析您的消息并将找到的图像嵌入到邮件中,替换原始在线图像版本。

应适用于 Laravel 5.3+。已在 PHP 7.0+ 上自动测试 Laravel 5.4+。

版本兼容性

安装

您可以通过 composer 安装此包

composer require eduardokum/laravel-mail-auto-embed

此包使用 Laravel 5.5 包自动发现。对于 Laravel 的早期版本,您需要添加以下服务提供程序

$providers = [
    ...
    \Eduardokum\LaravelMailAutoEmbed\ServiceProvider::class,
    ...
 ];

使用方法

使用非常简单,您只需正常编写 markdown

<!-- eg: resources/vendor/mail/markdown/order-shipped.blade.php -->
@component('mail::message')
# Order Shipped

Your order has been shipped!

@component('mail::button', ['url' => $url])
View Order
@endcomponent

Purchased product:

![product](https://domain.com/products/product-1.png)

Thanks,<br>
{{ config('app.name') }}
@endcomponent

发送时,它将替换通常生成的链接

<img src="https://domain.com/products/product-1.png">

通过图像的嵌入内联附件

<img src="cid:[email protected]">.

它也适用于原始 HTML

<!-- eg: resources/vendor/mail/html/header.blade.php -->
<tr>
    <td class="header">
        <a href="{{ $url }}">
            <img src="https://domain.com/logo.png" class="img-header">
        </a>
    </td>
</tr>

如果您不想自动嵌入特定图像(因为它们托管在其他地方,如果您想使用某种图像跟踪器等),只需在图像标签中添加属性 data-skip-embed

<img src="https://domain.com/logo.png" data-skip-embed class="img-header">

本地资源

对于不公开提供的本地资源,请使用 file:// URL

<img src="file://{{ resource_path('assets/img/logo.png') }}" alt="Logo" border="0"/>

配置

默认值在 config/mail-auto-embed.php 中设置。您可以将此文件复制到您的配置目录以修改值,使用以下命令

php artisan vendor:publish --provider="Eduardokum\LaravelMailAutoEmbed\ServiceProvider"

显式嵌入配置

默认情况下,图像会自动嵌入,除非您添加 data-skip-embed 属性。

您还可以通过设置 MAIL_AUTO_EMBED 环境变量为 false 或修改已发布的配置中的 enabled 属性来全局禁用自动嵌入。然后,您可以使用 data-auto-embed 属性为单个图像启用嵌入。

# .env
MAIL_AUTO_EMBED=false
return [
    /*
    |--------------------------------------------------------------------------
    | Mail auto embed
    |--------------------------------------------------------------------------
    |
    | If true, images will be automatically embedded.
    | If false, only images with the 'data-auto-embed' attribute will be embedded
    |
    */
    'enabled' => false,

    // …
];
<p>
    <!-- Won't be embedded -->
    <img src="https://domain.com/logo.png" class="img-header">
</p>
<p>
    <!-- Explicit embedding -->
    <img src="https://domain.com/item.png"  data-auto-embed>
</p>

Base64 嵌入

如果您更喜欢使用 Base64 而不是内联附件,您可以通过设置 MAIL_AUTO_EMBED_METHOD 环境变量或 method 配置属性为 base64 来实现。

return [
    // …

    /*
    |--------------------------------------------------------------------------
    | Mail embed method
    |--------------------------------------------------------------------------
    |
    | Supported: "attachment", "base64"
    |
    */
    'method' => 'base64',
];

请注意,它将增加电子邮件的大小,并且它不会被某些电子邮件客户端(如 Gmail)解码。

混合嵌入方法

如果您根据图像想同时使用内联附件和 Base64,您可以指定嵌入方法作为 data-auto-embed 属性值

<p>
    <img src="https://domain.com/logo.png" data-auto-embed="base64">
</p>
<p>
    <img src="https://domain.com/item.png" data-auto-embed="attachment">
</p>

嵌入实体

您可能想嵌入实际上不存在于您的文件系统中的图像(存储在数据库中)。

在这种情况下,请使您想要嵌入的实体实现 EmbeddableEntity 接口

namespace App\Models;

use Eduardokum\LaravelMailAutoEmbed\Models\EmbeddableEntity;
use Illuminate\Database\Eloquent\Model;

class Picture extends Model implements EmbeddableEntity
{
    /**
     * @param  mixed  $id
     * @return Picture
     */
    public static function findEmbeddable($id)
    {
        return static::find($id);
    }

    /**
     * @return mixed
     */
    public function getRawContent()
    {
        return $this->data;
    }

    /**
     * @return string
     */
    public function getFileName()
    {
        return 'profile_'.$this->id.'.png';
    }

    /**
     * @return string
     */
    public function getMimeType()
    {
        return 'image/png';
    }
}

然后,您可以在电子邮件模板中使用 embed:ClassName:id 语法

<p>
    <img src="embed:App\Models\Picture:123">
</p>

贡献

如果您能改进或添加任何功能,请随时提交拉取请求。

我们目前正在使用 PSR-2。这很容易实现和检查,使用 PHP Coding Standards Fixer。

Donate with Paypal