官方文档地址:http://www.yiichina.com/doc/guide/2.0/tutorial-mailing。
昨晚在CSDN写了这篇博客,明明保存成功了,但是实际上却是搞丢了!这令我很郁闷,还是回到iteye这个虽然多年没更新过,但是可以传小附件,代码格式化也不错的博客。
做产品或项目时,我们很多时候需要给客户发邮件。比如密码重置、各种通知。
那么yii2.0自带的yii2-swiftmailer扩展当属我用过的最完美的扩展了。
不得不承认,虽然yii2.0在视图里穿插各种php代码令我崩溃,但它的设计模式的确令人咋舌,各类工具也是非常齐全。
官方文档能让我们看到这个扩展的基本用法,还是中文版的,所以我就不重复描述了。
我要说的是,在工作中,我们应该尽量抽象好这些接口,给项目或产品提供更通用、易懂、与底层无关的接口。比如这个发信的扩展,通过我们进行一层抽象,产品中调用我们适配好的接口,既可以不用关注“yii2-swiftmailer扩展”的使用方法,另外万一扩展不靠谱,我们还可以在接口中随时替换它,而不会影响到产品中的所有代码。
其实即使Yii的数据库操作,我们都可以扩展,没有做不到,只有我们想不到。
步骤一、在mail.php中(生产环境的配置,注意mail-local.php是测试环境才用到的配置)的componets数组中增加:
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false, //这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.163.com', //每种邮箱的host配置不一样
'username' => 'xxxx',
'password' => 'xxxx',
'port' => '25',
// 'encryption' => 'tls',
],
'messageConfig' => [
'charset' => 'UTF-8',
'from' => ['xxx@163.com' => '发件人姓名'],
],
],
步骤二、common中创建目录(就是windows中的文件夹)libs(这个名称是自定义的,也可以叫helper),libs中创建文件Email.php,其内容如下:
<?php
/**
* 利用Yii自带的swiftmailer发邮件,支持多人发送
* 可以利用模板发送,也可以发送纯文本或HTML,但只能3选1
* 优先级为纯文本>HTML>模板发送
*/
namespace common\libs;
class Email {
public static function sendEmail($option = []) {
$default = [
'text' => '',
'html' => '',
'tpl' => [
],
'subject' => '测试邮件',
'to' => [
],
'attachFiles' => [
],
];
$option = array_merge($default, $option);
$mail = \Yii::$app->mailer;
if ($option['text']) {
$mail = $mail->compose();
$mail->setTextBody($option['text']);
} else if ($option['html']) {
$mail = $mail->compose();
$mail->setHtmlBody($option['html']);
} else if ($option['tpl']) {
$mail = $mail->compose($option['tpl']['file'], $option['tpl']['var']);
} else {
return ['code' => 0, 'msg' => '参数有误!'];
}
$mail->setSubject($option['subject']);
foreach ($option['attachFiles'] as $fileAbsPath) {
$mail->attach($fileAbsPath);
}
$mail->setBcc($option['to']); // 密送,批量发送时,收件人看到邮件的收件人只写了自己
try {
$res = $mail->send();
if ($res) {
return ['code' => 0, 'msg' => '邮件发送成功!'];
} else {
var_dump($res);exit;
return ['code' => -1, 'msg' => '邮件发送失败:' . $mail->error()];
}
} catch (Swift_ConnectionException $e) {
return ['code' => -2, 'msg' => '邮件发送失败:' . $e->getMessage()];
}
}
}
第三步、可以在各种控制器、模型层里调用了。注意一下,MVC模式开发,复杂业务逻辑都应该放到Model层,我这里只是实例而已。在SiteController.php中新增如下Action:
public function actionEmail() {
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$option = [
// 'text' => '测试纯文本邮件',
'html' => '<font color=red>测试HTML</font>',
'tpl' => [
'file' => 'email_tpl.html',
'var' => [
'name' => '丁华能',
],
],
'subject' => '测试HTML',
'to' => [
'xxx@qq.com' => 'dhn',
// 'xxx@163.com' => 'dhn163',
],
'attachFiles' => [
// \Yii::getAlias('@webroot') . '/uploads/test.docx',
],
];
$res = \common\libs\Email::sendEmail($option);
return $res;
}
步骤四、在SiteController.php的上层目录controllers所在的同级目录中创建目录mail/layouts,layouts中创建文件html.php(默认布局,跟main.php如出一辙):
<?php $this->beginPage()?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?=Yii::$app->charset?>" /> <?php $this->head()?> </head> <body> <?php $this->beginBody()?> <?=$content?> <div class="footer">丁华能</div> <?php $this->endBody()?> </body> </html> <?php $this->endPage()?>
步骤五、在mail中创建email_tpl.html(yii渲染html是可以的,只要在render中带上后缀名):
<style type="text/css"> .red {color: red;} </style> <div class="red"> 这是一封来自<?=$name?>的邮件。 </div>
一切OK,访问相应的网址,就能看到json返回,如果成功,去收件箱看邮件吧,另外,配置的发件人的发件箱也能看到。
注意:bcc在邮件的smtp协议中规定的是密送功能,比如邮件你需要通知到你的所有客户,但这些客户之间毫无联系,那么你不能发一封邮件,让大家都看到一长串的收件人。这就需要用到密送。如果是企业内部,则应该用抄送功能(信件中,所有收件人都能看到)。
相关推荐
适用于Yii 2的SwiftMailer扩展 该扩展为提供了邮件解决方案。 有关许可证信息,请检查文件。 安装 安装此扩展的首选方法是通过 。 无论运行 php composer.phar require --prefer-dist yiisoft/yii2-swiftmailer ...
Yii-SwiftMailer Yii 框架版本 1.x 的 Swiftmailer 包装器当前 swiftmailer 版本支持 5.1.0 它支持以下功能: smtp、sendmail 或邮件传输ssl 或 tls 安全设置为,抄送,密件抄送动态(运行时生成)和静态文件的附件...
yii2-mailqueue, 用于 yii2 swiftmailer https的yii2的电子邮件队列组件 yii2-mailqueue适用于 yii2-swiftmailer的yii2的电子邮件队列组件安装安装这个扩展的首选方法是通过 composer插件。运行...
Yii2 的 `yii\log` 组件可以帮助记录和分析系统运行中的事件和异常,而 `yii\swiftmailer` 可以方便地发送邮件通知。API接口开发则可以利用Yii2的RESTful特性,快速构建符合REST原则的API,方便前后端分离的项目开发...
对于Web开发中的常见任务,Yii 2.0.9 提供了丰富的内置组件,例如邮件发送、表单处理、上传管理等。此外,它还集成了如Guzzle HTTP客户端,用于执行HTTP请求,以及SwiftMailer,用于发送电子邮件,简化了这些功能的...
网上商店 Yii2 Basic 2.015 [PHP 7.2 | HTML5 | Bootstrap 4.0]... "yiisoft/yii2-swiftmailer": "~2.0.0", "mdmsoft/yii2-admin": "~2.0", "unclead/yii2-multiple-input": "~2.0", "mihaildev/yii2-elfinder":
Yii2框架的队列邮件装饰器使用Yii2队列在后台发送您的电子邮件。安装安装此扩展的首选方法是通过 。 无论运行php composer.phar require --prefer-dist yarcode/yii2-queue-mailer 或添加" yarcode/yii2-queue-...
本文实例讲述了Yii2框架实现利用mpdf创建pdf文件功能。分享给大家供大家参考,具体如下: 安装mPDF 使用 Composer安装 在yii2的 ‘composer.json’ 加入”mpdf/mpdf”:”*” require: { php: >=5.4.0, yiisoft/...
yii2 blog 源码 安装 cd yii2-blog composer install #初始化数据 php yii mirgate 部署 通常向web目录指向yii2-blog/web即可,需要配置一个yii2-blog/config/mail.php, 设置一个你的smtp <?php return [ 'class...
Yii的设计理念是简洁、高效和可扩展,它旨在提高开发速度并降低维护成本。本篇文章将深入探讨Yii框架的核心特性和主要功能。 一、快速开发 Yii框架提供了一系列预构建的组件,如数据库访问对象(DAO)、...
10. **扩展和第三方库集成**:指导如何创建和使用Yii 3.0的扩展,以及如何与第三方库如Guzzle、SwiftMailer等进行集成。 11. **命令行工具**:介绍Gii代码生成工具和其他命令行接口,帮助自动化开发流程。 12. **...
而邮件发送(yii\swiftmailer)组件则可用于发送信用赠送通知。 此外,Yii2SimpleShop可能还涵盖了支付集成,让用户能够购买商品或服务。这通常涉及与第三方支付网关(如PayPal、Stripe等)的API接口交互,实现支付...
在本文中,我们将深入探讨如何使用Yii2框架与Swagger结合,以自动生成接口文档。Yii2是一个高效且灵活的PHP框架,适用于开发Web应用程序。Swagger则是一个强大的工具,用于设计、构建、文档化和使用RESTful Web服务...
- **SwiftMailer**:一个成熟的邮件发送库。 - **PHPMailer**:另一个流行的邮件发送库。 - **Fetch**:用于读取IMAP邮件的库。 - **Email Reply Parser**:解析邮件回复内容的库。 - **Stampie**:支持多种邮件服务...
而邮件通知功能可能涉及到PHPMailer或SwiftMailer库,用于发送任务相关的通知邮件。 在开发过程中,错误处理和日志记录也是重要环节,PHP的error_reporting和error_log函数可以辅助调试和问题排查。 最后,性能...
在线订单PHP订单系统是一款基于PHP开发的后端应用程序,它主要功能是处理用户的在线购物订单,并且具备通过电子邮件发送提醒的功能。这样的系统对于电子商务网站至关重要,因为它能够有效地管理订单流程,确保商家...
10. **第三方库和框架**:STCMS可能使用了一些PHP的第三方库,如Composer管理的Laravel、Yii等框架,或者用于图像处理的GD库,用于发送邮件的SwiftMailer等。 通过深入研究STCMS文章系统的源代码,开发者可以更深入...
此外,还可能使用了一些PHP库,如PHPExcel用于处理Excel数据,SwiftMailer处理邮件发送,或者jQuery和Bootstrap增强前端用户体验。 2. **数据库设计**:OA系统通常涉及用户管理、任务分配、审批流程等模块,因此...