| | |
| | | - RFC3501 [7.1] don't call CAPABILITY if was returned in server |
| | | optional resposne in iil_Connect(), added iil_C_GetCapability() |
| | | - remove 'undisclosed-recipients' string from 'To' header |
| | | - iil_C_HandlePartBody(): added 6th argument and fixed endless loop |
| | | |
| | | ********************************************************/ |
| | | |
| | |
| | | return $result; |
| | | } |
| | | |
| | | function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) { |
| | | function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode, $file=NULL) { |
| | | /* modes: |
| | | 1: return string |
| | | 1: return string (or write to $file pointer) |
| | | 2: print |
| | | 3: base64 and print |
| | | 3: base64 and print (or write to $file pointer) |
| | | */ |
| | | |
| | | $fp = $conn->fp; |
| | | $result = false; |
| | | if (($part == 0) || empty($part)) { |
| | | $part = 'TEXT'; |
| | | $part = 'TEXT'; |
| | | } |
| | | |
| | | |
| | | if (iil_C_Select($conn, $mailbox)) { |
| | | $reply_key = '* ' . $id; |
| | | |
| | |
| | | if ($mode == 2) { |
| | | echo $result; |
| | | } else if ($mode == 3) { |
| | | echo base64_decode($result); |
| | | } |
| | | if ($file) |
| | | fwrite($file, base64_decode($result)); |
| | | else |
| | | echo base64_decode($result); |
| | | } |
| | | } else if ($line[$len-1] == '}') { |
| | | //multi-line request, find sizes of content and receive that many bytes |
| | | $from = strpos($line, '{') + 1; |
| | |
| | | $len = $to - $from; |
| | | $sizeStr = substr($line, $from, $len); |
| | | $bytes = (int)$sizeStr; |
| | | $received = 0; |
| | | |
| | | while ($received < $bytes) { |
| | | $remaining = $bytes - $received; |
| | | $line = iil_ReadLine($fp, 1024); |
| | | while ($bytes > 0) { |
| | | $line = iil_ReadLine($fp, 1024); |
| | | $len = strlen($line); |
| | | |
| | | if ($len > $remaining) { |
| | | $line = substr($line, 0, $remaining); |
| | | if ($len > $bytes) { |
| | | $line = substr($line, 0, $bytes); |
| | | } |
| | | $received += strlen($line); |
| | | $bytes -= strlen($line); |
| | | |
| | | if ($mode == 1) { |
| | | $result .= rtrim($line, "\t\r\n\0\x0B") . "\n"; |
| | | if ($file) |
| | | fwrite($file, rtrim($line, "\t\r\n\0\x0B") . "\n"); |
| | | else |
| | | $result .= rtrim($line, "\t\r\n\0\x0B") . "\n"; |
| | | } else if ($mode == 2) { |
| | | echo rtrim($line, "\t\r\n\0\x0B") . "\n"; |
| | | } else if ($mode == 3) { |
| | | echo base64_decode($line); |
| | | } |
| | | if ($file) |
| | | fwrite($file, base64_decode($line)); |
| | | else |
| | | echo base64_decode($line); |
| | | } |
| | | } |
| | | } |
| | | // read in anything up until 'til last line |
| | | // read in anything up until last line |
| | | do { |
| | | $line = iil_ReadLine($fp, 1024); |
| | | } while (!iil_StartsWith($line, $key)); |
| | | |
| | | if ($mode == 3 && $file) { |
| | | return true; |
| | | } |
| | | |
| | | if ($result) { |
| | | $result = rtrim($result, "\t\r\n\0\x0B"); |
| | | return $result; // substr($result, 0, strlen($result)-1); |
| | | if ($file) { |
| | | fwrite($file, $result); |
| | | return true; |
| | | } |
| | | return $result; // substr($result, 0, strlen($result)-1); |
| | | } |
| | | |
| | | return false; |
| | |
| | | } |
| | | |
| | | if ($mode==1) { |
| | | if ($file) { |
| | | fwrite($file, $result); |
| | | return true; |
| | | } |
| | | return $result; |
| | | } |
| | | return $received; |
| | | |
| | | return false; |
| | | } |
| | | |
| | | function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part) { |
| | | return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1); |
| | | function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part, $file=NULL) { |
| | | return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1, $file); |
| | | } |
| | | |
| | | function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part) { |