分享概要:講述yii框架,用戶註冊然後以郵箱通知和短信通知用戶註冊狀態。短信使用阿里雲,郵箱使用swiftmailer插件。
支持php~~~
感覺博主寫的不錯,請小夥伴們轉載和分享點贊喲!
功能點: 用戶註冊通知
用戶註冊類:
public function actionCreateUsers(){
//數據過濾 數據判斷 這個省略了。。。。 直接看重點
if($model->save()){ //對用戶數據的保存
$data = $model->attributes;//獲取當前保存用戶的全部信息
$data['password_original'] =$password; //明文密碼
//發送郵件通知
\common\utils\Tool::sendMail($model->email, '恭喜你在xxx系統註冊成功。', $data, 'usersign') ;//p1 :用戶郵箱 p2:通知信息標題 p3:用戶數據 p4:通知信息模板
//發送短信通知 阿里雲
SMsDemo::sendMsgOnRegister($model->mobile_phone,$model->real_name,
$model->user_name,$data['password_original']);
}
return $this->redirect('/index');
}
2.郵箱工具類:
先在config裏的main.php添加組件:
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',//使用swiftmailer擴展 優點不佔用服務器資源內存
'viewPath' => '@common/mail', //模板路徑
'useFileTransport' => false,//如果啓用表示郵件發送到服務器並保存, 關閉時表示真實發送到用戶郵箱。。。
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.exmail.qq.com', //QQ企業郵箱 SSL啓用 端口:587/465 (其他郵箱配置請看下面提示:)
'port' => 465,
'encryption' => 'ssl',// (tls / ssl)根據情況選擇符合你的
//用戶密碼放在這裏不太安全,可以放在數據庫裏然後去取
'username' => '[email protected]',//寫自己的郵箱用戶名
'password' => 'zzzzz',//密碼
],
//發送的郵件信息配置
'messageConfig' => [
'charset' => 'utf-8',//編碼
'from' => ['[email protected]' => 'uuu'],//uuu修改成自己的簽名 隨意
],
],
提示:
126郵箱:
POP3服務器地址:pop.126.com(端口:110)
SMTP服務器地址:smtp.126.com(端口:25)
139郵箱:
POP3服務器地址:POP.139.com(端口:110)
SMTP服務器地址:SMTP.139.com(端口:25)
163.com:
POP3服務器地址:pop.163.com(端口:110)
SMTP服務器地址:smtp.163.com(端口:25)
QQ郵箱:
POP3服務器地址:pop.qq.com(端口:110)
SMTP服務器地址:smtp.qq.com(端口:25)
yahoo.com:
POP3服務器地址:pop.mail.yahoo.com
SMTP服務器地址:smtp.mail.yahoo.com
gmail(google.com)
POP3服務器地址:pop.gmail.com(SSL啓用端口:995)
SMTP服務器地址:smtp.gmail.com(SSL啓用 端口:587)
3.工具類
namespace common\utils;
use Yii;
class Tool {
/**
* 郵件發送
* @param type $to 郵件接收人多個傳數組
* @param type $title 郵件標題
* @param type $data 郵件內容(模板的時候最好使用數組)
* @param type $template 郵件模板
* @return int
*/
static function sendMail($to, $title, $data,$template='') {
$mail = !empty($template) ?
Yii::$app->mailer->compose($template,['data'=>$data]) ://這裏以usesign模板爲例
Yii::$app->mailer->compose(); //加載原始配置
$mail->setTo($to); //發送目標
$mail->setSubject($title); //標題
/*
*z這裏可以添加你的附件
*$message->attach('source/file.pdf');//附件圖片 內嵌圖片在模板中查看
$message->attachContent('Attachment content', ['fileName' => 'attach.txt', 'contentType' => 'text/plain'])//附件文本文件
*/
//要發送的內容
!empty($template)?$mail->setTextBody(''):$mail->setHtmlBody($data);
if ($mail->send()) {
return 1;
}
return 0;
}
}
4:自定義郵箱模板:
<?php
use yii\helpers\Html;
?>
<div class="body">
<div class="container">
<div class="logo">
<img height="20" src="xxxx">//內嵌圖片
</div>
<div class="panel-body">
<p>
<?php echo $data['user_name'] ?>,您好!
</p>
<p>
賬號:
<code><?php echo $data['user_name'] ?></code>
</p>
<p>
密碼:
<code><?php echo $data['password_original'] ?></code>
</p>
</div>
</div>
</div>
5.短信通知:
5-1:
1.先去阿里雲註冊:
訪問阿里雲 官方網站,單擊頁面上的 免費註冊 按鈕。
按照屏幕提示完成註冊流程並進行實名認證,短信服務只支持實名認證用戶使用。爲了更好地使用阿里雲服務,建議儘快完成實名認證,否則部分阿里雲服務將無法使用。具體實名認證流程,請參考 這裏。
步驟 2 獲取阿里雲訪問密鑰
爲了使用短信發送API-PHP SDK,您必須申請阿里雲的訪問密鑰。
阿里雲訪問祕鑰是阿里云爲用戶使用 API(非控制檯)來訪問其雲資源設計的“安全口令”。您可以用它來簽名 API 請求內容以通過服務端的安全驗證。
該訪問祕鑰成對(AccessKeyId 與 AccessKeySecret)生成和使用。每個阿里雲用戶可以創建多對訪問祕鑰,且可隨時啓用(Active)、禁用(Inactive)或者刪除已經生成的訪問祕鑰對。
您可以通過阿里雲控制檯的 祕鑰管理頁面 創建、管理所有的訪問祕鑰對,且保證它處於“啓用”狀態。由於訪問祕鑰是阿里雲對 API 請求進行安全驗證的關鍵因子,請妥善保管你的訪問祕鑰。如果某些祕鑰對出現泄漏風險,建議及時刪除該祕鑰對並生成新的替代祕鑰對。
重點:
爲了成功發送一條短信通知,您至少需要完成以下步驟
一、在控制檯完成短信簽名與短信模板的申請,獲得調用接口必備的參數
在“短信簽名”頁面完成簽名的申請,獲得短信簽名的字符串簽名申請手冊
在“短信模板”頁面完成模板的申請,獲得模板ID。模板申請手冊
配置請看阿里雲手冊 ,下載demo :
https://help.aliyun.com/document_detail/55451.html?spm=5176.11065259.1996646101.searchclickresult.515119bbVdZj1U&aly_as=JoXJ__qh
把demo下載好了解壓放在項目中,我這裏是放到了 common/utils/ 下面。
<?php
//阿里雲
ini_set("display_errors", "on");
require_once 'aliyun-dysms-php-sdk/api_sdk/vendor/autoload.php';
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\SendBatchSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
// 加載區域結點配置
Config::load();
class SmsDemo
{ /**
* 註冊賬號發送通知模板
* @return stdClass
*/
public static function sendMsgOnRegister($phoneNumber,$name,$username,$password) {
// 初始化SendSmsRequest實例用於設置發送短信的參數
$request = new SendSmsRequest();
// 必填,設置短信接收號碼
$request->setPhoneNumbers($phoneNumber);
// 必填,設置簽名名稱,應嚴格按"簽名名稱"填寫,請參考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
$request->setSignName("xxxx");
// 必填,設置模板CODE,應嚴格按"模板CODE"填寫, 請參考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
$request->setTemplateCode("yyyy");
// 可選,設置模板參數, 假如模板中存在變量需要替換則爲必填項
$request->setTemplateParam(json_encode(array( // 短信模板中字段的值
"name"=>$name,
"username"=>$username,
"password"=>$password,
), JSON_UNESCAPED_UNICODE));
// 可選,設置流水號
$request->setOutId("55566");
// 選填,上行短信擴展碼(擴展碼字段控制在7位或以下,無特殊需求用戶請忽略此字段)
//$request->setSmsUpExtendCode("234567");
// 發起訪問請求
$acsResponse = static::getAcsClient()->getAcsResponse($request);
return $acsResponse;
}
/**
* 批量發送短信
* 這裏我會持續更新 需要這個功能的話可以看官網 也可以聯繫我Q1694084708
*/
}
感覺博主寫的不錯,請小夥伴們轉載和分享點贊喲!