common.php 8.3 KB

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