mailbox.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?
  2. /**
  3. ** mailbox.php
  4. **
  5. ** This contains functions that request information about a mailbox. Including
  6. ** reading and parsing headers, getting folder information, etc.
  7. **
  8. **/
  9. function selectMailbox($imapConnection, $mailbox, &$numberOfMessages) {
  10. // select mailbox
  11. fputs($imapConnection, "mailboxSelect SELECT \"$mailbox\"\n");
  12. $read = fgets($imapConnection, 1024);
  13. while ((substr($read, 0, 16) != "mailboxSelect OK") && (substr($read, 0, 17) != "mailboxSelect BAD")) {
  14. if (substr(Chop($read), -6) == "EXISTS") {
  15. $array = explode(" ", $read);
  16. $numberOfMessages = $array[1];
  17. }
  18. $read = fgets($imapConnection, 1024);
  19. }
  20. }
  21. function getMessageHeaders($imapConnection, $i, &$from, &$subject, &$date) {
  22. fputs($imapConnection, "messageFetch FETCH $i:$i RFC822.HEADER.LINES (From Subject Date)\n");
  23. $read = fgets($imapConnection, 1024);
  24. /* I have to replace <> with [] because HTML uses <> as tags, thus not printing what's in <> */
  25. $read = ereg_replace("<", "[", $read);
  26. $read = ereg_replace(">", "]", $read);
  27. while ((substr($read, 0, 15) != "messageFetch OK") && (substr($read, 0, 16) != "messageFetch BAD")) {
  28. if (substr($read, 0, 5) == "From:") {
  29. $read = ereg_replace("<", "EMAILSTART--", $read);
  30. $read = ereg_replace(">", "--EMAILEND", $read);
  31. $from = substr($read, 5, strlen($read) - 6);
  32. }
  33. else if (substr($read, 0, 5) == "Date:") {
  34. $read = ereg_replace("<", "[", $read);
  35. $read = ereg_replace(">", "]", $read);
  36. $date = substr($read, 5, strlen($read) - 6);
  37. }
  38. else if (substr($read, 0, 8) == "Subject:") {
  39. $read = ereg_replace("<", "[", $read);
  40. $read = ereg_replace(">", "]", $read);
  41. $subject = substr($read, 8, strlen($read) - 9);
  42. }
  43. $read = fgets($imapConnection, 1024);
  44. }
  45. }
  46. function setMessageFlag($imapConnection, $i, $q, $flag) {
  47. fputs($imapConnection, "messageStore STORE $i:$q +FLAGS (\\$flag)\n");
  48. }
  49. function getMessageFlags($imapConnection, $i, &$flags) {
  50. /** * 2 FETCH (FLAGS (\Answered \Seen)) */
  51. fputs($imapConnection, "messageFetch FETCH $i:$i FLAGS\n");
  52. $read = fgets($imapConnection, 1024);
  53. while ((substr($read, 0, 15) != "messageFetch OK") && (substr($read, 0, 16) != "messageFetch BAD")) {
  54. if (strpos($read, "FLAGS")) {
  55. $read = ereg_replace("\(", "", $read);
  56. $read = ereg_replace("\)", "", $read);
  57. $read = substr($read, strpos($read, "FLAGS")+6, strlen($read));
  58. $read = trim($read);
  59. $flags = explode(" ", $read);;
  60. $s = 0;
  61. while ($s < count($flags)) {
  62. $flags[$s] = substr($flags[$s], 1, strlen($flags[$s]));
  63. $s++;
  64. }
  65. } else {
  66. $flags[0] = "None";
  67. }
  68. $read = fgets($imapConnection, 1024);
  69. }
  70. }
  71. function getEmailAddr($sender) {
  72. if (strpos($sender, "EMAILSTART--") == false)
  73. return "";
  74. $start = strpos($sender, "EMAILSTART--");
  75. $emailAddr = substr($sender, $start, strlen($sender));
  76. return $emailAddr;
  77. }
  78. function getSender($sender) {
  79. if (strpos($sender, "EMAILSTART--") == false)
  80. return "";
  81. $first = substr($sender, 0, strpos($sender, "EMAILSTART--"));
  82. $second = substr($sender, strpos($sender, "--EMAILEND") +10, strlen($sender));
  83. return "$first$second";
  84. }
  85. function getSenderName($sender) {
  86. $name = getSender($sender);
  87. $emailAddr = getEmailAddr($sender);
  88. $emailStart = strpos($emailAddr, "EMAILSTART--");
  89. $emailEnd = strpos($emailAddr, "--EMAILEND") - 10;
  90. if (($emailAddr == "") && ($name == "")) {
  91. $from = $sender;
  92. }
  93. else if ((strstr($name, "?") != false) || (strstr($name, "$") != false) || (strstr($name, "%") != false)){
  94. $emailAddr = ereg_replace("EMAILSTART--", "", $emailAddr);
  95. $emailAddr = ereg_replace("--EMAILEND", "", $emailAddr);
  96. $from = $emailAddr;
  97. }
  98. else if (strlen($name) > 0) {
  99. $from = $name;
  100. }
  101. else if (strlen($emailAddr > 0)) {
  102. $emailAddr = ereg_replace("EMAILSTART--", "", $emailAddr);
  103. $emailAddr = ereg_replace("--EMAILEND", "", $emailAddr);
  104. $from = $emailAddr;
  105. }
  106. $from = trim($from);
  107. // strip out any quotes if they exist
  108. if ((strlen($from) > 0) && ($from[0] == "\"") && ($from[strlen($from) - 1] == "\""))
  109. $from = substr($from, 1, strlen($from) - 2);
  110. return $from;
  111. }
  112. /** returns "true" if the copy was completed successfully.
  113. ** returns "false" with an error message if unsuccessful.
  114. **/
  115. function copyMessages($imapConnection, $from_id, $to_id, $folder) {
  116. fputs($imapConnection, "mailboxStore COPY $from_id:$to_id \"$folder\"\n");
  117. $read = fgets($imapConnection, 1024);
  118. while ((substr($read, 0, 15) != "mailboxStore OK") && (substr($read, 0, 15) != "mailboxStore NO")) {
  119. $read = fgets($imapConnection, 1024);
  120. }
  121. if (substr($read, 0, 15) == "mailboxStore NO") {
  122. echo "ERROR... $read<BR>";
  123. return false;
  124. } else if (substr($read, 0, 15) == "mailboxStore OK") {
  125. return true;
  126. }
  127. echo "UNKNOWN ERROR copying messages $from_id to $to_id to folder $folder.<BR>";
  128. return false;
  129. }
  130. /** expunges a mailbox **/
  131. function expungeBox($imapConnection, $mailbox) {
  132. selectMailbox($imapConnection, $mailbox, $num);
  133. fputs($imapConnection, "1 EXPUNGE\n");
  134. }
  135. ?>