PHPackages                             mycg-hyperf-ext/mail - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. mycg-hyperf-ext/mail

ActiveLibrary[Mail &amp; Notifications](/categories/mail)

mycg-hyperf-ext/mail
====================

The Hyperf Mail package.

015PHP

Since May 6Pushed 2y agoCompare

[ Source](https://github.com/cfreec/hyperf-ext-mail)[ Packagist](https://packagist.org/packages/mycg-hyperf-ext/mail)[ RSS](/packages/mycg-hyperf-ext-mail/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Hyperf 邮件组件
===========

[](#hyperf-邮件组件)

- [简介](#introduction)
    - [安装](#installation)
    - [驱动前提](#driver-prerequisites)
- [创建通知](#generating-mailables)
- [编写通知](#writing-mailables)
    - [配置发送者](#configuring-the-sender)
    - [配置内容](#configuring-the-body)
    - [附件](#attachments)
    - [内部附件](#inline-attachments)
    - [自定义 SwiftMail 消息](#customizing-the-swiftmailer-message)
- [发送邮件](#sending-mail)
    - [队列邮件](#queueing-mail)
- [渲染通知](#rendering-mailables)
    - [在浏览器中预览邮件通知](#previewing-mailables-in-the-browser)
- [本地化通知](#localizing-mailables)
- [邮件与本地开发](#mail-and-local-development)
- [事件](#events)
- hyperf 3.1高版本

简介
--

[](#简介)

该组件衍生自 [illuminate/mail](https://github.com/illuminate/mail)，基于 [SwiftMailer](https://swiftmailer.symfony.com/) 函数库提供了一套干净、简洁的 API ，可以为 SMTP、Mailgun、Postmark、AWS SES、阿里云 DM 和 `sendmail` 提供驱动，让你可以快速从本地或云端服务自由地发送邮件。

### 安装

[](#安装)

```
composer require mycg-hyperf-ext/mail
```

#### 发布配置

[](#发布配置)

```
php bin/hyperf.php vendor:publish mycg-hyperf-ext/mail
```

发布的配置文件中配置的每个邮件程序都可能有自己的「传输方式」和配置选项，这将允许你的应用程序使用不同的邮件服务来发送特定的邮件。例如，你的应用程序可能使用 Postmark 发送事务性邮件，而使用 AWS SES 发送批量邮件。

### 驱动前提

[](#驱动前提)

基于 API 的驱动，比如 Mailgun 和 Postmark 通常比 SMTP 服务器更简单快速。如果可以的话，你应该尽可能使用这些驱动。所有的 API 驱动都需要 [Hyperf Guzzle](https://hyperf.wiki/2.0/#/zh-cn/guzzle) 组件，这个函数库可以通过 Composer 包管理安装：

```
composer require hyperf/guzzle
```

#### Mailgun 驱动

[](#mailgun-驱动)

要使用 Mailgun 驱动，首先必须安装 Hyperf Guzzle 组件, 之后将 `config/autoload/mail.php` 配置文件中的 `default` 选项设置为 `mailgun`。接下来，确认配置文件包含以下选项：

```
[
    // ...
    'mailgun' => [
        'transport' => \HyperfExt\Mail\Transport\MailgunTransport::class,
        'options' => [
            'domain' => env('MAIL_MAILGUN_DOMAIN'),
            'key' => env('MAIL_MAILGUN_KEY'),
            // 如果你不使用此「US」区域, 你可以定义自己的区域终端地址：
            // https://documentation.mailgun.com/en/latest/api-intro.html#mailgun-regions
            'endpoint' => env('MAIL_MAILGUN_ENDPOINT', 'api.mailgun.net'),
        ],
    ],
    // ...
];
```

#### Postmark 驱动

[](#postmark-驱动)

要使用 Postmark 驱动， 需要先通过 Composer 安装 Postmark 的 SwiftMailer 函数库：

```
composer require wildbit/swiftmailer-postmark
```

然后，安装 Hyperf Guzzle 并设置 `config/autoload/mail.php` 配置文件中的 `default` 选项。最后, 确认你的配置文件包含以下选项:

```
[
    // ...
    'postmark' => [
        'transport' => \HyperfExt\Mail\Transport\PostmarkTransport::class,
        'options' => [
            'token' => env('MAIL_POSTMARK_TOKEN'),
        ],
    ],
    // ...
];
```

#### AWS SES 驱动

[](#aws-ses-驱动)

要使用 AWS SES 驱动，你必须先安装 Amazon AWS SDK。你可以在 `composer.json` 文件的 `require` 段落加入下面这一行并运行 `composer update` 命令：

```
"aws/aws-sdk-php": "~3.0"

```

然后，将 `config/autoload/mail.php` 配置文件的 `default` 选项设置成 `aws_ses` 并确认你的配置文件包含以下选项：

```
[
    // ...
    'aws_ses' => [
        'transport' => \HyperfExt\Mail\Transport\AwsSesTransport::class,
        'options' => [
            'credentials' => [
                'key' => env('MAIL_AWS_SES_ACCESS_KEY_ID'),
                'secret' => env('MAIL_AWS_SES_SECRET_ACCESS_KEY'),
            ],
            'region' => env('MAIL_AWS_SES_REGION'),
        ],
    ],
    // ...
];
```

如果你在执行 AWS SES `SendRawEmail` 请求的时候需要包含[附加选项](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#sendrawemail)， 你可以在 `aws_ses` 配置中定义一个 `options` 数组：

```
[
    // ...
    'aws_ses' => [
        'transport' => \HyperfExt\Mail\Transport\AwsSesTransport::class,
        'options' => [
            'credentials' => [
                'key' => env('MAIL_AWS_SES_ACCESS_KEY_ID'),
                'secret' => env('MAIL_AWS_SES_SECRET_ACCESS_KEY'),
            ],
            'region' => env('MAIL_AWS_SES_REGION'),
            // 附加选项
            'options' => [
                'ConfigurationSetName' => 'MyConfigurationSet',
                'Tags' => [
                    [
                        'Name' => 'foo',
                        'Value' => 'bar',
                    ],
                ],
            ],
        ],
    ],
    // ...
];
```

#### 阿里云 DM 驱动

[](#阿里云-dm-驱动)

要使用阿里云 DM 驱动，你必须先安装 `alibabacloud/dm`。你可以在 `composer.json` 文件的 `require` 段落加入下面这一行并运行 `composer update` 命令：

```
"alibabacloud/dm": "^1.8"

```

然后，将 `config/autoload/mail.php` 配置文件的 `default` 选项设置成 `aliyun_dm` 并确认你的配置文件包含以下选项：

```
[
    // ...
    'aliyun_dm' => [
        'transport' => \HyperfExt\Mail\Transport\AliyunDmTransport::class,
        'options' => [
            'access_key_id' => env('MAIL_ALIYUN_DM_ACCESS_KEY_ID'),
            'access_secret' => env('MAIL_ALIYUN_DM_ACCESS_SECRET'),
            'region_id' => env('MAIL_ALIYUN_DM_REGION_ID'),
            'click_trace' => env('MAIL_ALIYUN_DM_CLICK_TRACE', '0'),
        ],
    ],
    // ...
];
```

> 注意，阿里云 DM 驱动仅支持事务类邮件，不支持批量邮件。

生成 Mailable 可邮寄类
----------------

[](#生成-mailable-可邮寄类)

应用发送的每种邮件都被表示为 `Mailable` 类。这些类存储于 `app/Mail` 目录中。如果您的应用中没有该目录，别慌，当您使用 `gen:mail` 命令生成您的首个 `Mailable` 类时，应用将会自动创建它：

```
php bin/hyperf.php gen:mail OrderShipped
```

编写 Mailable 可邮寄类
----------------

[](#编写-mailable-可邮寄类)

所有的 `Mailable` 类的配置都在 `build` 方法中完成。您可以通过调用诸如 `from`、`subject`、`view` 和 `attach` 这样的各种各样的方法来配置邮件的内容及其发送。

### 配置发件人

[](#配置发件人)

#### 使用 `from` 方法

[](#使用-from-方法)

首先，让我们浏览一下邮件的发件人的配置。或者，换句话说，邮件来自谁。有两种方法配置发件人。第一种，您可以在您的 `Mailable` 类的 `build` 方法中使用 `from` 方法：

```
/**
 * 编译消息。
 */
public function build(): void
{
    $this->from('example@example.com');
}
```

#### 使用全局的 `from` 地址

[](#使用全局的-from-地址)

当然，如果您的应用在任何邮件中使用的「发件人」地址都一致的话，在您生成的每一个 `Mailable` 类中调用 `from` 方法可能会很麻烦。因此，您可以在您的 `config/autoload/mail.php` 文件中指定一个全局的「发件人」地址。当某个 `Mailable` 类没有指定「发件人」时，它将使用该全局「发件人」：

```
'from' => ['address' => 'example@example.com', 'name' => 'App Name'],

```

此外，您亦可在您的 `config/autoload/mail.php` 配置文件中定义一个全局的「回复」地址：

```
'reply_to' => ['address' => 'example@example.com', 'name' => 'App Name'],

```

### 配置内容

[](#配置内容)

#### 使用视图

[](#使用视图)

得益于 [`hyperf/view`](https://hyperf.wiki/2.0/#/zh-cn/view) 组件的灵活性，您可以在多个受支持的模板引擎中选择适合您的引擎，在您构建您的邮件内容时即可使用模板引擎提供的所有功能及享受其带来的便利性。本组件已经自动依赖了 `hyperf/view` 组件，您需要根据 `hyperf/view` [文档](https://hyperf.wiki/2.0/#/zh-cn/view)的指引安装所需引擎、发布配置文件并完成设置。

> 本文档以 Blade 模板引擎为例。

您可以在 `Mailable` 类的 `build` 方法中使用 `htmlView` 和 `textView` 方法来指定在渲染邮件内容时要使用的模板。

```
/**
 * 构建邮件消息。
 *
 * @return $this
 */
public function build()
{
    return $this
        // HTML 模板
        ->htmlView('emails.orders.shipped')
        // 纯文本模板
        ->textView('emails.orders.shipped_plain');
}
```

> 您既可定义 HTML 消息也可定义纯文本消息，或者两者同时定义。

#### 视图数据

[](#视图数据)

##### 通过 Public 属性

[](#通过-public-属性)

通常情况下，您可能想要在渲染邮件的内容时传递一些数据到视图中。有两种方法传递数据到时视图中。第一种，您在 `Mailable` 类中定义的所有 `public` 的属性都将自动传递到视图中。因此，举个例子，您可以将数据传递到您的 `Mailable` 类的构造函数中，并将其设置为类的 `public` 属性：

```
