Download the PHP package cyzonetech/tp-mailer without Composer
On this page you can find all versions of the php package cyzonetech/tp-mailer. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download cyzonetech/tp-mailer
More information about cyzonetech/tp-mailer
Files in cyzonetech/tp-mailer
Package tp-mailer
Short Description A powerful and beautiful php mailer for All of ThinkPHP and Other PHP Frameworks based SwiftMailer
License Apache 2.0
Homepage https://github.com/yuan1994/tp-mailer/
Informations about the package tp-mailer
Tp Mailer
一款支持所有PHP框架的优美的邮件发送类,ThinkPHP系列框架开箱即用,其他框架初始化配置即可使用
基于 SwiftMailer 二次开发, 为 ThinkPHP系列框架量身定制, 使 ThinkPHP 支持邮件模板、纯文本、附件邮件发送以及更多邮件功能, 邮件发送简单到只需一行代码
同时了方便其他框架或者非框架使用, Tp Mailer也非常容易拓展融合到其他框架中, 欢迎大家 Fork
和 Star
, 提交代码让Tp Mailer支持更多框架
目录
- 优雅的发送邮件
- 安装
- 使用 Composer 安装 (强烈推荐)
- github下载 或 直接手动下载源码
- 下载文件
- 移动文件夹
- 引入自动载入文件
- 配置
- 部分配置详解
- 使用
- 使用Tp Mailer
- 创建实例
- 设置收件人
- 设置发件人
- 设置邮件主题
- 设置邮件内容 - HTML
- 设置邮件内容 - 纯文本
- 设置邮件内容 - 模板
- 将图片作为元数据嵌入到邮件中
- 配置嵌入标签
- 模板或HTML中设置变量
- 传递变量参数和值
- 示例
- 添加附件
- 设置消息加密/签名
- 设置字符编码
- 设置邮件最大长度
- 设置邮件优先级
- Requesting a Read Receipt
- 注册插件
- 发送邮件
- 动态配置
- 方法注入
- 其他框架扩展
- 第一步: 初始化配置项
- 第二步: 实现
$mailer->view()
方法 - 完整示例
- 中文文件名乱码问题
- Issues
- License
优雅的发送邮件
ThinkPHP5 示例
你也可以这样: ThinkPHP3.2.3 示例
你还可以这样: ThinkPHP3.1.3 示例
安装
使用 Composer 安装 (强烈推荐):
支持 psr-4
规范, 开箱即用
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/swiftmailer/swiftmailer/archive/5.x.zip
移动文件夹:
然后将两个项目分别手动命名为 tp-mailer
和 swiftmailer
, 放在自己项目的扩展类库文件夹里, 这两个文件夹必须在同一目录, 目录结构大概如下所示:
引入自动载入文件:
使用时引入或者全局自动引入
require_once '/path/to/tp-mailer/src/autoload.php
;
配置
在配置文件里配置如下信息, 可以配置在 mail.php
或 config.php
文件中, 但要保证能通过 mail.driver
, mail.host
访问到配置信息, 内容如下:
部分配置详解
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
,例如:
log_path
日志驱动为默认是日志存储路径,不配置默认为 tp-mailer/log/
,例如可配置为 ROOT_PATH . 'runtime/log/'
embed
图片内联嵌入标识,请参考 将图片作为元数据嵌入到邮件中
使用
以下使用及方法兼容所有框架, 包括 ThinkPHP5, ThinkPHP3.2, ThinkPHP3.1, 唯一有所区别的是 ThinkPHP3.2 和 ThinkPHP3.1 不支持composer自动载入, 需手动引入自动载入文件, 使用时引入或者全局自动引入:
require_once '/path/to/tp-mailer/src/autoload.php';
使用use时, ThinkPHP5 的Mailer类的命名空间是
mailer/tp5/Mailer
, ThinkPHP3.2 的命名空间是mailer/tp32/Mailer
, ThinkPHP3.1 的命名空间是mailer/tp31/Mailer
以下示例以 ThinkPHP5 里使用为例, 其他框架完全一样
使用Tp Mailer
创建实例
不传递任何参数表示邮件驱动使用配置文件里默认的配置
如果你想实例化时不使用配置文件里的默认配置, 你可以这样:
匿名必须返回一个 \Swift_SmtpTransport
或 \Swift_SendmailTransport
或 \Swift_MailTransport
, 详细配置请参考 SwiftMailer Transport Types
你也可以直接手动传入一个现有的邮件驱动, 配置使用默认配置, 像这样:
设置收件人
以下几种方式任选一种
设置发件人
发件人邮箱地址必须和配置项里一致, 默认会自动设置发件地址 (配置里的addr) 和发件人 (配置里的name)
设置邮件主题
设置邮件内容 - HTML
或者使用变量替换HTML内容
设置邮件内容 - 纯文本
还有另外一个用法完全相同的同名方法
或者使用变量替换纯文本内容
你也可以很方便的设置多行文本, 直接回车换行或者使用 line()
方法, 支持多次调用
line()
也支持使用变量替换纯文本内容
设置邮件内容 - 模板
ThinkPHP系列模板, 具体请看ThinkPHP各版本框架的模板怎么用, 第二个参数是要进行模板赋值的数组
将图片作为元数据嵌入到邮件中
邮件内容中包含图片的, 可以直接指定 img
标签的 src
属性为远程图片地址, 此处图片地址必须为远程图片地址, 必须为一个带域名的完整图片链接, 这似乎很麻烦, 所以你还可以将图片作为元数据嵌入到邮件中, 至于其他文件是否也可以嵌入请自己尝试, 详情请参考 SwiftMailer Embedding Inline Media Files
下面介绍一下 tp-mailer
如何快速简便的将图片元数据嵌入到邮件中:
配置嵌入标签
嵌入元数据需要在模板赋值或者使用 html()
传递变量时, 给变量添加特殊的标签, 该嵌入标签默认为 embed:
, 你可以修改配置文件中 embed
项, 修改为你想要的形式
模板或HTML中设置变量
在模板中, 例如 ThinkPHP 全系列都是使用 {$var}
的形式传递变量, 假设变量为 image_src
, 那么模板中填写 {$image_src}
, 如果是在HTML中, 请使用 {image_src}
, 注意如果修改过左、右定界符请使用自己定义的左右定界符
传递变量参数和值
在 html()
和 view()
方法的第二个参数里, 该数组必须有一个变量, 格式为 ['embed:image_src'] => '/path/to/image.jpg']
或者 ['embed:image_src'] => ['file_stream', 'filemime', 'filename']]
, 即参数数组的键名是上面配置的 嵌入标签 + 变量名
, 但值有两种情况:
第一, 如果值为字符串, 则该值为图片的路径 (绝对路径或相对路径) 或者 有效的url地址;
第二, 如果值为数组, 数组为 ['stream', 'mime', 'name']
的形式, 其中 stream
表示图片的数据流, 即是未保存的文件数据流, 例如 file_get_contents()
方法获取的文件数据流, 第二个参数可选, 为文件的mime类型, 默认为 image/jpeg
, 第三个参数为文件名, 默认为 image.jpg
示例
其中模板的内容如下:
在 HTML 中使用一样:
添加附件
已修复SwiftMailer设置中文文件名出现乱码的bug
或者指定附件的文件名
使用匿名函数 $attachment用法请参考 SwiftMailer Attaching Files
设置消息加密/签名
使用方法请参考 SwiftMailer Signed/Encrypted Message
设置字符编码
设置邮件最大长度
设置邮件优先级
MailerConfig
的完整命名空间为mailer/lib/MailerConfig
Requesting a Read Receipt
注册插件
插件的详细使用请参考 SwiftMailer Plugins
发送邮件
使用匿名函数, $mailer是 Mailer
对象, $message是 Swift_Message
对象
第二个参数也可以是匿名函数
或 字符串
或 null
, 用户指定发送邮件使用的驱动, 详细使用请参考本文档的 创建实例
如果你使用了插件, 你还可以使用第三个参数, 第三个参数只能是匿名函数:
第三个参数匿名函数里必须使用 $swiftMailer
调用 send()
方法发送邮件, 并且第一个参数必须为 $mailer->message
, 插件的详细使用请参考 SwiftMailer Plugins
除使用插件, send()
方法第三个参数为匿名函数的情况外, 发送邮件的返回值为发送成功用户的数字, 全部失败为0, 全部成功为设置收件人的数量
以上所有方法 (除最后发送的方法 send()
) 都支持连贯调用
如果执行过邮件发送过邮件发送之后, 需要重新初始化
开启 debug
模式后, 邮件发送失败会直接以异常抛出, 如果没有开启, 可以通过 getError()
获取错误信息
如果有邮件发送失败, 可以通过 getFails()
获取发送失败邮件地址的列表, 邮件发送时第三个参数使用哦匿名函数的情况除外, 这种情况获取到的值为空, 需调用 $swiftMailer->send()
时第二个参数手动指定 fails
使用 getHeaders()
和 getHeadersString()
方法可以获取头信息
getHeaders()
返回的是头信息数组, getHeadersString()
返回的是头信息字符串
更多文档请参考 SwiftMailer
动态配置
mailer/lib/Config
可以进行邮件动态配置,可以读取配置或者重新设置默认配置项,也可以用于其他非 ThinkPHP 框架进行配置项初始化
方法注入
mailer\lib\Mailer
默认不带 view()
方法,但要扩展该类,可以使用继承,也可以直接动态给该类注册方法,使用 Mailer::addMethod($methodName, $methodCallable)
进行方法注册,例如给 ThinkPHP5 框架注册 view()
方法:
你也可以根据需要注入其他方法
其他框架扩展
其他框架扩展只需两步, 部署安装使用和文档一样
第一步: 初始化配置项
使用 mailer\lib\Config
的 init()
方法初始化配置项,例如:
第二步: 实现 $mailer->view()
方法
写自己的类继承 mailer\lib\Mailer
或者 使用 Mailer::addMethod()
方法动态注入方法, 然后实现里面的 view
方法, 根据自己的框架渲染出自己的模板,如果不需要使用 view()
方法可以忽略这一步,直接进入下一步:
完整示例
OK, 此时你就能在你的框架中使用 Tp Mailer 了, 如果你还想做一件事 - Fork && Pull, 那就更好, 希望能一起完善 Tp Mailer
中文文件名乱码问题
经测试给邮件添加附件时如果附件时中文名会乱码, 如果添加附件时使用匿名闭包函数, 设置文件名时一定要使用 cnEncode()
方法对文件名进行处理, 否则收到的邮件中中文名会乱码, 其他的添加附件方法都在代码里默认调用了 cnEncode()
方法
Issues
如果有遇到问题请提交 issues
License
Apache 2.0