## Tp Mailer
**一款支持所有PHP框架的优美的邮件发送类**,ThinkPHP系列框架开箱即用,其他框架初始化配置即可使用
基于 SwiftMailer 二次开发, 为 ThinkPHP系列框架量身定制, 使 ThinkPHP 支持邮件模板、纯文本、附件邮件发送以及更多邮件功能, 邮件发送简单到只需一行代码
同时了方便其他框架或者非框架使用, Tp Mailer也非常容易拓展融合到其他框架中, 欢迎大家 `Fork` 和 `Star`, 提交代码让Tp Mailer支持更多框架
## 目录
* [优雅的发送邮件](#优雅的发送邮件)
* [安装](#安装)
* [使用 Composer 安装 (强烈推荐)](#使用-composer-安装-强烈推荐)
* [github下载 或 直接手动下载源码](#github下载-或-直接手动下载源码)
* [下载文件](#下载文件)
* [移动文件夹](#移动文件夹)
* [引入自动载入文件](#引入自动载入文件)
* [配置](#配置)
* [部分配置详解](#部分配置详解)
* [使用](#使用)
* [使用Tp Mailer](#使用tp-mailer)
* [创建实例](#创建实例)
* [设置收件人](#设置收件人)
* [设置发件人](#设置发件人)
* [设置邮件主题](#设置邮件主题)
* [设置邮件内容 - HTML](#设置邮件内容---html)
* [设置邮件内容 - 纯文本](#设置邮件内容---纯文本)
* [设置邮件内容 - 模板](#设置邮件内容---模板)
* [将图片作为元数据嵌入到邮件中](#将图片作为元数据嵌入到邮件中)
* [配置嵌入标签](#配置嵌入标签)
* [模板或HTML中设置变量](#模板或html中设置变量)
* [传递变量参数和值](#传递变量参数和值)
* [示例](#示例)
* [添加附件](#添加附件)
* [设置消息加密/签名](#设置消息加密签名)
* [设置字符编码](#设置字符编码)
* [设置邮件最大长度](#设置邮件最大长度)
* [设置邮件优先级](#设置邮件优先级)
* [Requesting a Read Receipt](#requesting-a-read-receipt)
* [注册插件](#注册插件)
* [发送邮件](#发送邮件)
* [动态配置](#动态配置)
* [方法注入](#方法注入)
* [其他框架扩展](#其他框架扩展)
* [第一步: 初始化配置项](#第一步-初始化配置项)
* [第二步: 实现 `$mailer->view()` 方法](#第二步-实现-mailer-view-方法)
* [完整示例](#完整示例)
* [中文文件名乱码问题](#中文文件名乱码问题)
* [Issues](#issues)
* [License](#license)
## 优雅的发送邮件
**ThinkPHP5 示例**
```
use mailer\tp5\Mailer;
$mailer = Mailer::instance();
$mailer->from('tianpian0805@gmail.com', 'yuan1994')
->to('your-mail@domain.com')
->subject('纯文本测试')
->text('欢迎您使用Tp Mailer')
->send();
```
你也可以这样: **ThinkPHP3.2.3 示例**
```
require_once '/path/to/tp-mailer/src/autoload.php';
use mailer\tp32\Mailer;
$mailer = Mailer::instance();
$mailer->from('tianpian0805@gmail.com', 'yuan1994')
->to('your-mail@domain.com')
->subject('多行文本测试')
->line('PHPer们: ')
->line('欢迎你们使用Tp Mailer, 如果使用感觉很方面请给个Star, 也欢迎大家Fork帮忙完善')
->line()
->line('yuan1994 <tianpian0805@gmail.com ' . date('Y-m-d'))
->attach('/path/to/文件名.pdf', '自定义文件名.pdf')
->send();
```
你还可以这样: **ThinkPHP3.1.3 示例**
```
require_once '/path/to/tp-mailer/src/autoload.php';
use mailer\tp31\Mailer;
$mailer = Mailer::instance();
$mailer->send(function($mailer, $message) {
$mailer->to('tianpian0805@gmail.com')
->subject('使用框架模板引擎渲染模板测试')
->view('mail:test', array(
'param1' => '参数1',
'param2' => '参数2',
'param3' => '参数3'
));
});
```
## 安装
### 使用 Composer 安装 (强烈推荐):
支持 `psr-4` 规范, 开箱即用
```
composer require yuan1994/tp-mailer
```
### github下载 或 直接手动下载源码:
需手动引入自动载入文件
#### 下载文件:
git clone https://github.com/yuan1994/tp-mailer tp-mailer
git clone https://github.com/swiftmailer/swiftmailer swiftmailer
或者点击直接下载:
[https://github.com/yuan1994/tp-mailer/archive/master.zip](https://github.com/yuan1994/tp-mailer/archive/master.zip)
[https://github.com/swiftmailer/swiftmailer/archive/5.x.zip](https://github.com/swiftmailer/swiftmailer/archive/5.x.zip)
#### 移动文件夹:
然后将两个项目分别手动命名为 `tp-mailer` 和 `swiftmailer`, 放在自己项目的扩展类库文件夹里, 这两个文件夹必须在同一目录, 目录结构大概如下所示:
```
扩展目录
├── tp-mailer
│ └── src
├── swiftmailer
│ ├── lib
│ ├── doc
│ └── tests
```
#### 引入自动载入文件:
使用时引入或者全局自动引入
`require_once '/path/to/tp-mailer/src/autoload.php`;
## 配置
在配置文件里配置如下信息, 可以配置在 `mail.php` 或 `config.php` 文件中, 但要保证能通过 `mail.driver`, `mail.host` 访问到配置信息, 内容如下:
```
return [
'driver' => 'smtp', // 邮件驱动, 支持 smtp|sendmail|mail 三种驱动
'host' => 'smtp.qq.com', // SMTP服务器地址
'port' => 465, // SMTP服务器端口号,一般为25
'addr' => '', // 发件邮箱地址
'pass' => '', // 发件邮箱密码
'name' => '', // 发件邮箱名称
'content_type' => 'text/html', // 默认文本内容 text/html|text/plain
'charset' => 'utf-8', // 默认字符集
'security' => 'ssl', // 加密方式 null|ssl|tls, QQ邮箱必须使用ssl
'sendmail' => '/usr/sbin/sendmail -bs', // 不适用 sendmail 驱动不需要配置
'debug' => true, // 开启debug模式会直接抛出异常, 记录邮件发送日志
'left_delimiter' => '{', // 模板变量替换左定界符, 可选, 默认为 {
'right_delimiter' => '}', // 模板变量替换右定界符, 可选, 默认为 }
'log_driver' => '', // 日志驱动类, 可选, 如果启用必须实现静态 public static function write($content, $level = 'debug') 方法
'log_path' => '', // 日志路径, 可选, 不配置日志驱动时启用默认日志驱动, 默认路径是 /path/to/tp-mailer/log, 要保证该目录有可写权限, 最好配置自己的日志路径
'embed' => 'embed:', // 邮件中嵌入图片元数据标记
];
```
### 部分配置详解
#### driver
可选值可以是字符串、数组、对象。如果是字符串,只能是 `smtp|sendmail|mail`,即内置的三种邮件驱动;如果是数组,必须是可以实例调用的方法,例如 `['mailer\\lib\\Transport', 'createSmtpDriver']` ,即是调用的 `(new mailer\lib\Transport)->createSmtpDriver()` 方法,如果是对象,就是返回的一个 `Swift_Transport` 对象,详情请查看 SwiftMailer 官网
#### log_left_delimiter & right_delimiter
该值为内置模板变量 (调用`text()`,`raw()`,`line()`,`html()`方式时传递的变量) 定界值,例如默认定界值时 `{name}`, 如果变量为 `['name' => 'tp-mailer']`,那么 `{name}` 会被替换为 `tp-mailer`,加入模板中变量占位符是 `{$name}`,那么此时可以修改左定界符为 `{$`,此时 `{$name}` 也能被正常替换为 `tp-mailer`
#### log_driver
日志驱动,如果不配置则为类库自带简单的日志驱动 `mailer\lib\log\File`,可自定义配置为框架的日志驱动,例如 `'log_driver' => '\\think\\Log'`,日志驱动类必须实现静态方法 `write`,例如:
```
public static function write($content, $level = 'debug')
{
echo '日志内容:' . $content;
echo '日志级别:' . $level;
}
```
#### log_path
日志驱动为默认是日�
- 1
- 2
- 3
前往页