return.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:5k
源码类别:

电子政务应用

开发平台:

Java

  1. #!/usr/bin/php -q
  2. <?php
  3. // +-------------------------------------------------------------+
  4. // | DeskPRO v [2.0.1 Production]
  5. // | Copyright (C) 2001 - 2004 Headstart Solutions Limited
  6. // | Supplied by WTN-WDYL
  7. // | Nullified by WTN-WDYL
  8. // | Distribution via WebForum, ForumRU and associated file dumps
  9. // +-------------------------------------------------------------+
  10. // | DESKPRO IS NOT FREE SOFTWARE
  11. // +-------------------------------------------------------------+
  12. // | License ID : Full Enterprise License =) ...
  13. // | License Owner : WTN-WDYL Team
  14. // +-------------------------------------------------------------+
  15. // | $RCSfile: return.php,v $
  16. // | $Date: 2004/02/11 20:32:13 $
  17. // | $Revision: 1.24 $
  18. // +-------------------------------------------------------------+
  19. // | File Details:
  20. // | - process() provider for returned (bounced) e-mails.
  21. // +-------------------------------------------------------------+
  22. error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
  23. //////////////////// PART 1 INCLUDES ////////////////////
  24. define('RETURNPOP', 1);
  25. include("mail_config.php");
  26. include(INCLUDE_PATH . 'functions/admin-tech_functions.php');
  27. include("mail.php");
  28. ###################### FUNCTION PROCESS() #######################
  29. /* Deals with incoming bounce messages.
  30. $message: the email after it has been decoded (array of elements)
  31. $source : the source of the email
  32. $gateway: gateway info (optional)
  33. This is very simple; no errors are logged and such mails will be
  34. silently ignored.
  35. */
  36. function process(&$message, &$source, $gateway = NULL) {
  37. global $db, $settings, $template_cache, $output, $sourceid;
  38. // rename a few variables for ease of access
  39. $email['from'] = trim($message->fromEmail);
  40. $headers = $message->headers;
  41. $subject = $headers['subject'];
  42. //////////////////////////////////////////////////////////////
  43. /* 1. STANDARD PROCESSING */
  44. //////////////////////////////////////////////////////////////
  45. // no valid return email (decoding functions look at various mail headers)
  46. if (!$email['from']) {
  47. return true;
  48. }
  49. if (!(validate_email($email['from']))) {
  50. return true;
  51. }
  52. // we don't want to autorespond to another DeskPRO
  53. if (in_string('DeskPRO', $headers['X-Mailer'])) {
  54. return true;
  55. }
  56. // Handle e-mail bans. First, if this sender is banned, reject it.
  57. if (banned_email(strtolower($email['from']), $banned_emails)) {
  58. return true;
  59. }
  60. // Next, if the sender is ourselves, ignore the message (because that's
  61. // a common spam trick and we'll never be mailing ourselves anyway)
  62. if (strtolower($settings[email_from]) == strtolower($email['from'])) {
  63. return true;
  64. }
  65. // check for text
  66. if ($message->text) {
  67. $body = $message->text;
  68. } elseif ($message->html) {
  69. $body = strip_tags($message->html);
  70. $strip_tags = 1;
  71. } else {
  72. return true;
  73. }
  74. if (trim($body) == '') {
  75. return true;
  76. }
  77. /*
  78. Check to see if the email is a reply (check subject + footer)
  79. i) subject line AAAA-0000-AAAA
  80. ii) code at the bottom of the email
  81. <=== Ticket Ref AAAA-0000-AAAA ===>
  82. */
  83. // subject check
  84. if (ereg("[([0-9]{4}-[A-Za-z]{4}-[0-9]{4})]", $subject, $arr)) {
  85. $ticketref = $arr[1];
  86. // footer check
  87. } elseif (ereg("<=== ([0-9]{4}-[A-Za-z]{4}-[0-9]{4}) ===>", $body, $arr)) {
  88. $ticketref = $arr[1];
  89. } else {
  90. return true;
  91. }
  92. // Get ticket information and check if it is valid
  93. $ticket = $db->query_return("
  94. SELECT 
  95. ticket.*, ticket_pri.id AS priority_id, ticket_pri.name AS priority_name, 
  96. ticket_cat.id AS category_id, ticket_cat.name AS category_name, 
  97. tech.id AS tech_id, tech.email AS tech_email
  98. FROM ticket
  99. LEFT JOIN ticket_pri ON (ticket.priority = ticket_pri.id)
  100. LEFT JOIN ticket_cat ON (ticket.category = ticket_cat.id)
  101. LEFT JOIN tech ON (ticket.tech = tech.id)
  102. WHERE ref = '$ticketref'
  103. ");
  104. if (!$db->num_rows()) {
  105. return true;
  106. }
  107. //////////////////////////////////////////////////////////////
  108. /* 4. PROCESS / ERROR CHECKING */
  109. //////////////////////////////////////////////////////////////
  110. /* check someone istn't just spamming the return-path email */
  111. // 1 hour
  112. $auto_time = mktime() - (3600 * 1);
  113. $result = $db->query_return(
  114. "SELECT COUNT(*) AS total FROM ticket_message
  115. WHERE ticketid = '$ticket[id]'
  116. AND date > $auto_time
  117. AND date > $ticket[date_lastreply_tech]
  118. ");
  119. // we have reached the max replies to tickets, generate error and stop processing
  120. if ($settings['max_reply']) {
  121. if ($result[total] > $settings['max_reply]']) {
  122. return true;
  123. }
  124. }
  125. //////////////////////////////////////////////////////////////
  126. /* 7. ADD REPLY TO TICKET */
  127. //////////////////////////////////////////////////////////////
  128. // insert the full email
  129. $sourceid = store_mail($headers, $source);
  130. $db->query("
  131. INSERT into ticket_message SET
  132. message = 'Mail returned; message follows:n" . mysql_escape_string($body) . "',
  133. ticketid = '$ticket[id]',
  134. striptags = '0',
  135. date = '" . mktime() . "',
  136. techid = '0',
  137. userid = '0'
  138. ");
  139. return true;
  140. }
  141. ?>