定制 voilab/mailer 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

voilab/mailer

最新稳定版本:2.1.1

Composer 安装命令:

composer require voilab/mailer

包简介

Small mailer tool.

README 文档

README

Transactional mailer

Basic usage

Create the main mailer transport object

use voilab\mailer\Transport;
use voilab\mailer\adapter;
use voilab\mailer\renderer;
$mailer = new Transport();
$mailer->setAdapterFn(function (Transport $mail, array $createParams) {
    return new adapter\SomeAdapter();
});

Stuff the mail with data...

$adapter = $mailer
    ->create(['customParam' => 1])
    ->setFrom('from@email.com')
    ->addTo('to@email.com')
    ->setSubject('A subject from James')
    ->setHtml('<p>Hello John</p>');

... or use global datas, templates and renderers to introduce variations

Please check below for more explanations about renderers and templates.

$mailer->setRenderer(new renderer\File('/path'));
$adapter = $mailer
    ->create()
    ->setFrom('from@email.com')
    ->addTo('to@email.com')
    ->setTemplate('some-file.php')
    ->setGlobalData([
        'me' => 'James',
        'you' => 'John'
    ]);
<!-- /path/some-file.php -->
<h1 data-renderer-subject>A subject from <?= $me; ?></h1>
<p>Hello <?= $you; ?></p>

Send the mail

try {
    $mailer->send($adapter);
    echo "mail is sent";
} catch (\Exception $e) {
    echo $e->getMessage();
}

Templates

When using templates, subjects, html or text are ignored. They are all inside the template. You need to set a template ID in the adapter:

$adapter->setTemplate('some-template-id');

Note that if you use network templates, like with Sparkpost or Sendgrid, you can mix inline html with variables. The above restriction applies only when you use renderers (with Twig, for example).

With templates and renderers, you set the content automatically right before the email is sent. You can set html or text content at anytime using these methods:

$adapter = $mailer
    ->setRenderer(new renderer\File('/path/files'))
    ->create();

$mailer
    ->setHtml($adapter, 'file_html.php')
    ->setText($adapter, 'file_text.php');

// then send the email

File

File renderer is a fast and simple loader for PHP files. The global datas you gave to your adapter are injected in the file (with extract) and you can use them with raw PHP, includes, etc.

There are no check of any kind with variables. Use this templating mode at your own risks.

$renderer = new renderer\File('/path/to/files');
$mailer->setRenderer($renderer);

$adapter = $mailer
    ->create()
    ->setTemplate('file.php');
<h1 data-renderer-subject>This is the mail subject  <?= $some_param; ?></h1>
<p>
    All the rest will be the mail body, with all html needed, and access to all
    params and functions from PHP.
</p>
<blockquote>
    The <strong>p</strong> tag is absolutely not required. You can start your
    message body (after the first h1) with anything you want, even an other h1
    or no html tag at all.
</blockquote>

Twig

Twig renderer is more advanced as file renderer. You don't load a classic PHP file, but a twig template. The global datas you gave to your adapter are used as params when rendering the twig template.

$twig = new \Twig_Environment();
// configure your environment as you want

$renderer = new renderer\Twig($twig);
$mailer->setRenderer($renderer);

$mailer->create()->setTemplate('some_file.twig');
<h1 data-renderer-subject>This is the mail subject {{ some_param }}</h1>
<p>
    All the rest will be the mail body, with all html needed, and access to all
    params and functions from your <em>twig</em> environment.
</p>
<blockquote>
    The <strong>p</strong> tag is absolutely not required. You can start your
    message body (after the first h1) with anything you want, even an other h1
    or no html tag at all.
</blockquote>

Note that you'll need to add this dependency into your own package.json:

  • "twig/twig": "1.*"

Adapters

Native mail function

To use native mail function, you can use the Zend2 or Zend3 adapter with the right transport mechanism, as shown below.

$zend = new \Zend\Mail\Transport\Sendmail();

$mailer = new Transport();
$mailer->setAdapterFn(function () use ($zend) {
    return new adapter\Zend2($zend);
});

Note that you'll need to add these dependencies into your own package.json:

  • "zendframework/zend-mail": "2.*"
  • "zendframework/zend-servicemanager": "3.*"

Zend Mail 3

// create the zend transport that fit your needs
$zend = new \Zend\Mail\Transport\Smtp(
    new \Zend\Mail\Transport\SmtpOptions([
        // smtp config
    ])
);

$mailer = new Transport();
$mailer->setAdapterFn(function () use ($zend) {
    return new adapter\Zend3($zend);
});

Note that you'll need to add these dependencies into your own package.json:

  • "zendframework/zend-mail": "2.*"
  • "zendframework/zend-servicemanager": "3.*"

Zend Mail 2

// create the zend transport that fit your needs
$zend = new \Zend\Mail\Transport\Smtp(
    new \Zend\Mail\Transport\SmtpOptions([
        // smtp config
    ])
);

$mailer = new Transport();
$mailer->setAdapterFn(function () use ($zend) {
    return new adapter\Zend2($zend);
});

Note that you'll need to add these dependencies into your own package.json:

  • "zendframework/zend-mail": "2.*"
  • "zendframework/zend-servicemanager": "3.*"

Sparkpost

$client = new \Http\Adapter\Guzzle6\Client(new \GuzzleHttp\Client());
$sparkpost = new SparkpostTransport($client, [
    'key' => 'api key'
]);

$mailer = new Transport();
$mailer->setAdapterFn(function () use ($sparkpost) {
    return new adapter\Sparkpost2($sparkpost);
});

Note that you'll need to add these dependencies into your own package.json:

  • "sparkpost/sparkpost": "2.*"
  • "php-http/guzzle6-adapter": "1.*"

SendGrid

$client = new \SendGrid('api key');

$mailer = new Transport();
$mailer->setAdapterFn(function () use ($client) {
    return new adapter\Sendgrid5($client);
});

Note that you'll need to add this dependency into your own package.json:

  • "sendgrid/sendgrid": "5.*"

Mandrill

$client = new \Mandrill('api key');

$mailer = new Transport();
$mailer->setAdapterFn(function () use ($client) {
    return new adapter\Mandrill($client);
});

Note that you'll need to add this dependency into your own package.json:

  • "mandrill/mandrill": "1.*"

Tests

First, copy tests/phpunit_default.xml to tests/phpunit.xml and fill in the right values. Then, in the vagrant ssh, simply do this:

cd /vagrant
./vendor/bin/phpunit -c tests/phpunit.xml

To let phpunit send mails, just set true in the corresponding constant in the phpunit.xml file.

统计信息

  • 总下载量: 42
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2015-03-27