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

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

yzh52521/webman-mailer
======================

A powerful and beautiful php mailer in webman Framework PHP Frameworks based symfony mailer

v1.1.2(2y ago)43.9k↓16.7%[4 issues](https://github.com/yzh52521/webman-mailer/issues)1Apache-2.0PHPPHP ^7.2 || ^8.0

Since Mar 21Pushed 2y ago1 watchersCompare

[ Source](https://github.com/yzh52521/webman-mailer)[ Packagist](https://packagist.org/packages/yzh52521/webman-mailer)[ RSS](/packages/yzh52521-webman-mailer/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (3)Versions (21)Used By (1)

webman-mailer
=============

[](#webman-mailer)

基于 symfony mailer二次开发 支持邮件模板、纯文本、附件邮件发送以及更多邮件功能, 邮件发送简单到只需一行代码

安装
--

[](#安装)

```
composer require yzh52521/webman-mailer

```

配置
--

[](#配置)

配置文件 `config/plugin/yzh52521/mailer/app.php` 内容如下

```
return [
    'enable'   => true,
    'mailer'   =>[
        'scheme'   => 'smtp',// "smtps": using TLS, "smtp": without using TLS.
        'host'     => '', // 服务器地址
        'username' => '', //用户名
        'password' => '', // 密码
        'port'     => 25, // SMTP服务器端口号,一般为25
        'options'  => [], // See: https://symfony.com/doc/current/mailer.html#tls-peer-verification
    ],
    'from'   => [
        'address' => 'hello@example.com',
        'name'    => 'Example',
    ],
];

or

return [
    'enable'   => true,
    'mailer'   =>[
        'dsn'      => 'smtp://username:password@smtp.example.com:25', //默认优先使用该配置
    ],
    'from'   => [
        'address' => 'hello@example.com',
        'name'    => 'Example',
    ],
];

```

优雅的发送邮件
-------

[](#优雅的发送邮件)

```
use yzh52521\mailer\Mailer;

Mailer::setFrom('10086@qq.com')
      ->setTo('your-mail@domain.com')
      ->setSubject('纯文本测试')
      ->setTextBody('欢迎您使用webman-mailer')
      ->send();

```

### 创建实例

[](#创建实例)

不传递任何参数表示使用配置文件里默认的配置

```
$mailer = new Mailer();

```

### 设置发件人

[](#设置发件人)

发件人邮箱地址必须和配配置里的 username 一致

```
$mailer->setFrom('10086@qq.com');
$mailer->setFrom(['10086@qq.com'=>'发件人']);
or
$mailer->addFrom('10086@qq.com');
$mailer->addFrom(['10086@qq.com'=>'发件人']);

```

### 设置收件人

[](#设置收件人)

以下几种方式任选一种

```
$mailer->setTo('10086@qq.com');
$mailer->setTo(['tianpian0805@qq.com', '10086@qq.com']);
or
$mailer->addTo('10086@qq.com');
$mailer->addTo(['tianpian0805@qq.com', '10086@qq.com']);

```

### 设置抄送

[](#设置抄送)

以下几种方式任选一种

```
$mailer->setCc('10086@qq.com');
$mailer->setCc(['tianpian0805@qq.com', '10086@qq.com']);
or
$mailer->addCc('10086@qq.com');
$mailer->addCc(['tianpian0805@qq.com', '10086@qq.com']);

```

### 设置暗抄送

[](#设置暗抄送)

以下几种方式任选一种

```
$mailer->setBcc('10086@qq.com');
$mailer->setBcc(['tianpian0805@qq.com', '10086@qq.com']);
or
$mailer->addBcc('10086@qq.com');
$mailer->addBcc(['tianpian0805@qq.com', '10086@qq.com']);

```

### 设置回复邮件地址

[](#设置回复邮件地址)

```
$mailer->setReplyTo(['10086@qq.com']);
$mailer->setReplyTo('10086@qq.com');
or

$mailer->addReplyTo(['10086@qq.com']);
$mailer->addReplyTo('10086@qq.com');

```

### 设置邮件主题

[](#设置邮件主题)

```
$mailer->setSubject('邮件主题');

```

### 设置邮件内容 - 纯文本

[](#设置邮件内容---纯文本)

```
$mailer->setTextBody('欢迎使用webman-mailer');

或者使用变量替换纯文本内容

$mailer->setTextBody('欢迎使用{name}', ['name' => 'webman-mailer']);

```

### 设置邮件内容 - HTML

[](#设置邮件内容---html)

```
$mailer->setHtmlBody('欢迎使用webman-mailer');

或者使用变量替换HTML内容

$mailer->setHtmlBody('欢迎使用{name}', ['name' => 'webman-mailer']);

```

### 设置邮件内容 - 模板

[](#设置邮件内容---模板)

模板的使用, 具体请看webman视图怎么用, 第二个参数是要进行模板赋值的数组

以下介绍的是thinkphp模版使用

```
$mailer->view('mail/register');
$mailer->view('common@mail/register', ['account' => $account, 'name' => $name]);

```

### 将图片作为元数据嵌入到邮件中

[](#将图片作为元数据嵌入到邮件中)

邮件内容中包含图片的, 可以直接指定 `img` 标签的 `src` 属性为远程图片地址, 此处图片地址必须为远程图片地址, 必须为一个带域名的完整图片链接, 这似乎很麻烦, 所以你还可以将图片作为元数据嵌入到邮件中, 至于其他文件是否也可以嵌入请自己尝试

下面介绍一下 `webman-mailer` 如何快速简便的将图片元数据嵌入到邮件中:

#### 配置嵌入标签

[](#配置嵌入标签)

嵌入元数据需要在模板赋值或者使用 `setHtmlBody()` 传递变量时, 给变量添加特殊的标签, 该嵌入标签默认为 `cid:`, 你可以修改配置文件中 `embed` 项, 修改为你想要的形式

#### 模板或HTML中设置变量

[](#模板或html中设置变量)

在模板中, 例如 ThinkPHP框架 都是使用 `{$var}` 的形式传递变量, 假设变量为 `image_src`, 那么模板中填写 `{$image_src}`, 如果是在HTML中, 请使用 `{image_src}`, 注意如果修改过左、右定界符请使用自己定义的左右定界符

#### 传递变量参数和值

[](#传递变量参数和值)

在 `setHtmlBody()` 和 `view()` 方法的第二个参数里, 该数组必须有一个变量, 格式为 `['cid:image_src'] => '/path/to/image.jpg']`或者 `['cid:image_src'] => ['file_stream', 'filename','filemime']]`, 即参数数组的键名是上面配置的 `嵌入标签 + 变量名`, 但值有两种情况:

第一, 如果值为字符串, 则该值为图片的路径 (绝对路径或相对路径) 或者 有效的url地址 第二, 如果值为数组, 数组为 `['stream','name','mime']` 的形式, 其中 `stream` 表示图片的数据流, 即是未保存的文件数据流, 例如 `fopen()` 方法获取的文件数据流, 第二个参数为文件名, 默认为 `image`,第三个参数可选, 为文件的mime类型, 默认为 null

#### 示例

[](#示例)

```
$mailer->setForm('10086@qq.com')
       ->setTo('10086@qq.com')
       ->setSubject('测试邮件模板中嵌入图片元数据')
       ->view('mail/index', [
        'date' => date('Y-m-d H:i:s'),
        'cid:image' => '/path/to/images/image.jpg',
        // 'cid:image' => '/path/to/images/image.jpg',
        // 'cid:image' => [fopen('/path/to/images/image.jpg','r')],
        // 'cid:image' => [fopen('/path/to/images/image.jpg','r'), 'image','image/jpg'],
     ])
    ->send();

```

其中模板的内容如下:

```

    测试邮件

尊敬的yzh52521:
     这是一封模板测试邮件
{$date}

```

在 HTML 中使用一样:

```
$mailer
    ->setForm('10086@qq.com')
    ->setTo('10086@qq.com')
    ->setSubject('测试邮件模板中嵌入图片元数据')
    ->setHtmlBody('图片测试', [
        'cid:image' => '/path/to/images/image.jpg',
        // 'cid:image' => '/path/to/images/image.jpg',
        // 'cid:image' => [fopen('/path/to/images/image.jpg','r')],
        // 'cid:image' => [fopen('/path/to/images/image.jpg','r'), 'image','image/jpg')],
     ])
    ->send();

```

### 添加附件

[](#添加附件)

```
$mailer->attach('/path/to/images/file.jpg');

$mailer->attachContent(fopen('/path/to/documents/contract.doc', 'r'))

```

或者指定附件的文件名

```
$mailer->attach('/path/to/images/foo.jpg', ['fileName'=>文件名.jpg','contentType'=>'image/jpeg']);

$mailer->attachContent(fopen('/path/to/documents/contract.doc', 'r'), ['fileName'=>文件名.doc','contentType'=>'application/msword'])

```

### 设置消息加密/签名

[](#设置消息加密签名)

```
消息加密
$encrypter=new SMimeEncrypter('/path/to/certificate.crt');
$mailer->encrypter=$encryptor;  @see https://symfony.com/doc/current/mailer.html#encrypting-messages

签名

$signer = new DkimSigner('file:///path/to/private-key.key', 'example.com', 'sf');
or
$signer = new SMimeSigner('/path/to/certificate.crt', '/path/to/certificate-private-key.key');

$mailer->signer =$signer; @see https://symfony.com/doc/current/mailer.html#signing-messages

```

### 设置字符编码

[](#设置字符编码)

```
$mailer->setCharset('utf8');

```

### 设置邮件优先级

[](#设置邮件优先级)

```
$mailer->setPriority(1);
// 可选值有:
// 1 Highest
// 2 High
// 3 Normal
// 4 Low
// 5 Lowest

```

### 发送邮件

[](#发送邮件)

```
$mailer->send();

```

使用匿名函数 $message是 \\Symfony\\Component\\Mime\\Email 对象

```
$mailer->send(function ($mailer,$message) {
    $mailer->setFrom('10086@qq.com')
           ->setTo('10086@qq.com')
           ->setSubject('测试邮件')
           ->setTextBody('测试内容');
});

```

第二个参数是数组, 可以重新邮件配置

```
$mailer->send(
    function ($message) {
         $mailer->setFrom(''10086@qq.com')
           ->setTo('10086@qq.com')
           ->setSubject('测试邮件')
           ->setTextBody('测试内容');
            },
            [
                'scheme'=>'',
                'host'     => '', // 服务器地址
                'username' => '', //用户名
                'password' => '', // 密码
                'port'     => 465, // SMTP服务器端口号,一般为25
            ]
            );

```

邮件发送失败会直接以异常抛出, 或者可以通过 `getError()` 获取错误信息

```
$mailer->getError();

```

使用 `getHeaders()` 和 `getHeadersString()` 方法可以获取头信息 `getHeaders()` 返回的是头信息数组, `getHeadersString()` 返回的是头信息字符串

Issues
------

[](#issues)

如果有遇到问题请提交 [issues](https://github.com/yzh52521/webman-mailer/issues)

License
-------

[](#license)

Apache 2.0

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity25

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~23 days

Recently: every ~42 days

Total

20

Last Release

1068d ago

PHP version history (3 changes)v1.0.0PHP &gt;=8.0.2

v1.0.7PHP &gt;=7.2

v1.1.2PHP ^7.2 || ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/052aa4acd90ad5d672ae5abe8d27d1f576f9c07e1967e2f6bced03b84079310f?d=identicon)[yuanzhihai](/maintainers/yuanzhihai)

---

Top Contributors

[![yuanzhihai](https://avatars.githubusercontent.com/u/15060466?v=4)](https://github.com/yuanzhihai "yuanzhihai (50 commits)")

---

Tags

symfonymailmailerwebmanwebman-mailer

### Embed Badge

![Health badge](/badges/yzh52521-webman-mailer/health.svg)

```
[![Health](https://phpackages.com/badges/yzh52521-webman-mailer/health.svg)](https://phpackages.com/packages/yzh52521-webman-mailer)
```

###  Alternatives

[dotkernel/dot-mail

Dotkernel mail component based on symfony mailer

1140.0k5](/packages/dotkernel-dot-mail)[yzh52521/think-mail

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

745.0k](/packages/yzh52521-think-mail)[hafael/azure-mailer-driver

Supercharge your Laravel or Symfony app with Microsoft Azure Communication Services (ACS)! Effortlessly add email, chat, voice, video, and telephony-over-IP for next-level communication. 🚀

14109.2k](/packages/hafael-azure-mailer-driver)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
