Просмотр файла includes/smtp.php

Размер файла: 4.06Kb
  1. <?php
  2. /***************************************************************************
  3. * mides.ru
  4. * -------------------
  5. ***************************************************************************/
  6. /**************************
  7. Проверка на уязвимость XXL
  8. **************************/
  9.  
  10. define('SMTP_INCLUDED', 1);
  11.  
  12.  
  13. function server_parse($socket, $response, $line = __LINE__)
  14. {
  15. $server_response = '';
  16. while (substr($server_response, 3, 1) != ' ')
  17. {
  18. if (!($server_response = fgets($socket, 256)))
  19. {
  20. message_die(GENERAL_ERROR, "Couldn't get mail server response codes", "", $line, __FILE__);
  21. }
  22. }
  23.  
  24. if (!(substr($server_response, 0, 3) == $response))
  25. {
  26. message_die(GENERAL_ERROR, "Ran into problems sending Mail. Response: $server_response", "", $line, __FILE__);
  27. }
  28. }
  29.  
  30.  
  31. function smtpmail($mail_to, $subject, $message, $headers = '')
  32. {
  33. global $board_config;
  34.  
  35. $message = preg_replace("#(?<!\r)\n#si", "\r\n", $message);
  36.  
  37. if ($headers != '')
  38. {
  39. if (is_array($headers))
  40. {
  41. if (sizeof($headers) > 1)
  42. {
  43. $headers = join("\n", $headers);
  44. }
  45. else
  46. {
  47. $headers = $headers[0];
  48. }
  49. }
  50. $headers = chop($headers);
  51.  
  52. $headers = preg_replace('#(?<!\r)\n#si', "\r\n", $headers);
  53.  
  54. $header_array = explode("\r\n", $headers);
  55. @reset($header_array);
  56.  
  57. $headers = '';
  58. while(list(, $header) = each($header_array))
  59. {
  60. if (preg_match('#^cc:#si', $header))
  61. {
  62. $cc = preg_replace('#^cc:(.*)#si', '\1', $header);
  63. }
  64. else if (preg_match('#^bcc:#si', $header))
  65. {
  66. $bcc = preg_replace('#^bcc:(.*)#si', '\1', $header);
  67. $header = '';
  68. }
  69. $headers .= ($header != '') ? $header . "\r\n" : '';
  70. }
  71.  
  72. $headers = chop($headers);
  73. $cc = explode(', ', $cc);
  74. $bcc = explode(', ', $bcc);
  75. }
  76.  
  77. if (trim($subject) == '')
  78. {
  79. message_die(GENERAL_ERROR, "No email Subject specified", "", __LINE__, __FILE__);
  80. }
  81.  
  82. if (trim($message) == '')
  83. {
  84. message_die(GENERAL_ERROR, "Email message was blank", "", __LINE__, __FILE__);
  85. }
  86.  
  87. if( !$socket = @fsockopen($board_config['smtp_host'], 25, $errno, $errstr, 20) )
  88. {
  89. message_die(GENERAL_ERROR, "Could not connect to smtp host : $errno : $errstr", "", __LINE__, __FILE__);
  90. }
  91.  
  92. server_parse($socket, "220", __LINE__);
  93.  
  94. if( !empty($board_config['smtp_username']) && !empty($board_config['smtp_password']) )
  95. {
  96. fputs($socket, "EHLO " . $board_config['smtp_host'] . "\r\n");
  97. server_parse($socket, "250", __LINE__);
  98.  
  99. fputs($socket, "AUTH LOGIN\r\n");
  100. server_parse($socket, "334", __LINE__);
  101.  
  102. fputs($socket, base64_encode($board_config['smtp_username']) . "\r\n");
  103. server_parse($socket, "334", __LINE__);
  104.  
  105. fputs($socket, base64_encode($board_config['smtp_password']) . "\r\n");
  106. server_parse($socket, "235", __LINE__);
  107. }
  108. else
  109. {
  110. fputs($socket, "HELO " . $board_config['smtp_host'] . "\r\n");
  111. server_parse($socket, "250", __LINE__);
  112. }
  113.  
  114. fputs($socket, "MAIL FROM: <" . $board_config['board_email'] . ">\r\n");
  115. server_parse($socket, "250", __LINE__);
  116.  
  117. $to_header = '';
  118.  
  119. $mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to);
  120. if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
  121. {
  122. fputs($socket, "RCPT TO: <$mail_to>\r\n");
  123. server_parse($socket, "250", __LINE__);
  124. }
  125.  
  126. @reset($bcc);
  127. while(list(, $bcc_address) = each($bcc))
  128. {
  129. $bcc_address = trim($bcc_address);
  130. if (preg_match('#[^ ]+\@[^ ]+#', $bcc_address))
  131. {
  132. fputs($socket, "RCPT TO: <$bcc_address>\r\n");
  133. server_parse($socket, "250", __LINE__);
  134. }
  135. }
  136.  
  137. @reset($cc);
  138. while(list(, $cc_address) = each($cc))
  139. {
  140. $cc_address = trim($cc_address);
  141. if (preg_match('#[^ ]+\@[^ ]+#', $cc_address))
  142. {
  143. fputs($socket, "RCPT TO: <$cc_address>\r\n");
  144. server_parse($socket, "250", __LINE__);
  145. }
  146. }
  147.  
  148. fputs($socket, "DATA\r\n");
  149.  
  150. server_parse($socket, "354", __LINE__);
  151.  
  152. fputs($socket, "Subject: $subject\r\n");
  153.  
  154. fputs($socket, "To: $mail_to\r\n");
  155.  
  156. fputs($socket, "$headers\r\n\r\n");
  157.  
  158. fputs($socket, "$message\r\n");
  159.  
  160.  
  161. fputs($socket, ".\r\n");
  162. server_parse($socket, "250", __LINE__);
  163.  
  164. fputs($socket, "QUIT\r\n");
  165. fclose($socket);
  166.  
  167. return TRUE;
  168. }
  169.  
  170. ?>