common.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <?php
  2. $host = (isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'www.tailsocks.com';
  3. define("SITE_URL", "https://".$host);
  4. /**
  5. * 浏览器友好的变量输出
  6. *
  7. * @param mixed $var
  8. * 变量
  9. * @param boolean $echo
  10. * 是否输出 默认为True 如果为false 则返回输出字符串
  11. * @param string $label
  12. * 标签 默认为空
  13. * @param boolean $strict
  14. * 是否严谨 默认为true
  15. * @return void string
  16. */
  17. function dump($var, $echo = true, $label = null, $strict = true)
  18. {
  19. $label = ($label === null) ? '' : rtrim($label) . ' ';
  20. if (!$strict) {
  21. if (ini_get('html_errors')) {
  22. $output = print_r($var, true);
  23. $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
  24. } else {
  25. $output = $label . print_r($var, true);
  26. }
  27. } else {
  28. ob_start();
  29. var_dump($var);
  30. $output = ob_get_clean();
  31. if (!extension_loaded('xdebug')) {
  32. $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
  33. $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
  34. }
  35. }
  36. if ($echo) {
  37. echo($output);
  38. return null;
  39. } else
  40. return $output;
  41. }
  42. function JsMessage($message, $URL = 'HISTORY', $charset = 'utf-8')
  43. {
  44. echo '
  45. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  46. <html xmlns="http://www.w3.org/1999/xhtml">
  47. <head>
  48. <meta http-equiv="Content-Type" content="text/html; charset=' . $charset . '" />
  49. <title>系统提示</title>
  50. </head>
  51. <body>
  52. <script type="text/javascript">
  53. alert("' . $message . '");
  54. ' . (strtoupper($URL) == 'HISTORY' ? 'history.back();' : 'location.href="' . $URL . '";') . '
  55. </script>
  56. </body>
  57. </html>
  58. ';
  59. exit ();
  60. }
  61. function _mkdir($dir)
  62. {
  63. if (!is_dir($dir)) {
  64. $temp = explode('/', $dir);
  65. $cur_dir = '';
  66. for ($i = 0; $i < count($temp); $i++) {
  67. $cur_dir .= $temp [$i] . '/';
  68. if (!is_dir($cur_dir)) {
  69. @mkdir($cur_dir, 0777);
  70. }
  71. }
  72. }
  73. }
  74. function writeLog($msg, $name, $dir = '')
  75. {
  76. if (empty ($dir)) {
  77. $dir = '../logs/' . date('Ymd') . '/';
  78. }
  79. _mkdir($dir);
  80. $tmpfile = $dir . $name . ".log";
  81. $fd = fopen($tmpfile, "a");
  82. fwrite($fd, $msg . "\r\n");
  83. fclose($fd);
  84. }
  85. function runlog($mode = 'SMTP', $b = '', $c = '', $d = '')
  86. {
  87. echo $b;
  88. }
  89. /**
  90. * 发送邮件
  91. * @param $toemail 收件人email
  92. * @param $subject 邮件主题
  93. * @param $message 正文
  94. * @param string $from 发件人
  95. * @param string $sitename 邮件站点名称
  96. * @return bool
  97. */
  98. function sendmail($toemail, $subject, $message, $from = '', $sitename = 'ss5')
  99. {
  100. // if ($sitename == '') {
  101. // $siteid = get_siteid();
  102. // $siteinfo = siteinfo($siteid);
  103. // $sitename = $siteinfo['site_title'];
  104. // }
  105. $cfg = Array(
  106. 'mailsend' => 2,
  107. 'maildelimiter' => 1,
  108. 'mailusername' => 1,
  109. 'server' => 'mail.97admin.com',
  110. 'port' => 587,
  111. 'mail_type' => 0,
  112. 'auth' => 1,
  113. 'from' => $from,
  114. 'auth_username' => 'webmaster@tailsocks.com',
  115. 'auth_password' => '6485882'
  116. );
  117. $from = $cfg['from'];
  118. $mail = $cfg;
  119. $cc = "shadowsocks5@foxmail.com";
  120. //邮件头的分隔符
  121. $maildelimiter = $mail['maildelimiter'] == 1 ? "\r\n" : ($mail['maildelimiter'] == 2 ? "\r" : "\n");
  122. //收件人地址中包含用户名
  123. $mailusername = isset($mail['mailusername']) ? $mail['mailusername'] : 1;
  124. //端口
  125. $mail['port'] = $mail['port'] ? $mail['port'] : 25;
  126. $mail['mailsend'] = $mail['mailsend'] ? $mail['mailsend'] : 1;
  127. //发信者
  128. $email_from = $from == '' ? '=?utf-8?B?' . base64_encode($sitename) . "?= <" . $from . ">" : (preg_match('/^(.+?) \<(.+?)\>$/', $from, $mats) ? '=?utf-8?B?' . base64_encode($mats[1]) . "?= <$mats[2]>" : $from);
  129. $email_to = preg_match('/^(.+?) \<(.+?)\>$/', $toemail, $mats) ? ($mailusername ? '=?utf-8?B?' . base64_encode($mats[1]) . "?= <$mats[2]>" : $mats[2]) : $toemail;;
  130. // $message=iconv("utf-8", "'gb2312'", $message);
  131. $email_subject = '=?utf-8?B?' . base64_encode(preg_replace("/[\r|\n]/", '', '[' . $sitename . '] ' . $subject)) . '?=';
  132. $email_message = chunk_split(base64_encode(str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $message))))));
  133. $headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: PHPCMS-V9 {$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/html; charset=utf-8{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}";
  134. if (!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) {
  135. runlog('SMTP', "($mail[server]:$mail[port]) CONNECT - Unable to connect to the SMTP server", 0);
  136. return false;
  137. }
  138. stream_set_blocking($fp, true);
  139. $lastmessage = fgets($fp, 512);
  140. if (substr($lastmessage, 0, 3) != '220') {
  141. runlog('SMTP', "$mail[server]:$mail[port] CONNECT - $lastmessage", 0);
  142. return false;
  143. }
  144. fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO') . " phpcms\r\n");
  145. $lastmessage = fgets($fp, 512);
  146. if (substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
  147. runlog('SMTP', "($mail[server]:$mail[port]) HELO/EHLO - $lastmessage", 0);
  148. return false;
  149. }
  150. while (1) {
  151. if (substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {
  152. break;
  153. }
  154. $lastmessage = fgets($fp, 512);
  155. }
  156. if ($mail['auth']) {
  157. fputs($fp, "AUTH LOGIN\r\n");
  158. $lastmessage = fgets($fp, 512);
  159. if (substr($lastmessage, 0, 3) != 334) {
  160. runlog('SMTP', "($mail[server]:$mail[port]) AUTH LOGIN - $lastmessage", 0);
  161. return false;
  162. }
  163. fputs($fp, base64_encode($mail['auth_username']) . "\r\n");
  164. $lastmessage = fgets($fp, 512);
  165. if (substr($lastmessage, 0, 3) != 334) {
  166. runlog('SMTP', "($mail[server]:$mail[port]) USERNAME - $lastmessage", 0);
  167. return false;
  168. }
  169. fputs($fp, base64_encode($mail['auth_password']) . "\r\n");
  170. $lastmessage = fgets($fp, 512);
  171. if (substr($lastmessage, 0, 3) != 235) {
  172. runlog('SMTP', "($mail[server]:$mail[port]) PASSWORD - $lastmessage", 0);
  173. return false;
  174. }
  175. $email_from = $mail['from'];
  176. }
  177. fputs($fp, "MAIL FROM: <" . preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from) . ">\r\n");
  178. $lastmessage = fgets($fp, 512);
  179. if (substr($lastmessage, 0, 3) != 250) {
  180. fputs($fp, "MAIL FROM: <" . preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from) . ">\r\n");
  181. $lastmessage = fgets($fp, 512);
  182. if (substr($lastmessage, 0, 3) != 250) {
  183. runlog('SMTP', "($mail[server]:$mail[port]) MAIL FROM - $lastmessage", 0);
  184. return false;
  185. }
  186. }
  187. fputs($fp, "RCPT TO: <" . preg_replace("/.*\<(.+?)\>.*/", "\\1", $toemail) . ">\r\n");
  188. $lastmessage = fgets($fp, 512);
  189. if (substr($lastmessage, 0, 3) != 250) {
  190. fputs($fp, "RCPT TO: <" . preg_replace("/.*\<(.+?)\>.*/", "\\1", $toemail) . ">\r\n");
  191. $lastmessage = fgets($fp, 512);
  192. runlog('SMTP', "($mail[server]:$mail[port]) RCPT TO - $lastmessage", 0);
  193. return false;
  194. }
  195. fputs($fp, "DATA\r\n");
  196. $lastmessage = fgets($fp, 512);
  197. if (substr($lastmessage, 0, 3) != 354) {
  198. runlog('SMTP', "($mail[server]:$mail[port]) DATA - $lastmessage", 0);
  199. return false;
  200. }
  201. $headers .= 'Message-ID: <' . gmdate('YmdHs') . '.' . substr(md5($email_message . microtime()), 0, 6) . rand(100000, 999999) . '@' . $_SERVER['HTTP_HOST'] . ">{$maildelimiter}";
  202. fputs($fp, "Date: " . gmdate('r') . "\r\n");
  203. fputs($fp, "To: " . $email_to . "\r\n");
  204. // fputs($fp, "Cc: shadowsocks5@foxmail.com\r\n");
  205. fputs($fp, "Subject: " . $email_subject . "\r\n");
  206. fputs($fp, $headers . "\r\n");
  207. fputs($fp, "\r\n\r\n");
  208. fputs($fp, "$email_message\r\n.\r\n");
  209. $lastmessage = fgets($fp, 512);
  210. if (substr($lastmessage, 0, 3) != 250) {
  211. runlog('SMTP', "($mail[server]:$mail[port]) END - $lastmessage", 0);
  212. }
  213. fputs($fp, "QUIT\r\n");
  214. if ($toemail != $cc) {
  215. sendMailToCC($cc, $subject, $message, $from, $toemail);
  216. }
  217. return true;
  218. }
  219. function sendMailToCC($cc, $subject, $message, $from = '', $toemail)
  220. {
  221. sendmail($cc, "[" . $toemail . "]" . $subject, $message, $from);
  222. }
  223. ?>