EmailService.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: sai <1430792918@qq.com>
  6. // +----------------------------------------------------------------------
  7. namespace plugin\saiadmin\service;
  8. use PHPMailer\PHPMailer\Exception;
  9. use PHPMailer\PHPMailer\PHPMailer;
  10. use plugin\saiadmin\app\logic\system\SystemConfigLogic;
  11. use plugin\saiadmin\exception\ApiException;
  12. use plugin\saiadmin\utils\Arr;
  13. /**
  14. * 邮件服务类
  15. */
  16. class EmailService
  17. {
  18. /**
  19. * 读取配置
  20. * @return array|mixed|null
  21. */
  22. public static function getConfig()
  23. {
  24. $logic = new SystemConfigLogic();
  25. $config = $logic->getGroup('email_config');
  26. if (!$config) {
  27. throw new ApiException('未设置邮件配置');
  28. }
  29. return $config;
  30. }
  31. /**
  32. * Get Mailer
  33. * @return PHPMailer
  34. */
  35. public static function getMailer(): PHPMailer
  36. {
  37. if (!class_exists(PHPMailer::class)) {
  38. throw new ApiException('请执行 composer require phpmailer/phpmailer 并重启');
  39. }
  40. $config = static::getConfig();
  41. $mailer = new PHPMailer();
  42. $mailer->SMTPDebug = intval(Arr::getConfigValue($config,'SMTPDebug'));
  43. $mailer->isSMTP();
  44. $mailer->Host = Arr::getConfigValue($config,'Host');
  45. $mailer->SMTPAuth = true;
  46. $mailer->CharSet = Arr::getConfigValue($config,'CharSet');
  47. $mailer->Username = Arr::getConfigValue($config,'Username');
  48. $mailer->Password = Arr::getConfigValue($config,'Password');
  49. $mailer->SMTPSecure = Arr::getConfigValue($config,'SMTPSecure');
  50. $mailer->Port = Arr::getConfigValue($config,'Port');
  51. return $mailer;
  52. }
  53. /**
  54. * 发送邮件
  55. * @param $from
  56. * @param $to
  57. * @param $subject
  58. * @param $content
  59. * @return string
  60. * @throws Exception
  61. */
  62. public static function send($from, $to, $subject, $content): string
  63. {
  64. $mailer = static::getMailer();
  65. call_user_func_array([$mailer, 'setFrom'], (array)$from);
  66. call_user_func_array([$mailer, 'addAddress'], (array)$to);
  67. $mailer->Subject = $subject;
  68. $mailer->isHTML(true);
  69. $mailer->Body = $content;
  70. $mailer->send();
  71. return $mailer->ErrorInfo;
  72. }
  73. /**
  74. * 按照模版发送
  75. * @param string|array $to
  76. * @param $subject
  77. * @param $content
  78. * @param array $templateData
  79. * @return string
  80. * @throws Exception
  81. */
  82. public static function sendByTemplate($to, $subject, $content, array $templateData = []): string
  83. {
  84. if ($templateData) {
  85. $search = [];
  86. foreach ($templateData as $key => $value) {
  87. $search[] = '{' . $key . '}';
  88. }
  89. $content = str_replace($search, array_values($templateData), $content);
  90. }
  91. $config = static::getConfig();
  92. return static::send([Arr::getConfigValue($config,'From'), Arr::getConfigValue($config,'FromName')], $to, $subject, $content);
  93. }
  94. }