MailController.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2017/12/1/001
  6. * Time: 16:27
  7. */
  8. namespace backend\controllers;
  9. use backend\helpers\DateTimeHelper;
  10. use backend\helpers\MailHelper;
  11. use backend\helpers\PaginationHelper;
  12. use backend\helpers\ValidatorHelper;
  13. use backend\models\Config;
  14. use backend\models\Mail;
  15. use backend\models\MailEvent;
  16. use backend\models\MailRecord;
  17. use yii\web\Controller;
  18. //class MailController extends BaseController
  19. //{
  20. class MailController extends BaseController
  21. {
  22. const EVENT_EMAIL_SEND = 'send';
  23. /**
  24. * 获取邮件列表
  25. */
  26. public function actionGetMailList()
  27. {
  28. $request = \Yii::$app->request->get();
  29. $data = [];
  30. $data['page'] = isset($request['page']) ? (int)$request['page'] : 1;
  31. $data['pageSize'] = isset($request['page']) ? (int)$request['pageSize'] : 20;
  32. $data['orderBy'] = isset($request['orderBy']) ? $request['orderBy'] : 'id desc';
  33. $data['search'] = isset($request['search']) ? $request['search'] : '';
  34. $data = ValidatorHelper::validateData($data, [
  35. ['page', 'integer', 'min' => 1],
  36. ['pageSize', 'integer', 'min' => 1],
  37. ['orderBy', 'string'],
  38. ], $errors);
  39. if ($data == false) {
  40. return $this->outJson(0, '', $errors);
  41. }
  42. $query = Mail::find()->orderBy($data['orderBy']);
  43. if (!empty($data['search'])) {
  44. $query->andFilterWhere(['like', 'subject', $data['search']]);
  45. }
  46. $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']);
  47. return $this->outJson(1, $result);
  48. }
  49. /**
  50. * 获取邮件发送记录
  51. */
  52. public function actionGetMailRecordList()
  53. {
  54. $request = \Yii::$app->request->get();
  55. $data = [];
  56. $data['page'] = isset($request['page']) ? (int)$request['page'] : 1;
  57. $data['pageSize'] = isset($request['page']) ? (int)$request['pageSize'] : 20;
  58. $data['orderBy'] = isset($request['orderBy']) ? $request['orderBy'] : 'id desc';
  59. $data['search'] = isset($request['search']) ? $request['search'] : '';
  60. $data = ValidatorHelper::validateData($data, [
  61. ['page', 'integer', 'min' => 1],
  62. ['pageSize', 'integer', 'min' => 1],
  63. ['orderBy', 'string'],
  64. ], $errors);
  65. if ($data == false) {
  66. return $this->outJson(0, '', $errors);
  67. }
  68. $query = MailRecord::find()->orderBy($data['orderBy']);
  69. if (!empty($data['search'])) {
  70. $query->andFilterWhere(['like', 'receiver', $data['search']]);
  71. }
  72. $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']);
  73. return $this->outJson(1, $result);
  74. }
  75. /**
  76. * 获取邮件详情
  77. */
  78. public function actionViewMail()
  79. {
  80. $request = \Yii::$app->request->get();
  81. $id = isset($request['id']) ? (int)$request['id'] : '';
  82. $result = Mail::find()->where(['id' => $id])->one();
  83. return $this->outJson(1, $result);
  84. }
  85. /**
  86. * 获取邮件记录详情
  87. */
  88. public function actionViewMailRecord()
  89. {
  90. $request = \Yii::$app->request->get();
  91. $id = isset($request['id']) ? (int)$request['id'] : '';
  92. $result = MailRecord::find()->where(['id' => $id])->one();
  93. return $this->outJson(1, $result);
  94. }
  95. /**
  96. * 新增邮件
  97. */
  98. public function actionSaveMail()
  99. {
  100. $request = \Yii::$app->request->post();
  101. $params['type'] = isset($request['type']) ? (int)$request['type'] : '';
  102. $params['subject'] = isset($request['subject']) ? $request['subject'] : '';
  103. $params['content'] = isset($request['content']) ? $request['content'] : '';
  104. $params['other'] = isset($request['other']) ? $request['other'] : '';
  105. $params['state'] = 0;
  106. $params['in_time'] = DateTimeHelper::microtime_float();
  107. $mail = new Mail();
  108. $mail->setAttributes($params);
  109. if ($mail->save()) {
  110. return $this->outJson(1, $mail->getAttributes());
  111. } else {
  112. return $this->outJson(0, [], $mail->getErrors());
  113. }
  114. }
  115. /**
  116. * 删除邮件
  117. */
  118. public function actionDelMail()
  119. {
  120. $request = \Yii::$app->request->post();
  121. $id = isset($request['id']) ? (int)$request['id'] : '';
  122. $mail = new Mail();
  123. $result = $mail->deleteAll(['id' => $id]);
  124. return $this->outJson(1, $result);
  125. }
  126. /**
  127. * 批量发送邮件(该方法慎用会员,代理商,会员+代理商)!!!!
  128. * 因为会往crm_mail_record插入大量state=0的记录
  129. * 自动计划脚本SendMailJob每分钟都在跑,该脚本就是发送state=0的邮件
  130. */
  131. public function actionSendMail()
  132. {
  133. $request = \Yii::$app->request->post();
  134. $id = isset($request['id']) ? (int)$request['id'] : '';
  135. $mail = Mail::findOne(['id' => $id]);
  136. if ($mail->state == 0) {
  137. // 事件的绑定
  138. // $result = EventHelper::saveMailRecord($id, $mail->type);
  139. $mailModel = new Mail();
  140. $mailEvent = new MailEvent();
  141. $mailEvent->mailId = $id;
  142. $mailEvent->type = $mail->type;
  143. $this->on(self::EVENT_EMAIL_SEND, [$mailModel, 'sendEvent']);
  144. // 事件的触发
  145. $this->trigger(self::EVENT_EMAIL_SEND, $mailEvent);
  146. $mail->state = 1;
  147. $mail->save();
  148. return $this->outJson(1, $mail, '操作成功');
  149. } else {
  150. return $this->outJson(0, [], '已发送,不能重复发送');
  151. }
  152. }
  153. /**
  154. * 邮件记录-重新发送邮件
  155. */
  156. public function actionSendMailRecord()
  157. {
  158. $request = \Yii::$app->request->post();
  159. $id = isset($request['id']) ? (int)$request['id'] : '';
  160. $mailRecord = MailRecord::findOne(['id' => $id]);
  161. $config = Config::findOne(1);
  162. $rs = MailHelper::sendButNotSaveRecord($mailRecord->subject, $mailRecord->receiver, $config->smtp_from_mail, $mailRecord->content, $id);
  163. if ($rs) {
  164. return $this->outJson(1, $rs, '发送成功');
  165. } else {
  166. return $this->outJson(0, [], '发送失败');
  167. }
  168. }
  169. /**
  170. * 邮件记录-删除
  171. */
  172. public function actionDelMailRecord()
  173. {
  174. $request = \Yii::$app->request->post();
  175. $id = isset($request['id']) ? (int)$request['id'] : '';
  176. $mail = new MailRecord();
  177. $result = $mail->deleteAll(['id' => $id]);
  178. return $this->outJson(1, $result);
  179. }
  180. /**
  181. * 邮箱验证码
  182. * @param $email
  183. * @param $code
  184. */
  185. public function actionSendMailCode()
  186. {
  187. $request = \Yii::$app->request->post();
  188. $email = $request['email'];
  189. $code = MailHelper::sendCodeSms($email);
  190. if (!$email || !$code) {
  191. return $this->outJson(0, [], '参数错误');
  192. }
  193. $config = Config::findOne(1);
  194. $paramArray = [
  195. 'email' => $email,
  196. 'code' => $code,
  197. ];
  198. // 发送邮件
  199. MailHelper::sendMail("邮箱验证码", $email, $paramArray, '', $config->mail_code);
  200. return $this->outJson(1, [], 'OK');
  201. }
  202. /**
  203. * 邮箱验证码
  204. * @param $email
  205. * @param $code
  206. */
  207. public function actionGetMailCode()
  208. {
  209. $email = trim(\Yii::$app->getRequest()->get('email'));
  210. if ($email == '') {
  211. return $this->outJson(0, [], '邮箱不能为空');
  212. }
  213. $result = MailHelper::getCodeSms($email);
  214. return $this->outJson(1, $result, 'OK');
  215. }
  216. }