MailController.php 7.5 KB

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