Changeset 1478 in subversion for trunk/roundcubemail/program/lib/imap.inc
- Timestamp:
- Jun 5, 2008 1:26:52 PM (5 years ago)
- File:
-
- 1 edited
-
trunk/roundcubemail/program/lib/imap.inc (modified) (116 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/roundcubemail/program/lib/imap.inc
r1477 r1478 61 61 - fixed iil_C_FetchStructureString() to handle many literal strings in response 62 62 - removed hardcoded data size in iil_ReadLine() 63 - added iil_PutLine() wrapper for fputs() 64 - code cleanup and identation fixes 63 65 64 66 ********************************************************/ … … 160 162 } 161 163 162 163 164 function iil_xor($string, $string2) { 164 $result = ''; 165 $size = strlen($string); 166 for ($i=0; $i<$size; $i++) { 167 $result .= chr(ord($string[$i]) ^ ord($string2[$i])); 168 } 169 return $result; 165 $result = ''; 166 $size = strlen($string); 167 for ($i=0; $i<$size; $i++) { 168 $result .= chr(ord($string[$i]) ^ ord($string2[$i])); 169 } 170 return $result; 171 } 172 173 function iil_PutLine($fp, $string, $endln=true) { 174 // console('C: '. $string); 175 return fputs($fp, $string . ($endln ? "\r\n" : '')); 170 176 } 171 177 172 178 function iil_ReadLine($fp, $size) { 173 $line = ''; 174 if (!$fp) { 175 return $line; 176 } 177 178 if (!$size) { 179 $size = 1024; 180 } 181 182 do { 183 $buffer = fgets($fp, $size); 184 if ($buffer === false) { 185 break; 186 } 187 $line .= $buffer; 188 } while ($buffer[strlen($buffer)-1] != "\n"); 189 return $line; 179 $line = ''; 180 181 if (!$fp) { 182 return $line; 183 } 184 185 if (!$size) { 186 $size = 1024; 187 } 188 189 do { 190 $buffer = fgets($fp, $size); 191 if ($buffer === false) { 192 break; 193 } 194 // console('S: '. chop($buffer)); 195 $line .= $buffer; 196 } while ($buffer[strlen($buffer)-1] != "\n"); 197 198 return $line; 190 199 } 191 200 … … 198 207 $bytes = $a[2][0]; 199 208 while (strlen($out) < $bytes) { 200 $line = iil_ReadBytes($fp, $bytes);201 $out .= $line;209 $line = iil_ReadBytes($fp, $bytes); 210 $out .= $line; 202 211 } 203 212 $line = $a[1][0] . "\"$out\""; 213 // console('[...] '. $out); 204 214 } 205 215 return $line; … … 207 217 208 218 function iil_ReadBytes($fp, $bytes) { 209 $data = ''; 210 $len = 0; 211 do { 212 $data .= fread($fp, $bytes-$len); 213 if ($len == strlen($data)) { 214 break; //nothing was read -> exit to avoid apache lockups 215 } 216 $len = strlen($data); 217 } while ($len < $bytes); 218 return $data; 219 $data = ''; 220 $len = 0; 221 do { 222 $data .= fread($fp, $bytes-$len); 223 if ($len == strlen($data)) { 224 break; //nothing was read -> exit to avoid apache lockups 225 } 226 $len = strlen($data); 227 } while ($len < $bytes); 228 229 return $data; 219 230 } 220 231 … … 231 242 if (count($a) > 2) { 232 243 if (strcasecmp($a[1], 'OK') == 0) { 233 return 0;244 return 0; 234 245 } else if (strcasecmp($a[1], 'NO') == 0) { 235 return -1;246 return -1; 236 247 } else if (strcasecmp($a[1], 'BAD') == 0) { 237 return -2;238 }239 } 240 return -3;248 return -2; 249 } 250 } 251 return -3; 241 252 } 242 253 … … 245 256 $len = strlen($match); 246 257 if ($len == 0) { 247 return false;248 }258 return false; 259 } 249 260 if (strncmp($string, $match, $len) == 0) { 250 return true;251 }261 return true; 262 } 252 263 return false; 253 264 } … … 256 267 $len = strlen($match); 257 268 if ($len == 0) { 258 return false;259 }269 return false; 270 } 260 271 if (strncasecmp($string, $match, $len) == 0) { 261 return true;262 }272 return true; 273 } 263 274 return false; 264 275 } 265 266 276 267 277 function iil_Escape($string) 268 278 { 269 return strtr($string, array('"'=>'\\"', '\\' => '\\\\'));279 return strtr($string, array('"'=>'\\"', '\\' => '\\\\')); 270 280 } 271 281 … … 280 290 $opad .= chr(0x5C); 281 291 } 292 282 293 // pad $pass so it's 64 bytes 283 294 $padLen = 64 - strlen($pass); … … 295 306 296 307 // send result, get reply 297 fputs($conn->fp, $reply . "\r\n");308 iil_PutLine($conn->fp, $reply); 298 309 $line = iil_ReadLine($conn->fp, 1024); 299 310 … … 312 323 function iil_C_Login(&$conn, $user, $password) { 313 324 314 fputs($conn->fp, 'a001 LOGIN "'.iil_Escape($user).'" "'.iil_Escape($password)."\"\r\n");325 iil_PutLine($conn->fp, 'a001 LOGIN "'.iil_Escape($user).'" "'.iil_Escape($password).'"'); 315 326 316 327 do { … … 340 351 if (!$l) { 341 352 $str = str_replace('NIL', '()', $str); 342 }353 } 343 354 if (!$len) { 344 355 $len = strlen($str); 345 }356 } 346 357 $data = array(); 347 358 $in_quotes = false; … … 354 365 $elem++; 355 366 } else if ($c == ')' && !$in_quotes) { 356 return $data;357 } else if ($c == '\\') {367 return $data; 368 } else if ($c == '\\') { 358 369 $i++; 359 370 if ($in_quotes) { 360 $data[$elem] .= $c.$str[$i];361 }371 $data[$elem] .= $c.$str[$i]; 372 } 362 373 } else if ($c == '"') { 363 374 $in_quotes = !$in_quotes; 364 375 if (!$in_quotes) { 365 $elem++;366 }376 $elem++; 377 } 367 378 } else if ($in_quotes) { 368 379 $data[$elem].=$c; … … 383 394 } 384 395 385 fputs($conn->fp, "ns1 NAMESPACE\r\n");396 iil_PutLine($conn->fp, "ns1 NAMESPACE"); 386 397 do { 387 398 $line = iil_ReadLine($conn->fp, 1024); … … 411 422 412 423 return true; 413 414 424 } 415 425 416 426 function iil_Connect($host, $user, $password) { 417 global $iil_error, $iil_errornum;427 global $iil_error, $iil_errornum; 418 428 global $ICL_SSL, $ICL_PORT; 419 429 global $IMAP_NO_CACHE; … … 432 442 $auth_array = func_get_arg(3); 433 443 if (is_array($auth_array)) { 434 $auth_method = $auth_array['imap'];435 }444 $auth_method = $auth_array['imap']; 445 } 436 446 if (empty($auth_method)) { 437 $auth_method = "plain";438 }447 $auth_method = "plain"; 448 } 439 449 } 440 450 $message = "INITIAL: $auth_method\n"; … … 454 464 455 465 if ($my_prefs['sort_field'] == 'INTERNALDATE') { 456 $IMAP_USE_INTERNAL_DATE = true;457 } else if ($my_prefs['sort_field'] == 'DATE') {458 $IMAP_USE_INTERNAL_DATE = false;459 }466 $IMAP_USE_INTERNAL_DATE = true; 467 } else if ($my_prefs['sort_field'] == 'DATE') { 468 $IMAP_USE_INTERNAL_DATE = false; 469 } 460 470 //echo '<!-- conn sort_field: '.$my_prefs['sort_field'].' //-->'; 461 471 462 472 //check input 463 473 if (empty($host)) { 464 $iil_error .= "Invalid host\n";465 }474 $iil_error .= "Invalid host\n"; 475 } 466 476 if (empty($user)) { 467 $iil_error .= "Invalid user\n";468 }477 $iil_error .= "Invalid user\n"; 478 } 469 479 if (empty($password)) { 470 $iil_error .= "Invalid password\n";471 }480 $iil_error .= "Invalid password\n"; 481 } 472 482 if (!empty($iil_error)) { 473 return false;474 }483 return false; 484 } 475 485 if (!$ICL_PORT) { 476 $ICL_PORT = 143;486 $ICL_PORT = 143; 477 487 } 478 488 … … 485 495 $conn->fp = fsockopen($host, $ICL_PORT, $errno, $errstr, 10); 486 496 if (!$conn->fp) { 487 $iil_error= "Could not connect to $host at port $ICL_PORT: $errstr";488 $iil_errornum = -1;497 $iil_error = "Could not connect to $host at port $ICL_PORT: $errstr"; 498 $iil_errornum = -1; 489 499 return false; 490 500 } … … 498 508 // $conn->capability = explode(' ', $matches[1]); 499 509 // } else { 500 fputs($conn->fp, "cp01 CAPABILITY\r\n");510 iil_PutLine($conn->fp, "cp01 CAPABILITY"); 501 511 do { 502 $line = trim(iil_ReadLine($conn->fp, 10 0));512 $line = trim(iil_ReadLine($conn->fp, 1024)); 503 513 504 514 $conn->message .= "$line\n"; … … 533 543 534 544 //do CRAM-MD5 authentication 535 fputs($conn->fp, "a000 AUTHENTICATE CRAM-MD5\r\n");545 iil_PutLine($conn->fp, "a000 AUTHENTICATE CRAM-MD5"); 536 546 $line = trim(iil_ReadLine($conn->fp, 1024)); 537 547 … … 547 557 } else { 548 558 $conn->message .='No challenge ('.htmlspecialchars($line)."), try plain\n"; 549 550 $auth = 'plain'; 559 $auth = 'plain'; 551 560 } 552 561 } … … 572 581 function iil_Close(&$conn) { 573 582 iil_C_WriteCache($conn); 574 if ( fputs($conn->fp, "I LOGOUT\r\n")) {583 if (iil_PutLine($conn->fp, "I LOGOUT")) { 575 584 fgets($conn->fp, 1024); 576 585 fclose($conn->fp); … … 581 590 function iil_ClearCache($user, $host) { 582 591 } 583 584 592 585 593 function iil_C_WriteCache(&$conn) { … … 621 629 622 630 if (!$conn->do_cache) { 623 return; //caching disabled624 } 625 if (!is_array($conn->cache[$folder])) {626 return; //cache not initialized|empty627 } 628 if (count($conn->cache[$folder]) == 0) {629 return; //cache not initialized|empty630 }631 return; //caching disabled 632 } 633 if (!is_array($conn->cache[$folder])) { 634 return; //cache not initialized|empty 635 } 636 if (count($conn->cache[$folder]) == 0) { 637 return; //cache not initialized|empty 638 } 631 639 632 640 $uids = iil_C_FetchHeaderIndex($conn, $folder, $message_set, 'UID'); … … 665 673 if (($key % 2) == 1) { 666 674 $quotes[$key] = str_replace($delimiter, "_!@!_", $quotes[$key]); 667 }668 }675 } 676 } 669 677 $string=implode('"', $quotes); 670 678 … … 679 687 function iil_CheckForRecent($host, $user, $password, $mailbox) { 680 688 if (empty($mailbox)) { 681 $mailbox = 'INBOX';689 $mailbox = 'INBOX'; 682 690 } 683 691 … … 685 693 $fp = $conn->fp; 686 694 if ($fp) { 687 fputs($fp, "a002 EXAMINE \"".iil_Escape($mailbox)."\"\r\n");695 iil_PutLine($fp, "a002 EXAMINE \"".iil_Escape($mailbox)."\""); 688 696 do { 689 697 $line=chop(iil_ReadLine($fp, 300)); … … 694 702 } while (!iil_StartsWith($a[0], 'a002')); 695 703 696 fputs($fp, "a003 LOGOUT\r\n");704 iil_PutLine($fp, "a003 LOGOUT"); 697 705 fclose($fp); 698 706 } else { … … 704 712 705 713 function iil_C_Select(&$conn, $mailbox) { 706 $fp = $conn->fp; 707 714 708 715 if (empty($mailbox)) { 709 return false;710 } 711 if (strcmp($conn->selected, $mailbox) == 0) {712 return true;716 return false; 717 } 718 if (strcmp($conn->selected, $mailbox) == 0) { 719 return true; 713 720 } 714 721 715 722 iil_C_LoadCache($conn, $mailbox); 716 723 717 if ( fputs($fp, "sel1 SELECT \"".iil_Escape($mailbox)."\"\r\n")) {724 if (iil_PutLine($conn->fp, "sel1 SELECT \"".iil_Escape($mailbox).'"')) { 718 725 do { 719 $line =chop(iil_ReadLine($fp, 300));720 $a =explode(' ', $line);726 $line = chop(iil_ReadLine($conn->fp, 300)); 727 $a = explode(' ', $line); 721 728 if (count($a) == 3) { 722 729 if (strcasecmp($a[2], 'EXISTS') == 0) { 723 $conn->exists = (int) $a[1];730 $conn->exists = (int) $a[1]; 724 731 } 725 if (strcasecmp($a[2], 'RECENT') == 0) {726 $conn->recent = (int) $a[1];727 }732 if (strcasecmp($a[2], 'RECENT') == 0) { 733 $conn->recent = (int) $a[1]; 734 } 728 735 } 729 736 } while (!iil_StartsWith($line, 'sel1')); 730 737 731 $a =explode(' ', $line);738 $a = explode(' ', $line); 732 739 733 740 if (strcasecmp($a[1], 'OK') == 0) { … … 736 743 } 737 744 } 738 return false;745 return false; 739 746 } 740 747 741 748 function iil_C_CheckForRecent(&$conn, $mailbox) { 742 749 if (empty($mailbox)) { 743 $mailbox = 'INBOX';750 $mailbox = 'INBOX'; 744 751 } 745 752 746 753 iil_C_Select($conn, $mailbox); 747 754 if ($conn->selected == $mailbox) { 748 return $conn->recent;749 } 750 return false;755 return $conn->recent; 756 } 757 return false; 751 758 } 752 759 … … 755 762 $conn->selected= ''; 756 763 } 764 757 765 iil_C_Select($conn, $mailbox); 758 766 if ($conn->selected == $mailbox) { … … 769 777 return $res; 770 778 } 771 return $string;779 return $string; 772 780 } 773 781 774 782 function iil_StrToTime($str) { 775 783 $IMAP_MONTHS = $GLOBALS['IMAP_MONTHS']; 776 $IMAP_SERVER_TZ = $GLOBALS['IMAP_SERVER_TR'];784 $IMAP_SERVER_TZ = $GLOBALS['IMAP_SERVER_TR']; 777 785 778 786 if ($str) { 779 $time1 = strtotime($str);780 }787 $time1 = strtotime($str); 788 } 781 789 if ($time1 && $time1 != -1) { 782 790 return $time1-$IMAP_SERVER_TZ; … … 792 800 if (!is_numeric(substr($str, 0, $pos))) { 793 801 $str = substr($str, $pos+1); 794 }802 } 795 803 //explode, take good parts 796 804 $a = explode(' ', $str); … … 823 831 if ($field == 'INTERNALDATE') { 824 832 $field = 'ARRIVAL'; 825 } 833 } 834 826 835 $fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1, 827 836 'FROM' => 1, 'SIZE' => 1, 'SUBJECT' => 1, 'TO' => 1); … … 835 844 if (!empty($add)) { 836 845 $add = " $add"; 837 }846 } 838 847 839 848 $fp = $conn->fp; 840 849 $command = 's ' . $is_uid . 'SORT (' . $field . ') '; 841 $command .= $encoding . ' ALL' . "$add\r\n";850 $command .= $encoding . ' ALL' . $add; 842 851 $line = $data = ''; 843 852 844 if (! fputs($fp, $command)) {853 if (!iil_PutLine($fp, $command)) { 845 854 return false; 846 855 } … … 848 857 $line = chop(iil_ReadLine($fp, 1024)); 849 858 if (iil_StartsWith($line, '* SORT')) { 850 $data .= ($data?' ':'') . substr($line, 7);851 }859 $data .= ($data?' ':'') . substr($line, 7); 860 } 852 861 } while ($line[0]!='s'); 853 862 … … 871 880 if (empty($index_field)) { 872 881 $index_field = 'DATE'; 873 }882 } 874 883 $index_field = strtoupper($index_field); 875 884 876 885 list($from_idx, $to_idx) = explode(':', $message_set); 877 886 if (empty($message_set) || (isset($to_idx) 878 && (int)$from_idx > (int)$to_idx)) {887 && (int)$from_idx > (int)$to_idx)) { 879 888 return false; 880 }889 } 881 890 882 891 //$fields_a['DATE'] = ($IMAP_USE_INTERNAL_DATE?6:1); … … 902 911 if (!iil_C_Select($conn, $mailbox)) { 903 912 return false; 904 }913 } 905 914 906 915 /* FETCH date,from,subject headers */ 907 916 if ($mode == 1) { 908 917 $key = 'fhi' . ($c++); 909 $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)]) \r\n";910 if (! fputs($fp, $request)) {918 $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])"; 919 if (!iil_PutLine($fp, $request)) { 911 920 return false; 912 }921 } 913 922 do { 914 923 … … 916 925 $a=explode(' ', $line); 917 926 if (($line[0] == '*') && ($a[2] == 'FETCH') 918 && ($line[strlen($line)-1] != ')')) {927 && ($line[strlen($line)-1] != ')')) { 919 928 $id=$a[1]; 920 929 … … 935 944 if ($normalize) { 936 945 $result[$id] = strtoupper($result[$id]); 937 }946 } 938 947 } 939 948 $str=$line; … … 955 964 956 965 if ($received>$bytes) { 957 break;966 break; 958 967 } else if (!$line) { 959 continue;968 continue; 960 969 } 961 970 … … 966 975 } else if ($index_field != 'DATE') { 967 976 $result[$id]=strtoupper(str_replace('"', '', $string)); 968 }977 } 969 978 } while ($line[0] != ')'); 970 979 }Â else { … … 977 986 978 987 $key = 'fhi' . ($c++); 979 $request = $key . " FETCH $message_set (INTERNALDATE) \r\n";980 if (! fputs($fp, $request)) {988 $request = $key . " FETCH $message_set (INTERNALDATE)"; 989 if (!iil_PutLine($fp, $request)) { 981 990 return false; 982 }991 } 983 992 do { 984 993 $line=chop(iil_ReadLine($fp, 200)); … … 1011 1020 } else { 1012 1021 $field_name = $index_field; 1013 }1022 } 1014 1023 1015 1024 /* FETCH uid, size, flags */ 1016 1025 $key = 'fhi' .($c++); 1017 $request = $key . " FETCH $message_set ($field_name) \r\n";1018 1019 if (! fputs($fp, $request)) {1026 $request = $key . " FETCH $message_set ($field_name)"; 1027 1028 if (!iil_PutLine($fp, $request)) { 1020 1029 return false; 1021 }1030 } 1022 1031 do { 1023 1032 $line=chop(iil_ReadLine($fp, 200)); … … 1033 1042 continue; //if we already got the data, skip forward 1034 1043 } 1035 if ($a[3]!=$field_name) {1036 continue; //make sure it's returning what we requested1037 }1044 if ($a[3]!=$field_name) { 1045 continue; //make sure it's returning what we requested 1046 } 1038 1047 1039 1048 /* Caution, bad assumptions, next several lines */ … … 1057 1066 if (count($result) < $should_have) { 1058 1067 for ($i=$start_mid; $i<=$end_mid; $i++) { 1059 if (!isset($result[$i])) {1060 $result[$i] = '';1061 }1062 }1068 if (!isset($result[$i])) { 1069 $result[$i] = ''; 1070 } 1071 } 1063 1072 } 1064 1073 } … … 1095 1104 $result[] = $start . ':' . $prev; //push sequence as start_id:end_id 1096 1105 } 1097 $start = $id;//start of new sequence1106 $start = $id; //start of new sequence 1098 1107 } 1099 1108 $prev = $id; 1100 1109 } 1110 1101 1111 //handle the last sequence/id 1102 1112 if ($start==$prev) { 1103 1113 $result[] = $prev; 1104 } else {1105 $result[] = $start.':'.$prev;1106 }1114 } else { 1115 $result[] = $start.':'.$prev; 1116 } 1107 1117 1108 1118 //return as comma separated string … … 1113 1123 if (!is_array($uids) || count($uids) == 0) { 1114 1124 return array(); 1115 }1125 } 1116 1126 return iil_C_Search($conn, $mailbox, 'UID ' . implode(',', $uids)); 1117 1127 } … … 1122 1132 return $result[0]; 1123 1133 } 1124 return false;1134 return false; 1125 1135 } 1126 1136 … … 1131 1141 if ($num == 0) { 1132 1142 return array(); 1133 }1143 } 1134 1144 $message_set = '1' . ($num>1?':' . $num:''); 1135 1145 … … 1163 1173 if (!$temp || !is_array($temp) || $temp[0] != $num) { 1164 1174 $cache_good = -3; 1165 }1175 } 1166 1176 } 1167 1177 … … 1198 1208 && (int)$from_idx > (int)$to_idx)) { 1199 1209 return false; 1200 }1210 } 1201 1211 1202 1212 $result = array(); … … 1215 1225 } else { 1216 1226 $needed_set .= ($needed_set ? ',' : '') . $id; 1217 }1227 } 1218 1228 } 1219 1229 if ($needed_set) { … … 1221 1231 } else { 1222 1232 $message_set = ''; 1223 }1233 } 1224 1234 } 1225 1235 } … … 1235 1245 $fp = $conn->fp; 1236 1246 $request = $key . " FETCH $message_set "; 1237 $request .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])\r\n";1247 $request .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])"; 1238 1248 $mid_to_id = array(); 1239 if (! fputs($fp, $request)) {1249 if (!iil_PutLine($fp, $request)) { 1240 1250 return false; 1241 }1251 } 1242 1252 do { 1243 1253 $line = chop(iil_ReadLine($fp, 1024)); 1244 1254 if ($debug) { 1245 1255 echo $line . "\n"; 1246 }1256 } 1247 1257 if (ereg('\{[0-9]+\}$', $line)) { 1248 1258 $a = explode(' ', $line); … … 1254 1264 $line = chop(iil_ReadLine($fp, 1024), "\r\n"); 1255 1265 if (iil_StartsWithI($line, 'Message-ID:') 1256 || (iil_StartsWithI($line,'In-Reply-To:'))1257 || (iil_StartsWithI($line,'SUBJECT:'))) {1266 || (iil_StartsWithI($line,'In-Reply-To:')) 1267 || (iil_StartsWithI($line,'SUBJECT:'))) { 1258 1268 1259 1269 $pos = strpos($line, ':'); … … 1286 1296 if (count($result)!=count($cached)) { 1287 1297 cache_write($conn->user, $conn->host, $mailbox . '.thhd', $result); 1288 }1298 } 1289 1299 } 1290 1300 … … 1300 1310 list($from_idx, $to_idx) = explode(':', $message_set); 1301 1311 if (empty($message_set) || (isset($to_idx) 1302 && (int)$from_idx > (int)$to_idx)) {1312 && (int)$from_idx > (int)$to_idx)) { 1303 1313 return false; 1304 1314 } … … 1318 1328 if (!iil_C_Select($conn, $mailbox)) { 1319 1329 return false; 1320 }1330 } 1321 1331 1322 1332 /* FETCH date,from,subject headers */ … … 1339 1349 $id = $header->id; 1340 1350 $new = array('id' => $id, 'MESSAGE-ID' => $header->mid, 1341 'IN-REPLY-TO' => $header->irt, 'SUBJECT' => $header->sbj);1351 'IN-REPLY-TO' => $header->irt, 'SUBJECT' => $header->sbj); 1342 1352 1343 1353 /* add to message-id -> mid lookup table */ … … 1355 1365 $has_re = true; 1356 1366 } 1357 if ($has_re||$new['IN-REPLY-TO']) {1358 $sbj_pre = 'RE:';1367 if ($has_re||$new['IN-REPLY-TO']) { 1368 $sbj_pre = 'RE:'; 1359 1369 } 1360 1370 … … 1365 1375 $sbj = $new['SUBJECT']; 1366 1376 } 1367 $new['SUBJECT'] = $sbj_pre.$sbj;1377 $new['SUBJECT'] = $sbj_pre.$sbj; 1368 1378 1369 1379 … … 1372 1382 echo $id . ' ' . $new['SUBJECT'] . "\t" . $new['MESSAGE-ID'] . "\n"; 1373 1383 } 1374 $root_id = $roots[$sbj];1384 $root_id = $roots[$sbj]; 1375 1385 1376 1386 if ($root_id && ($has_re || !$root_in_root[$root_id])) { … … 1378 1388 echo "\tfound root: $root_id\n"; 1379 1389 } 1380 $sub_mids[$new['MESSAGE-ID']] = $root_id;1390 $sub_mids[$new['MESSAGE-ID']] = $root_id; 1381 1391 $result[$root_id][] = $id; 1382 } else if (!isset($roots[$sbj]) || (!$has_re && $root_in_root[$root_id])) {1392 } else if (!isset($roots[$sbj]) || (!$has_re && $root_in_root[$root_id])) { 1383 1393 /* try to use In-Reply-To header to find root 1384 1394 unless subject contains 'Re:' */ … … 1395 1405 echo "\tfound parent: ".$new['SUBJECT']."\n"; 1396 1406 } 1397 $result[$temp][] = $id;1407 $result[$temp][] = $id; 1398 1408 $sub_mids[$new['MESSAGE-ID']] = $temp; 1399 1409 $sbj = ''; … … 1409 1419 echo "\t added to root\n"; 1410 1420 } 1411 $roots[$sbj] = $id;1421 $roots[$sbj] = $id; 1412 1422 $root_in_root[$id] = !$has_re; 1413 1423 $sub_mids[$new['MESSAGE-ID']] = $id; … … 1416 1426 if ($debug) { 1417 1427 echo $new['MESSAGE-ID'] . "\t" . $sbj . "\n"; 1418 } 1419 } 1420 1428 } 1429 } 1421 1430 } 1422 1431 … … 1429 1438 continue; 1430 1439 } 1431 $result[$root_id] = array_merge($result[$root_id],$result[$id]);1440 $result[$root_id] = array_merge($result[$root_id],$result[$id]); 1432 1441 unset($result[$id]); 1433 1442 } … … 1441 1450 print_r($roots); 1442 1451 } 1443 //print_r($result); 1452 1444 1453 return $result; 1445 1454 } 1446 1447 1455 1448 1456 function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') { 1449 1457 if (!is_array($tree) || !is_array($index)) { 1450 1458 return false; 1451 }1459 } 1452 1460 1453 1461 //create an id to position lookup table … … 1486 1494 } 1487 1495 1488 1489 1496 //sort by key, this basically sorts all threads 1490 1497 ksort($itree); … … 1496 1503 } 1497 1504 1498 //return1499 1505 return $out; 1500 1506 } … … 1564 1570 $request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC "; 1565 1571 $request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID "; 1566 $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)]) \r\n";1567 1568 if (! fputs($fp, $request)) {1572 $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])"; 1573 1574 if (!iil_PutLine($fp, $request)) { 1569 1575 return false; 1570 1576 } … … 1697 1703 $command_key = 'fh' . ($c++); 1698 1704 $request = $command_key . $prefix; 1699 $request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE) \r\n";1700 1701 if (! fputs($fp, $request)) {1705 $request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)"; 1706 1707 if (!iil_PutLine($fp, $request)) { 1702 1708 return false; 1703 1709 } 1704 do {1710 do { 1705 1711 $line = chop(iil_ReadLine($fp, 200)); 1706 1712 //$a = explode(' ', $line); … … 1757 1763 } else if (strcasecmp($val, "\$MDNSent") == 0) { 1758 1764 $result[$id]->mdn_sent = true; 1759 }1765 } 1760 1766 } 1761 1767 $result[$id]->flags = $flags_a; … … 1813 1819 } 1814 1820 1815 1816 1821 function iil_SortHeaders($a, $field, $flag) { 1817 1822 if (empty($field)) { 1818 1823 $field = 'uid'; 1819 }1824 } 1820 1825 $field = strtolower($field); 1821 1826 if ($field == 'date' || $field == 'internaldate') { 1822 1827 $field = 'timestamp'; 1823 }1828 } 1824 1829 if (empty($flag)) { 1825 1830 $flag = 'ASC'; 1826 }1831 } 1827 1832 1828 1833 $flag = strtoupper($flag); … … 1847 1852 if ($data == false) { 1848 1853 $data = $val->timestamp; 1849 }1854 } 1850 1855 } else { 1851 1856 $data = $val->$field; 1852 1857 if (is_string($data)) { 1853 1858 $data=strtoupper(str_replace($stripArr, '', $data)); 1854 }1859 } 1855 1860 } 1856 1861 $index[$key]=$data; … … 1860 1865 $i = 0; 1861 1866 if ($flag == 'ASC') { 1862 asort($index);1863 } else {1864 arsort($index);1867 asort($index); 1868 } else { 1869 arsort($index); 1865 1870 } 1866 1871 … … 1878 1883 1879 1884 function iil_C_Expunge(&$conn, $mailbox) { 1880 $fp = $conn->fp; 1885 1881 1886 if (iil_C_Select($conn, $mailbox)) { 1882 1887 $c = 0; 1883 fputs($fp, "exp1 EXPUNGE\r\n");1888 iil_PutLine($conn->fp, "exp1 EXPUNGE"); 1884 1889 do { 1885 $line=chop(iil_ReadLine($ fp, 100));1890 $line=chop(iil_ReadLine($conn->fp, 100)); 1886 1891 if ($line[0] == '*') { 1887 $c++;1888 }1892 $c++; 1893 } 1889 1894 } while (!iil_StartsWith($line, 'exp1')); 1890 1895 … … 1920 1925 if (iil_C_Select($conn, $mailbox)) { 1921 1926 $c = 0; 1922 fputs($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n");1927 iil_PutLine($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")"); 1923 1928 do { 1924 1929 $line=chop(iil_ReadLine($fp, 100)); 1925 1930 if ($line[0] == '*') { 1926 1931 $c++; 1927 }1932 } 1928 1933 } while (!iil_StartsWith($line, 'flg')); 1929 1934 … … 1959 1964 } 1960 1965 1961 1962 1966 function iil_C_Copy(&$conn, $messages, $from, $to) { 1963 1967 $fp = $conn->fp; … … 1965 1969 if (empty($from) || empty($to)) { 1966 1970 return -1; 1967 }1971 } 1968 1972 1969 1973 if (iil_C_Select($conn, $from)) { 1970 1974 $c=0; 1971 1975 1972 fputs($fp, "cpy1 COPY $messages \"".iil_Escape($to)."\"\r\n");1976 iil_PutLine($fp, "cpy1 COPY $messages \"".iil_Escape($to)."\""); 1973 1977 $line=iil_ReadReply($fp); 1974 1978 return iil_ParseResult($line); … … 1980 1984 function iil_FormatSearchDate($month, $day, $year) { 1981 1985 $month = (int) $month; 1982 $months = $GLOBALS['IMAP_MONTHS'];1986 $months = $GLOBALS['IMAP_MONTHS']; 1983 1987 return $day . '-' . $months[$month] . '-' . $year; 1984 1988 } … … 1990 1994 if (empty($str)) { 1991 1995 return false; 1992 }1996 } 1993 1997 return count($index); 1994 1998 } 1995 return false;1999 return false; 1996 2000 } 1997 2001 … … 2003 2007 if ($count > 1) { 2004 2008 return false; 2005 }2009 } 2006 2010 return $id_a[0]; 2007 2011 } … … 2014 2018 if ($id == 0) { 2015 2019 return -1; 2016 }2017 $result = -1;2020 } 2021 $result = -1; 2018 2022 if (iil_C_Select($conn, $folder)) { 2019 2023 $key = 'FUID'; 2020 if ( fputs($fp, "$key FETCH $id (UID)\r\n")) {2024 if (iil_PutLine($fp, "$key FETCH $id (UID)")) { 2021 2025 do { 2022 2026 $line=chop(iil_ReadLine($fp, 1024)); … … 2035 2039 $c = 0; 2036 2040 2037 $query = 'srch1 SEARCH ' . chop($criteria) . "\r\n";2038 fputs($fp, $query);2041 $query = 'srch1 SEARCH ' . chop($criteria); 2042 iil_PutLine($fp, $query); 2039 2043 do { 2040 2044 $line=trim(iil_ReadLine($fp, 10000)); … … 2050 2054 } 2051 2055 $conn->error = 'iil_C_Search: ' . $line . "\n"; 2052 return false; 2053 2056 return false; 2054 2057 } 2055 2058 $conn->error = "iil_C_Search: Couldn't select \"$folder\"\n"; … … 2089 2092 2090 2093 //try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8) 2091 if (! fputs($fp, 'ghd LIST "" ""' . "\r\n")) {2094 if (!iil_PutLine($fp, 'ghd LIST "" ""')) { 2092 2095 return false; 2093 }2096 } 2094 2097 2095 2098 do { … … 2100 2103 if ($a[0] == '*') { 2101 2104 $delimiter = str_replace('"', '', $a[count($a)-2]); 2102 }2105 } 2103 2106 } 2104 2107 } while (!iil_StartsWith($line, 'ghd')); … … 2110 2113 //if that fails, try namespace extension 2111 2114 //try to fetch namespace data 2112 fputs($conn->fp, "ns1 NAMESPACE\r\n");2115 iil_PutLine($conn->fp, "ns1 NAMESPACE"); 2113 2116 do { 2114 2117 $line = iil_ReadLine($conn->fp, 1024); … … 2133 2136 if (!is_array($first_userspace)) { 2134 2137 return false; 2135 }2138 } 2136 2139 2137 2140 //extract delimiter … … 2157 2160 2158 2161 // send command 2159 if (! fputs($fp, "lmb LIST \"".$ref."\" \"".iil_Escape($mailbox)."\"\r\n")) {2162 if (!iil_PutLine($fp, "lmb LIST \"".$ref."\" \"".iil_Escape($mailbox)."\"")) { 2160 2163 return false; 2161 2164 } … … 2170 2173 if (($line[0] == '*') && ($a[1] == 'LIST')) { 2171 2174 $line = rtrim($line); 2172 // split one line2175 // split one line 2173 2176 $a = iil_ExplodeQuotedString(' ', $line); 2174 // last string is folder name2177 // last string is folder name 2175 2178 $folder = trim($a[count($a)-1], '"'); 2176 2179 2177 if (empty($ignore) || (!empty($ignore)2178 && !eregi($ignore, $folder))) {2179 $folders[$i] = $folder;2180 }2180 if (empty($ignore) || (!empty($ignore) 2181 && !eregi($ignore, $folder))) { 2182 $folders[$i] = $folder; 2183 } 2181 2184 2182 // second from last is delimiter2183 $delim = trim($a[count($a)-2], '"');2184 // is it a container?2185 $i++;2185 // second from last is delimiter 2186 $delim = trim($a[count($a)-2], '"'); 2187 // is it a container? 2188 $i++; 2186 2189 } 2187 2190 } while (!iil_StartsWith($line, 'lmb')); … … 2189 2192 if (is_array($folders)) { 2190 2193 if (!empty($ref)) { 2191 // if rootdir was specified, make sure it's the first element2192 // some IMAP servers (i.e. Courier) won't return it2193 if ($ref[strlen($ref)-1]==$delim)2194 // if rootdir was specified, make sure it's the first element 2195 // some IMAP servers (i.e. Courier) won't return it 2196 if ($ref[strlen($ref)-1]==$delim) 2194 2197 $ref = substr($ref, 0, strlen($ref)-1); 2195 if ($folders[0]!=$ref)2198 if ($folders[0]!=$ref) 2196 2199 array_unshift($folders, $ref); 2197 2200 } 2198 2201 return $folders; 2199 } else if (iil_ParseResult($line) == 0) {2202 } else if (iil_ParseResult($line) == 0) { 2200 2203 return array('INBOX'); 2201 2204 } else { … … 2205 2208 } 2206 2209 2207 2208 2210 function iil_C_ListSubscribed(&$conn, $ref, $mailbox) { 2209 2211 global $IGNORE_FOLDERS; … … 2220 2222 $folders = array(); 2221 2223 2222 // send command2223 if (! fputs($fp, 'lsb LSUB "' . $ref . '" "' . iil_Escape($mailbox).'"' . "\r\n")) {2224 // send command 2225 if (!iil_PutLine($fp, 'lsb LSUB "' . $ref . '" "' . iil_Escape($mailbox).'"')) { 2224 2226 $conn->error = "Couldn't send LSUB command\n"; 2225 2227 return false; … … 2228 2230 $i = 0; 2229 2231 2230 // get folder list2232 // get folder list 2231 2233 do { 2232 2234 $line = iil_ReadLine($fp, 500); … … 2237 2239 $line = rtrim($line); 2238 2240 2239 // split one line2241 // split one line 2240 2242 $a = iil_ExplodeQuotedString(' ', $line); 2241 2243 2242 // last string is folder name2243 //$folder = UTF7DecodeString(str_replace('"', '', $a[count($a)-1]));2244 $folder = trim($a[count($a)-1], '"');2244 // last string is folder name 2245 //$folder = UTF7DecodeString(str_replace('"', '', $a[count($a)-1])); 2246 $folder = trim($a[count($a)-1], '"'); 2245 2247 2246 2248 if ((!in_array($folder, $folders)) && (empty($ignore) 2247 || (!empty($ignore) && !eregi($ignore, $folder)))) {2249 || (!empty($ignore) && !eregi($ignore, $folder)))) { 2248 2250 $folders[$i] = $folder; 2249 }2251 } 2250 2252 2251 // second from last is delimiter2252 $delim = trim($a[count($a)-2], '"');2253 // second from last is delimiter 2254 $delim = trim($a[count($a)-2], '"'); 2253 2255 2254 // is it a container?2255 $i++;2256 // is it a container? 2257 $i++; 2256 2258 } 2257 2259 } while (!iil_StartsWith($line, 'lsb')); 2258 2260 2259 2261 if (is_array($folders)) { 2260 if (!empty($ref)) {2261 // if rootdir was specified, make sure it's the first element2262 // some IMAP servers (i.e. Courier) won't return it2263 if ($ref[strlen($ref)-1]==$delim) {2264 $ref = substr($ref, 0, strlen($ref)-1);2265 }2266 if ($folders[0]!=$ref) {2267 array_unshift($folders, $ref);2268 }2269 }2270 return $folders;2262 if (!empty($ref)) { 2263 // if rootdir was specified, make sure it's the first element 2264 // some IMAP servers (i.e. Courier) won't return it 2265 if ($ref[strlen($ref)-1]==$delim) { 2266 $ref = substr($ref, 0, strlen($ref)-1); 2267 } 2268 if ($folders[0]!=$ref) { 2269 array_unshift($folders, $ref); 2270 } 2271 } 2272 return $folders; 2271 2273 } 2272 2274 $conn->error = $line; … … 2274 2276 } 2275 2277 2276 2277 2278 function iil_C_Subscribe(&$conn, $folder) { 2278 2279 $fp = $conn->fp; 2279 2280 2280 $query = 'sub1 SUBSCRIBE "' . iil_Escape($folder). '"' . "\r\n";2281 fputs($fp, $query);2281 $query = 'sub1 SUBSCRIBE "' . iil_Escape($folder). '"'; 2282 iil_PutLine($fp, $query); 2282 2283 2283 2284 $line = trim(iil_ReadLine($fp, 10000)); … … 2285 2286 } 2286 2287 2287 2288 2288 function iil_C_UnSubscribe(&$conn, $folder) { 2289 2289 $fp = $conn->fp; 2290 2290 2291 $query = 'usub1 UNSUBSCRIBE "' . iil_Escape($folder) . '"' . "\r\n";2292 fputs($fp, $query);2291 $query = 'usub1 UNSUBSCRIBE "' . iil_Escape($folder) . '"'; 2292 iil_PutLine($fp, $query); 2293 2293 2294 2294 $line = trim(iil_ReadLine($fp, 10000)); 2295 2295 return iil_ParseResult($line); 2296 2296 } 2297 2298 2297 2299 2298 function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) { … … 2302 2301 if (($part == 0) || (empty($part))) { 2303 2302 $part = 'HEADER'; 2304 } else {2305 $part .= '.MIME';2303 } else { 2304 $part .= '.MIME'; 2306 2305 } 2307 2306 2308 2307 if (iil_C_Select($conn, $mailbox)) { 2309 2308 $key = 'fh' . ($c++); 2310 $request = $key . " FETCH $id (BODY.PEEK[$part]) \r\n";2311 if (! fputs($fp, $request)) return false;2309 $request = $key . " FETCH $id (BODY.PEEK[$part])"; 2310 if (!iil_PutLine($fp, $request)) return false; 2312 2311 do { 2313 2312 $line = chop(iil_ReadLine($fp, 200)); … … 2327 2326 } 2328 2327 2329 2330 2328 function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) { 2331 /* modes:2329 /* modes: 2332 2330 1: return string 2333 2331 2: print 2334 2332 3: base64 and print 2335 */ 2333 */ 2334 2336 2335 $fp = $conn->fp; 2337 2336 $result = false; … … 2341 2340 2342 2341 if (iil_C_Select($conn, $mailbox)) { 2343 $reply_key = '* ' . $id;2342 $reply_key = '* ' . $id; 2344 2343 2345 // format request2344 // format request 2346 2345 $key = 'ftch' . ($c++) . ' '; 2347 $request = $key . "FETCH $id (BODY.PEEK[$part]) \r\n";2348 // send request2349 if (! fputs($fp, $request)) {2346 $request = $key . "FETCH $id (BODY.PEEK[$part])"; 2347 // send request 2348 if (!iil_PutLine($fp, $request)) { 2350 2349 return false; 2351 }2350 } 2352 2351 2353 // receive reply line 2354 do { 2355 $line = chop(iil_ReadLine($fp, 1000)); 2356 $a = explode(' ', $line); 2357 } while ($a[2] != 'FETCH'); 2358 $len = strlen($line); 2359 if ($line[$len-1] == ')') { 2360 //one line response, get everything between first and last quotes 2361 if (substr($line, -4, 3) == 'NIL') { 2362 // NIL response 2363 $result = ''; 2364 } else { 2365 $from = strpos($line, '"') + 1; 2366 $to = strrpos($line, '"'); 2367 $len = $to - $from; 2368 $result = substr($line, $from, $len); 2369 } 2352 // receive reply line 2353 do { 2354 $line = chop(iil_ReadLine($fp, 1000)); 2355 $a = explode(' ', $line); 2356 } while ($a[2] != 'FETCH'); 2357 $len = strlen($line); 2358 2359 if ($line[$len-1] == ')') { 2360 // one line response, get everything between first and last quotes 2361 if (substr($line, -4, 3) == 'NIL') { 2362 // NIL response 2363 $result = ''; 2364 } else { 2365 $from = strpos($line, '"') + 1; 2366 $to = strrpos($line, '"'); 2367 $len = $to - $from; 2368 $result = substr($line, $from, $len); 2369 } 2370 2370 2371 if ($mode == 2) { 2372 echo $result; 2373 } else if ($mode == 3) { 2374 echo base64_decode($result); 2375 } 2376 } else if ($line[$len-1] == '}') { 2377 //multi-line request, find sizes of content and receive that many bytes 2378 $from = strpos($line, '{') + 1; 2379 $to = strrpos($line, '}'); 2380 $len = $to - $from; 2381 $sizeStr = substr($line, $from, $len); 2382 $bytes = (int)$sizeStr; 2383 $received = 0; 2384 while ($received < $bytes) { 2385 $remaining = $bytes - $received; 2386 $line = iil_ReadLine($fp, 1024); 2387 $len = strlen($line); 2371 if ($mode == 2) { 2372 echo $result; 2373 } else if ($mode == 3) { 2374 echo base64_decode($result); 2375 } 2376 } else if ($line[$len-1] == '}') { 2377 //multi-line request, find sizes of content and receive that many bytes 2378 $from = strpos($line, '{') + 1; 2379 $to = strrpos($line, '}'); 2380 $len = $to - $from; 2381 $sizeStr = substr($line, $from, $len); 2382 $bytes = (int)$sizeStr; 2383 $received = 0; 2384 2385 while ($received < $bytes) { 2386 $remaining = $bytes - $received; 2387 $line = iil_ReadLine($fp, 1024); 2388 $len = strlen($line); 2388 2389 2389 if ($len > $remaining) {2390 $line = substr($line, 0, $remaining);2391 }2392 $received += strlen($line);2393 if ($mode == 1) {2394 $result .= rtrim($line, "\t\r\n\0\x0B") . "\n";2395 } else if ($mode == 2) {2396 echo rtrim($line, "\t\r\n\0\x0B") . "\n"; flush();2397 } else if ($mode == 3) {2398 echo base64_decode($line); flush();2399 }2400 }2401 }2402 // read in anything up until 'til last line2390 if ($len > $remaining) { 2391 $line = substr($line, 0, $remaining); 2392 } 2393 $received += strlen($line); 2394 if ($mode == 1) { 2395 $result .= rtrim($line, "\t\r\n\0\x0B") . "\n"; 2396 } else if ($mode == 2) { 2397 echo rtrim($line, "\t\r\n\0\x0B") . "\n"; flush(); 2398 } else if ($mode == 3) { 2399 echo base64_decode($line); flush(); 2400 } 2401 } 2402 } 2403 // read in anything up until 'til last line 2403 2404 do { 2404 $line = iil_ReadLine($fp, 1024);2405 $line = iil_ReadLine($fp, 1024); 2405 2406 } while (!iil_StartsWith($line, $key)); 2406 2407 2407 if ($result) { 2408 $result = rtrim($result, "\t\r\n\0\x0B"); 2409 return $result; // substr($result, 0, strlen($result)-1); 2410 } 2411 return false; 2408 if ($result) { 2409 $result = rtrim($result, "\t\r\n\0\x0B"); 2410 return $result; // substr($result, 0, strlen($result)-1); 2411 } 2412 2413 return false; 2412 2414 } else { 2413 2415 echo 'Select failed.'; 2414 2416 } 2415 2417 2416 if ($mode==1) {2417 return $result;2418 }2419 return $received;2418 if ($mode==1) { 2419 return $result; 2420 } 2421 return $received; 2420 2422 } 2421 2423 2422 2424 function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part) { 2423 return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1);2425 return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1); 2424 2426 } 2425 2427 2426 2428 function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part) { 2427 iil_C_HandlePartBody($conn, $mailbox, $id, $part, 2);2429 iil_C_HandlePartBody($conn, $mailbox, $id, $part, 2); 2428 2430 } 2429 2431 2430 2432 function iil_C_PrintBase64Body(&$conn, $mailbox, $id, $part) { 2431 iil_C_HandlePartBody($conn, $mailbox, $id, $part, 3);2433 iil_C_HandlePartBody($conn, $mailbox, $id, $part, 3); 2432 2434 } 2433 2435 2434 2436 function iil_C_CreateFolder(&$conn, $folder) { 2435 2437 $fp = $conn->fp; 2436 if ( fputs($fp, 'c CREATE "' . iil_Escape($folder) . '"' . "\r\n")) {2438 if (iil_PutLine($fp, 'c CREATE "' . iil_Escape($folder) . '"')) { 2437 2439 do { 2438 2440 $line=iil_ReadLine($fp, 300); … … 2446 2448 function iil_C_RenameFolder(&$conn, $from, $to) { 2447 2449 $fp = $conn->fp; 2448 if ( fputs($fp, 'r RENAME "' . iil_Escape($from) . '" "' . iil_Escape($to) . '"' . "\r\n")) {2450 if (iil_PutLine($fp, 'r RENAME "' . iil_Escape($from) . '" "' . iil_Escape($to) . '"')) { 2449 2451 do { 2450 2452 $line = iil_ReadLine($fp, 300); … … 2452 2454 return (iil_ParseResult($line) == 0); 2453 2455 } 2454 return false;2456 return false; 2455 2457 } 2456 2458 2457 2459 function iil_C_DeleteFolder(&$conn, $folder) { 2458 2460 $fp = $conn->fp; 2459 if ( fputs($fp, 'd DELETE "' . iil_Escape($folder). '"' . "\r\n")) {2461 if (iil_PutLine($fp, 'd DELETE "' . iil_Escape($folder). '"')) { 2460 2462 do { 2461 2463 $line=iil_ReadLine($fp, 300); … … 2463 2465 return (iil_ParseResult($line) == 0); 2464 2466 } 2465 $conn->error = "Couldn't send command\n";2467 $conn->error = "Couldn't send command\n"; 2466 2468 return false; 2467 2469 } … … 2469 2471 function iil_C_Append(&$conn, $folder, &$message) { 2470 2472 if (!$folder) { 2471 return false;2472 }2473 return false; 2474 } 2473 2475 $fp = $conn->fp; 2474 2476 … … 2478 2480 $len = strlen($message); 2479 2481 if (!$len) { 2480 return false; 2481 } 2482 $request = 'A APPEND "' . iil_Escape($folder) .'" (\\Seen) {' . $len . "}\r\n"; 2483 2484 if (fputs($fp, $request)) { 2482 return false; 2483 } 2484 2485 $request = 'A APPEND "' . iil_Escape($folder) .'" (\\Seen) {' . $len . '}'; 2486 2487 if (iil_PutLine($fp, $request)) { 2485 2488 $line=iil_ReadLine($fp, 100); 2486 2489 $sent = fwrite($fp, $message."\r\n"); … … 2492 2495 if (!$result) { 2493 2496 $conn->error .= $line . "\n"; 2494 }2497 } 2495 2498 return $result; 2496 2497 } 2499 } 2500 2498 2501 $conn->error .= "Couldn't send command \"$request\"\n"; 2499 return false; 2500 } 2501 2502 return false; 2503 } 2502 2504 2503 2505 function iil_C_AppendFromFile(&$conn, $folder, $path) { … … 2509 2511 $in_fp = false; 2510 2512 if (file_exists(realpath($path))) { 2511 $in_fp = fopen($path, 'r');2512 }2513 $in_fp = fopen($path, 'r'); 2514 } 2513 2515 if (!$in_fp) { 2514 2516 $conn->error .= "Couldn't open $path for reading\n"; … … 2519 2521 $len = filesize($path); 2520 2522 if (!$len) { 2521 return false;2523 return false; 2522 2524 } 2523 2525 2524 2526 //send APPEND command 2525 $request = 'A APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . "}\r\n";2527 $request = 'A APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . '}'; 2526 2528 $bytes_sent = 0; 2527 if ( fputs($fp, $request)) {2529 if (iil_PutLine($fp, $request)) { 2528 2530 $line = iil_ReadLine($fp, 100); 2529 2531 … … 2532 2534 $buffer = fgets($in_fp, 4096); 2533 2535 $bytes_sent += strlen($buffer); 2534 fputs($fp, $buffer);2536 iil_PutLine($fp, $buffer, false); 2535 2537 } 2536 2538 fclose($in_fp); 2537 2539 2538 fputs($fp, "\r\n");2540 iil_PutLine($fp, ''); 2539 2541 2540 2542 //read response … … 2547 2549 $conn->error .= $line . "\n"; 2548 2550 } 2549 return $result; 2550 2551 } 2551 2552 return $result; 2553 } 2554 2552 2555 $conn->error .= "Couldn't send command \"$request\"\n"; 2553 2556 return false; 2554 2557 } 2555 2556 2558 2557 2559 function iil_C_FetchStructureString(&$conn, $folder, $id) { … … 2562 2564 $key = 'F1247'; 2563 2565 2564 if ( fputs($fp, "$key FETCH $id (BODYSTRUCTURE)\r\n")) {2566 if (iil_PutLine($fp, "$key FETCH $id (BODYSTRUCTURE)")) { 2565 2567 do { 2566 2568 $line = iil_ReadLine($fp, 5000); … … 2569 2571 } while (!preg_match("/^$key/", $line)); 2570 2572 2571 $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -(strlen($result)-strrpos($result, $key)-2))); 2573 $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, 2574 -(strlen($result)-strrpos($result, $key)-2))); 2572 2575 } 2573 2576 } … … 2594 2597 2595 2598 //get line containing quota info 2596 if ( fputs($fp, 'QUOT1 GETQUOTAROOT "INBOX"' . "\r\n")) {2599 if (iil_PutLine($fp, 'QUOT1 GETQUOTAROOT "INBOX"')) { 2597 2600 do { 2598 2601 $line=chop(iil_ReadLine($fp, 5000)); 2599 2602 if (iil_StartsWith($line, '* QUOTA ')) { 2600 $quota_line = $line;2601 }2603 $quota_line = $line; 2604 } 2602 2605 } while (!iil_StartsWith($line, 'QUOT1')); 2603 2606 } … … 2622 2625 } 2623 2626 2624 2625 2627 function iil_C_ClearFolder(&$conn, $folder) { 2626 2628 $num_in_trash = iil_C_CountMessages($conn, $folder); 2627 2629 if ($num_in_trash > 0) { 2628 iil_C_Delete($conn, $folder, '1:' . $num_in_trash);2629 }2630 iil_C_Delete($conn, $folder, '1:' . $num_in_trash); 2631 } 2630 2632 return (iil_C_Expunge($conn, $folder) >= 0); 2631 2633 }
Note: See TracChangeset
for help on using the changeset viewer.
