Customer.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <?php
  2. /*
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecshop\services\email;
  10. use Yii;
  11. use fecshop\services\Service;
  12. /**
  13. * customer email services
  14. * @author Terry Zhao <2358269014@qq.com>
  15. * @since 1.0
  16. */
  17. class Customer extends Service
  18. {
  19. /**
  20. * 邮件模板部分配置.
  21. */
  22. public $emailTheme;
  23. /**
  24. * 注册账户是否需要邮件激活
  25. */
  26. public $registerAccountIsNeedEnableByEmail = false;
  27. /**
  28. * 注册账户激活邮件的token的过期时间。
  29. */
  30. public $registerAccountEnableTokenExpire = 86400;
  31. public function init()
  32. {
  33. parent::init();
  34. // init email config
  35. $this->registerAccountIsNeedEnableByEmail = (Yii::$app->store->get('email', 'registerAccountIsNeedEnableByEmail') == Yii::$app->store->enable) ? true : false ;
  36. $this->registerAccountEnableTokenExpire = Yii::$app->store->get('email', 'registerAccountEnableTokenExpire');
  37. $this->emailTheme['register']['enable'] = (Yii::$app->store->get('email', 'registerEnable') == Yii::$app->store->enable) ? true : false ;
  38. $this->emailTheme['register']['widget'] = Yii::$app->store->get('email', 'registerWidget');
  39. $this->emailTheme['register']['viewPath'] = Yii::$app->store->get('email', 'registerViewPath');
  40. $this->emailTheme['login']['enable'] = (Yii::$app->store->get('email', 'loginEnable') == Yii::$app->store->enable) ? true : false ;
  41. $this->emailTheme['login']['widget'] = Yii::$app->store->get('email', 'loginWidget');
  42. $this->emailTheme['login']['viewPath'] = Yii::$app->store->get('email', 'loginViewPath');
  43. $this->emailTheme['forgotPassword']['enable'] = (Yii::$app->store->get('email', 'forgotPasswordEnable') == Yii::$app->store->enable) ? true : false ;
  44. $this->emailTheme['forgotPassword']['widget'] = Yii::$app->store->get('email', 'forgotPasswordWidget');
  45. $this->emailTheme['forgotPassword']['viewPath'] = Yii::$app->store->get('email', 'forgotPasswordViewPath');
  46. $this->emailTheme['forgotPassword']['passwordResetTokenExpire'] = Yii::$app->store->get('email', 'forgotPasswordResetTokenExpire');
  47. $this->emailTheme['contacts']['enable'] = (Yii::$app->store->get('email', 'contactsEnable') == Yii::$app->store->enable) ? true : false ;
  48. $this->emailTheme['contacts']['widget'] = Yii::$app->store->get('email', 'contactsWidget');
  49. $this->emailTheme['contacts']['viewPath'] = Yii::$app->store->get('email', 'contactsViewPath');
  50. $this->emailTheme['contacts']['address'] = Yii::$app->store->get('email', 'contactsEmailAddress');
  51. $this->emailTheme['newsletter']['enable'] = (Yii::$app->store->get('email', 'newsletterEnable') == Yii::$app->store->enable) ? true : false ;
  52. $this->emailTheme['newsletter']['widget'] = Yii::$app->store->get('email', 'newsletterWidget');
  53. $this->emailTheme['newsletter']['viewPath'] = Yii::$app->store->get('email', 'newsletterViewPath');
  54. }
  55. /**
  56. * @param $emailInfo | Array ,数组格式格式如下:
  57. * [ 'email' => 'xx@xx.com' , [...] ] 其中email是必须有的数组key,对于其他的,
  58. * 可以根据功能添加,添加后,可以在邮件模板的$params中调用,譬如调用email为 $params['email']
  59. * @return boolean , 如果发送成功,则返回true。
  60. * 该功能为:给客户注册用户发送邮件,使用该函数的格式如下:
  61. * Yii::$service->email->customer->sendRegisterEmail($emailInfo);
  62. */
  63. public function sendRegisterEmail($emailInfo)
  64. {
  65. $toEmail = $emailInfo['email'];
  66. $registerInfo = $this->emailTheme['register'];
  67. if (isset($registerInfo['enable']) && $registerInfo['enable']) {
  68. $mailerConfigParam = '';
  69. if (isset($registerInfo['mailerConfig']) && $registerInfo['mailerConfig']) {
  70. $mailerConfigParam = $registerInfo['mailerConfig'];
  71. }
  72. if (isset($registerInfo['widget']) && $registerInfo['widget']) {
  73. $widget = $registerInfo['widget'];
  74. }
  75. if (isset($registerInfo['viewPath']) && $registerInfo['viewPath']) {
  76. $viewPath = $registerInfo['viewPath'];
  77. }
  78. if ($widget && $viewPath) {
  79. list($subject, $htmlBody) = Yii::$service->email->getSubjectAndBody($widget, $viewPath, '', $emailInfo);
  80. $sendInfo = [
  81. 'to' => $toEmail,
  82. 'subject' => $subject,
  83. 'htmlBody' => $htmlBody,
  84. 'senderName'=> Yii::$service->store->currentStore,
  85. ];
  86. Yii::$service->email->send($sendInfo, $mailerConfigParam);
  87. return true;
  88. }
  89. }
  90. }
  91. /**
  92. * @param $emailInfo | Array ,数组格式格式如下:
  93. * [ 'email' => 'xx@xx.com' , [...] ] 其中email是必须有的数组key,对于其他的,
  94. * 可以根据功能添加,添加后,可以在邮件模板的$params中调用,譬如调用email为 $params['email']
  95. * @return boolean , 如果发送成功,则返回true。
  96. * 客户登录账号发送邮件
  97. */
  98. public function sendLoginEmail($emailInfo)
  99. {
  100. $toEmail = $emailInfo['email'];
  101. $loginInfo = $this->emailTheme['login'];
  102. if (isset($loginInfo['enable']) && $loginInfo['enable']) {
  103. $mailerConfigParam = '';
  104. if (isset($loginInfo['mailerConfig']) && $loginInfo['mailerConfig']) {
  105. $mailerConfigParam = $loginInfo['mailerConfig'];
  106. }
  107. if (isset($loginInfo['widget']) && $loginInfo['widget']) {
  108. $widget = $loginInfo['widget'];
  109. }
  110. if (isset($loginInfo['viewPath']) && $loginInfo['viewPath']) {
  111. $viewPath = $loginInfo['viewPath'];
  112. }
  113. if ($widget && $viewPath) {
  114. list($subject, $htmlBody) = Yii::$service->email->getSubjectAndBody($widget, $viewPath, '', $emailInfo);
  115. $sendInfo = [
  116. 'to' => $toEmail,
  117. 'subject' => $subject,
  118. 'htmlBody' => $htmlBody,
  119. 'senderName'=> Yii::$service->store->currentStore,
  120. ];
  121. Yii::$service->email->send($sendInfo, $mailerConfigParam);
  122. return true;
  123. }
  124. }
  125. }
  126. /**
  127. * @param $emailInfo | Array ,数组格式格式如下:
  128. * [ 'email' => 'xx@xx.com' , [...] ] 其中email是必须有的数组key,对于其他的,
  129. * 可以根据功能添加,添加后,可以在邮件模板的$params中调用,譬如调用email为 $params['email']
  130. * @return boolean , 如果发送成功,则返回true。
  131. * 客户忘记秒发送的邮件
  132. */
  133. public function sendForgotPasswordEmail($emailInfo)
  134. {
  135. $toEmail = $emailInfo['email'];
  136. $forgotPasswordInfo = $this->emailTheme['forgotPassword'];
  137. if (isset($forgotPasswordInfo['enable']) && $forgotPasswordInfo['enable']) {
  138. $mailerConfigParam = '';
  139. if (isset($forgotPasswordInfo['mailerConfig']) && $forgotPasswordInfo['mailerConfig']) {
  140. $mailerConfigParam = $forgotPasswordInfo['mailerConfig'];
  141. }
  142. if (isset($forgotPasswordInfo['widget']) && $forgotPasswordInfo['widget']) {
  143. $widget = $forgotPasswordInfo['widget'];
  144. }
  145. if (isset($forgotPasswordInfo['viewPath']) && $forgotPasswordInfo['viewPath']) {
  146. $viewPath = $forgotPasswordInfo['viewPath'];
  147. }
  148. if ($widget && $viewPath) {
  149. list($subject, $htmlBody) = Yii::$service->email->getSubjectAndBody($widget, $viewPath, '', $emailInfo);
  150. $sendInfo = [
  151. 'to' => $toEmail,
  152. 'subject' => $subject,
  153. 'htmlBody' => $htmlBody,
  154. 'senderName'=> Yii::$service->store->currentStore,
  155. ];
  156. Yii::$service->email->send($sendInfo, $mailerConfigParam);
  157. return true;
  158. }
  159. }
  160. }
  161. /**
  162. * 超时时间:忘记密码发送邮件,内容中的修改密码链接的超时时间。
  163. */
  164. public function getPasswordResetTokenExpire()
  165. {
  166. $forgotPasswordInfo = $this->emailTheme['forgotPassword'];
  167. if (isset($forgotPasswordInfo['passwordResetTokenExpire']) && $forgotPasswordInfo['passwordResetTokenExpire']) {
  168. return $forgotPasswordInfo['passwordResetTokenExpire'];
  169. }
  170. }
  171. /**
  172. * 超时时间: 注册账户激活邮件的token的过去时间
  173. */
  174. public function getRegisterEnableTokenExpire()
  175. {
  176. return $this->registerAccountEnableTokenExpire;
  177. }
  178. /**
  179. * @param $emailInfo | Array ,数组格式格式如下:
  180. * [ 'email' => 'xx@xx.com' , [...] ] 其中email是必须有的数组key,对于其他的,
  181. * 可以根据功能添加,添加后,可以在邮件模板的$params中调用,譬如调用email为 $params['email']
  182. * @return boolean , 如果发送成功,则返回true。
  183. * 客户联系我们邮件。
  184. */
  185. public function sendContactsEmail($emailInfo)
  186. {
  187. $contactsInfo = $this->emailTheme['contacts'];
  188. $toEmail = $contactsInfo['address'];
  189. if (!$toEmail) {
  190. Yii::$service->page->message->addError(['Contact us : receive email is empty , you must config it in email customer contacts email']);
  191. return;
  192. }
  193. if (isset($contactsInfo['enable']) && $contactsInfo['enable']) {
  194. $mailerConfigParam = '';
  195. if (isset($contactsInfo['mailerConfig']) && $contactsInfo['mailerConfig']) {
  196. $mailerConfigParam = $contactsInfo['mailerConfig'];
  197. }
  198. if (isset($contactsInfo['widget']) && $contactsInfo['widget']) {
  199. $widget = $contactsInfo['widget'];
  200. }
  201. if (isset($contactsInfo['viewPath']) && $contactsInfo['viewPath']) {
  202. $viewPath = $contactsInfo['viewPath'];
  203. }
  204. if ($widget && $viewPath) {
  205. list($subject, $htmlBody) = Yii::$service->email->getSubjectAndBody($widget, $viewPath, '', $emailInfo);
  206. $sendInfo = [
  207. 'to' => $toEmail,
  208. 'subject' => $subject,
  209. 'htmlBody' => $htmlBody,
  210. 'senderName'=> Yii::$service->store->currentStore,
  211. ];
  212. Yii::$service->email->send($sendInfo, $mailerConfigParam);
  213. return true;
  214. }
  215. }
  216. }
  217. /**
  218. * @param $emailInfo | Array ,数组格式格式如下:
  219. * [ 'email' => 'xx@xx.com' , [...] ] 其中email是必须有的数组key,对于其他的,
  220. * 可以根据功能添加,添加后,可以在邮件模板的$params中调用,譬如调用email为 $params['email']
  221. * @return boolean , 如果发送成功,则返回true。
  222. * 订阅邮件成功邮件
  223. */
  224. public function sendNewsletterSubscribeEmail($emailInfo)
  225. {
  226. $toEmail = $emailInfo['email'];
  227. $newsletterInfo = $this->emailTheme['newsletter'];
  228. if (isset($newsletterInfo['enable']) && $newsletterInfo['enable']) {
  229. $mailerConfigParam = '';
  230. if (isset($newsletterInfo['mailerConfig']) && $newsletterInfo['mailerConfig']) {
  231. $mailerConfigParam = $newsletterInfo['mailerConfig'];
  232. }
  233. if (isset($newsletterInfo['widget']) && $newsletterInfo['widget']) {
  234. $widget = $newsletterInfo['widget'];
  235. }
  236. if (isset($newsletterInfo['viewPath']) && $newsletterInfo['viewPath']) {
  237. $viewPath = $newsletterInfo['viewPath'];
  238. }
  239. if ($widget && $viewPath) {
  240. list($subject, $htmlBody) = Yii::$service->email->getSubjectAndBody($widget, $viewPath, '', $emailInfo);
  241. $sendInfo = [
  242. 'to' => $toEmail,
  243. 'subject' => $subject,
  244. 'htmlBody' => $htmlBody,
  245. 'senderName'=> Yii::$service->store->currentStore,
  246. ];
  247. Yii::$service->email->send($sendInfo, $mailerConfigParam);
  248. return true;
  249. }
  250. }
  251. }
  252. }