SendMail.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\utils;
  8. use app\models\Goods;
  9. use app\models\Option;
  10. use app\models\Order;
  11. use app\models\OrderDetail;
  12. class SendMail
  13. {
  14. public $store_id;
  15. public $order_id;
  16. public $type;
  17. public $store_name;
  18. /**
  19. * SendMail constructor.
  20. * @param int $store_id
  21. * @param int $order_id 订单id
  22. * @param int $type 订单类型 0--商城订单 1--秒杀订单 2--拼团订单 3--预约订单
  23. *
  24. */
  25. public function __construct($store_id, $order_id, $type = 0)
  26. {
  27. $this->store_id = $store_id;
  28. $this->store_name = Option::get('name', $this->store_id, 'store')['value'];
  29. $this->order_id = $order_id;
  30. $this->type = $type;
  31. }
  32. public function send()
  33. {
  34. $mail_setting = MailSetting::findOne(['store_id' => $this->store_id, 'is_delete' => 0, 'status' => 1]);
  35. if (!$mail_setting) {
  36. return false;
  37. }
  38. if ($this->type == 0) {
  39. $order = Order::findOne(['id' => $this->order_id]);
  40. $goods_list = $this->getOrderGoodsList($this->order_id);
  41. } elseif ($this->type == 1) {
  42. $order = MsOrder::find()->where(['id' => $this->order_id])->asArray()->one();
  43. $goods_list = $this->getMsOrderGoodsList($this->order_id);
  44. } elseif ($this->type == 2) {
  45. $order = PtOrder::findOne(['id' => $this->order_id]);
  46. $goods_list = $this->getPtOrderGoodsList($this->order_id);
  47. } elseif ($this->type == 3) {
  48. $order = YyOrder::find()->where(['id' => $this->order_id])->asArray()->one();
  49. $goods_list = $this->getYyOrderGoodsList($this->order_id);
  50. } else {
  51. \Yii::warning(['UNKNOWN ORDER TYPE', [$this->type]]);
  52. return false;
  53. }
  54. $receive = str_replace(",", ",", $mail_setting->receive_mail);
  55. $receive_mail = explode(",", $receive);
  56. $res = true;
  57. foreach ($receive_mail as $mail) {
  58. try {
  59. $mailer = \Yii::$app->mailer;
  60. $mailer->transport = $mailer->transport->newInstance('smtp.qq.com', 465, 'ssl');
  61. $mailer->transport->setUsername($mail_setting->send_mail);
  62. $mailer->transport->setPassword($mail_setting->send_pwd);
  63. $compose = $mailer->compose('setMail', [
  64. 'store_name' => $this->store_name,
  65. 'goods_list' => $goods_list,
  66. 'order' => $order,
  67. 'type' => $this->type
  68. ]);
  69. $compose->setFrom($mail_setting->send_mail); //要发送给那个人的邮箱
  70. $compose->setTo($mail); //要发送给那个人的邮箱
  71. $compose->setSubject($mail_setting->send_name); //邮件主题
  72. $res = $compose->send();
  73. } catch (\Exception $e) {
  74. \Yii::warning('邮件发送失败:' . $e->getMessage());
  75. }
  76. }
  77. return $res;
  78. }
  79. /**
  80. * @param $order_id
  81. * @return mixed
  82. * 拼团订单商品详情
  83. */
  84. private function getPtOrderGoodsList($order_id)
  85. {
  86. $order_detail_list = PtOrderDetail::find()->alias('od')
  87. ->leftJoin(['g' => PtGoods::tableName()], 'od.goods_id=g.id')
  88. ->where([
  89. 'od.is_delete' => 0,
  90. 'od.order_id' => $order_id,
  91. ])->select('od.*,g.name')->asArray()->all();
  92. return $order_detail_list;
  93. }
  94. /**
  95. * @param $order_id
  96. * @return mixed
  97. * 订单商品详情
  98. */
  99. private function getOrderGoodsList($order_id)
  100. {
  101. $order_detail_list = OrderDetail::find()->alias('od')
  102. ->leftJoin(['g' => Goods::tableName()], 'od.goods_id=g.id')
  103. ->where([
  104. 'od.is_delete' => 0,
  105. 'od.order_id' => $order_id,
  106. ])->select('od.*,g.name')->asArray()->all();
  107. return $order_detail_list;
  108. }
  109. /**
  110. * @param $order_id
  111. * @return mixed
  112. * 秒杀订单商品详情
  113. */
  114. private function getMsOrderGoodsList($order_id)
  115. {
  116. $order_detail_list = MsOrder::find()->alias('o')
  117. ->leftJoin(['g' => MsGoods::tableName()], 'g.id=o.goods_id')
  118. ->where(['o.id'=>$order_id,'o.is_delete'=>0])
  119. ->select(['o.*','g.name'])->asArray()->all();
  120. return $order_detail_list;
  121. }
  122. /**
  123. * @param $order_id
  124. * @return mixed
  125. * 订单商品详情
  126. */
  127. private function getYyOrderGoodsList($order_id)
  128. {
  129. $order_detail_list = YyGoods::find()->alias('g')
  130. ->leftJoin(['o'=>YyOrder::tableName()], 'o.goods_id=g.id and o.id='.$order_id)
  131. ->where([
  132. 'o.is_delete'=>0,
  133. ])->select('g.*')->asArray()->one();
  134. return $order_detail_list;
  135. }
  136. /**
  137. * @return bool
  138. * 新的售后订单
  139. */
  140. public function send_refund()
  141. {
  142. $mail_setting = MailSetting::findOne(['store_id' => $this->store_id, 'is_delete' => 0, 'status' => 1]);
  143. if (!$mail_setting) {
  144. return false;
  145. }
  146. if ($this->type == 0) {
  147. $order = Order::findOne(['id' => $this->order_id]);
  148. } elseif ($this->type == 1) {
  149. $order = MsOrder::find()->where(['id' => $this->order_id])->asArray()->one();
  150. } elseif ($this->type == 2) {
  151. $order = PtOrder::findOne(['id' => $this->order_id]);
  152. } elseif ($this->type == 3) {
  153. $order = YyOrder::find()->where(['id' => $this->order_id])->asArray()->one();
  154. }
  155. $receive = str_replace(",", ",", $mail_setting->receive_mail);
  156. $receive_mail = explode(",", $receive);
  157. $res = true;
  158. foreach ($receive_mail as $mail) {
  159. try {
  160. $mailer = \Yii::$app->mailer;
  161. $mailer->transport = $mailer->transport->newInstance('smtp.qq.com', 465, 'ssl');
  162. $mailer->transport->setUsername($mail_setting->send_mail);
  163. $mailer->transport->setPassword($mail_setting->send_pwd);
  164. $compose = $mailer->compose('setMailRefund', [
  165. 'store_name' => $this->store_name,
  166. 'order_no' => $order->order_no
  167. ]);
  168. $compose->setFrom($mail_setting->send_mail); //要发送给那个人的邮箱
  169. $compose->setTo($mail); //要发送给那个人的邮箱
  170. $compose->setSubject($mail_setting->send_name); //邮件主题
  171. $res = $compose->send();
  172. } catch (\Exception $e) {
  173. \Yii::warning('邮件发送失败:' . $e->getMessage());
  174. return false;
  175. }
  176. }
  177. return $res;
  178. }
  179. }