PHPackages                             yzh52521/think-mailer - 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. yzh52521/think-mailer

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

yzh52521/think-mailer
=====================

A powerful and beautiful php mailer for All of ThinkPHP and Other PHP Frameworks based Symfony mailer

v3.0.6(2y ago)62932Apache-2.0PHPPHP &gt;=8.0.2

Since Oct 30Pushed 2y ago1 watchersCompare

[ Source](https://github.com/yzh52521/think-mailer)[ Packagist](https://packagist.org/packages/yzh52521/think-mailer)[ RSS](/packages/yzh52521-think-mailer/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (3)Versions (26)Used By (2)

ThinkPHP6+ 邮件发送扩展
=================

[](#thinkphp6-邮件发送扩展)

支持 `smtp` `sendmail` `Mailgun` 、`Postmark` 、 `Amazon SES` `log` 等驱动，其中`log`驱动会把邮件内容写入日志，供调试用

安装
--

[](#安装)

```
composer require yzh52521/think-mailer

```

Mailgun 驱动
----------

[](#mailgun-驱动)

要使用 Mailgun 驱动，可以先通过 composer 来安装 Mailgun 函数库 ：

```
composer require symfony/mailgun-mailer symfony/http-client

```

接着，在应用的 config/mail.php 配置文件中，将默认项设置成 mailgun 配置文件中包含以下选项：

```
'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
    'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
    'scheme' => 'https',
],

```

如果不使用 US Mailgun region 区域终端 配置区域终端:

```
'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
    'endpoint' => env('MAILGUN_ENDPOINT', 'api.eu.mailgun.net'),
],
```

Postmark 驱动
-----------

[](#postmark-驱动)

要使用 Postmark 驱动，先通过 composer 来安装 Postmark 函数库：

```
composer require symfony/postmark-mailer symfony/http-client

```

接着，在应用的 config/mail.php 配置文件中，将默认项设置成 postmark。 config/mail.php 配置文件中包含如下选项：

```
'postmark' => [
    'token' => env('POSTMARK_TOKEN'),
],

```

如果你要给指定邮件程序使用的 Postmark message stream，可以在配置数组中添加 message\_stream\_id 配置选项。这个配置数组在应用程序的 config/mail.php 配置文件中：

```
'postmark' => [
    'transport' => 'postmark',
    'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
],

```

这样，你还可以使用不同的 message stream 来设置多个 Postmark 邮件驱动

SES 驱动
------

[](#ses-驱动)

要使用 Amazon SES 驱动，你必须先安装 PHP 的 Amazon AWS SDK 。你可以可以通过 Composer 软件包管理器安装此库:

```
composer require aws/aws-sdk-php

```

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

```
'ses' => [
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],

```

为了通过 session token 来使用 AWS temporary credentials ，你需要向应用的 SES 配置中添加一个 token 键：

```
'ses' => [
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    'token' => env('AWS_SESSION_TOKEN'),
],

```

发送邮件，如果你想传递一些 额外的选项 给 AWS SDK 的 SendEmail 方法，你可以在 ses 配置中定义一个 options 数组：

```
'ses' => [
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    'options' => [
        'ConfigurationSetName' => 'MyConfigurationSet',
        'EmailTags' => [
            ['Name' => 'foo', 'Value' => 'bar'],
        ],
    ],
],

```

生成 Mailables#
-------------

[](#生成-mailables)

在构建 Thinkphp 应用程序时，应用程序发送的每种类型的电子邮件都表示为一个 mailable 类。 这些类存储在 app/mail 目录中。 如果您在应用程序中看不到此目录，请不要担心，因为它会在您使用 make:mail think 命令创建第一个可邮寄类时为您生成：

```
php think make:mail OrderShipped

```

编写 Mailables#
-------------

[](#编写-mailables)

一旦你生成了一个 mailable 的类，打开它，这样我们就可以探索它的内容了。 首先，请注意所有可邮寄类的配置都是在 build 方法中完成的。 在此方法中，您可以调用各种方法，例如 from、subject、view 和 attach 来配置电子邮件的呈现和传递。

配置发件人#
------

[](#配置发件人)

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

```
/**
 * 构建消息
 *
 * @return $this
 */
public function build()
{
    return $this->from('example@example.com', 'Example')
                ->view('emails/orders/shipped');
}
```

使用全局 from 地址#
-------------

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

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

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

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

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

配置视图#
-----

[](#配置视图)

你可以在 mailable 类的 build 方法中使用 view 方法来指定在渲染邮件内容时要使用的模板。 由于每封邮件通常使用 think 模板 来渲染其内容，因此在构建邮件 HTML 内容时你可以使用 think 模板引擎提供的所有功能及享受其带来的便利性：

```
/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->view('emails/orders/shipped');
}
```

> 技巧：你可以创建一个 view/emails 目录来存放你的所有邮件模板；当然，你也可以将其置于 view 目录下的任何位置。

纯文本邮件#
------

[](#纯文本邮件)

你可以使用 text 方法来定义一个纯文本格式的邮件。和 view 方法一样， 该 text 方法接受一个模板名，模板名指定了在渲染邮件内容时你想使用的模板。你既可以定义纯文本格式亦可定义 HTML 格式：

```
/**
 * 构建消息.
 *
 * @return $this
 */
public function build()
{
    return $this->view('emails/orders/shipped')
                ->text('emails/orders/shipped_plain');
}
```

视图数据#
-----

[](#视图数据)

### 通过 Public 属性

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

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

```
