`

yii2.0利用yii2-swiftmailer扩展发送邮件

 
阅读更多

官方文档地址: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数组中增加:

写道
'mailer' => [
'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协议中规定的是密送功能,比如邮件你需要通知到你的所有客户,但这些客户之间毫无联系,那么你不能发一封邮件,让大家都看到一长串的收件人。这就需要用到密送。如果是企业内部,则应该用抄送功能(信件中,所有收件人都能看到)。

 

分享到:
评论

相关推荐

    yii2-swiftmailer:Yii 2 swiftmailer扩展

    适用于Yii 2的SwiftMailer扩展 该扩展为提供了邮件解决方案。 有关许可证信息,请检查文件。 安装 安装此扩展的首选方法是通过 。 无论运行 php composer.phar require --prefer-dist yiisoft/yii2-swiftmailer ...

    Yii-SwiftMailer:Yii 框架版本 1.x 的 Swiftmailer 包装器

    Yii-SwiftMailer Yii 框架版本 1.x 的 Swiftmailer 包装器当前 swiftmailer 版本支持 5.1.0 它支持以下功能: smtp、sendmail 或邮件传输ssl 或 tls 安全设置为,抄送,密件抄送动态(运行时生成)和静态文件的附件...

    yii2-mailqueue, 用于 yii2 swiftmailer https的yii2的电子邮件队列组件.zip

    yii2-mailqueue, 用于 yii2 swiftmailer https的yii2的电子邮件队列组件 yii2-mailqueue适用于 yii2-swiftmailer的yii2的电子邮件队列组件安装安装这个扩展的首选方法是通过 composer插件。运行...

    yii2 通用后台系统

    Yii2 的 `yii\log` 组件可以帮助记录和分析系统运行中的事件和异常,而 `yii\swiftmailer` 可以方便地发送邮件通知。API接口开发则可以利用Yii2的RESTful特性,快速构建符合REST原则的API,方便前后端分离的项目开发...

    Yii 2.0.9 basic

    对于Web开发中的常见任务,Yii 2.0.9 提供了丰富的内置组件,例如邮件发送、表单处理、上传管理等。此外,它还集成了如Guzzle HTTP客户端,用于执行HTTP请求,以及SwiftMailer,用于发送电子邮件,简化了这些功能的...

    onlineshop:Yii2的在线商店网站

    网上商店 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-queue-mailer:Yii2框架的队列邮件装饰器

    Yii2框架的队列邮件装饰器使用Yii2队列在后台发送您的电子邮件。安装安装此扩展的首选方法是通过 。 无论运行php composer.phar require --prefer-dist yarcode/yii2-queue-mailer 或添加" yarcode/yii2-queue-...

    Yii2框架实现利用mpdf创建pdf文件功能示例

    本文实例讲述了Yii2框架实现利用mpdf创建pdf文件功能。分享给大家供大家参考,具体如下: 安装mPDF 使用 Composer安装 在yii2的 ‘composer.json’ 加入”mpdf/mpdf”:”*” require: { php: &gt;=5.4.0, yiisoft/...

    yii2-blog:yii2 的博客网络应用程序

    yii2 blog 源码 安装 cd yii2-blog composer install #初始化数据 php yii mirgate 部署 通常向web目录指向yii2-blog/web即可,需要配置一个yii2-blog/config/mail.php, 设置一个你的smtp &lt;?php return [ 'class...

    Yii框架详解

    Yii的设计理念是简洁、高效和可扩展,它旨在提高开发速度并降低维护成本。本篇文章将深入探讨Yii框架的核心特性和主要功能。 一、快速开发 Yii框架提供了一系列预构建的组件,如数据库访问对象(DAO)、...

    docs:各种Yii 3.0相关文档

    10. **扩展和第三方库集成**:指导如何创建和使用Yii 3.0的扩展,以及如何与第三方库如Guzzle、SwiftMailer等进行集成。 11. **命令行工具**:介绍Gii代码生成工具和其他命令行接口,帮助自动化开发流程。 12. **...

    Yii2SimpleShop:网上商店信用给朋友

    而邮件发送(yii\swiftmailer)组件则可用于发送信用赠送通知。 此外,Yii2SimpleShop可能还涵盖了支付集成,让用户能够购买商品或服务。这通常涉及与第三方支付网关(如PayPal、Stripe等)的API接口交互,实现支付...

    advanced-3-swagger.zip

    在本文中,我们将深入探讨如何使用Yii2框架与Swagger结合,以自动生成接口文档。Yii2是一个高效且灵活的PHP框架,适用于开发Web应用程序。Swagger则是一个强大的工具,用于设计、构建、文档化和使用RESTful Web服务...

    国外程序员收集整理的PHP资源大全.pdf )

    - **SwiftMailer**:一个成熟的邮件发送库。 - **PHPMailer**:另一个流行的邮件发送库。 - **Fetch**:用于读取IMAP邮件的库。 - **Email Reply Parser**:解析邮件回复内容的库。 - **Stampie**:支持多种邮件服务...

    PHP实例开发源码—同福客栈原生开发淘宝任务系统平台PHP源码(亲测可用).zip

    而邮件通知功能可能涉及到PHPMailer或SwiftMailer库,用于发送任务相关的通知邮件。 在开发过程中,错误处理和日志记录也是重要环节,PHP的error_reporting和error_log函数可以辅助调试和问题排查。 最后,性能...

    在线订单PHP订单系统 支持邮箱提醒

    在线订单PHP订单系统是一款基于PHP开发的后端应用程序,它主要功能是处理用户的在线购物订单,并且具备通过电子邮件发送提醒的功能。这样的系统对于电子商务网站至关重要,因为它能够有效地管理订单流程,确保商家...

    PHP实例开发源码—STCMS文章系统.zip

    10. **第三方库和框架**:STCMS可能使用了一些PHP的第三方库,如Composer管理的Laravel、Yii等框架,或者用于图像处理的GD库,用于发送邮件的SwiftMailer等。 通过深入研究STCMS文章系统的源代码,开发者可以更深入...

    简单的PHP OA系统

    此外,还可能使用了一些PHP库,如PHPExcel用于处理Excel数据,SwiftMailer处理邮件发送,或者jQuery和Bootstrap增强前端用户体验。 2. **数据库设计**:OA系统通常涉及用户管理、任务分配、审批流程等模块,因此...

Global site tag (gtag.js) - Google Analytics