| | |
| | | $conn->capability = explode(' ', strtoupper($matches[1])); |
| | | } |
| | | |
| | | $conn->message .= $line . "\n"; |
| | | $conn->message .= $line; |
| | | |
| | | // TLS connection |
| | | if ($ICL_SSL == 'tls' && iil_C_GetCapability($conn, 'STARTTLS')) { |
| | |
| | | } |
| | | } |
| | | |
| | | $orig_method = $auth_method; |
| | | |
| | | if ($auth_method == 'CHECK') { |
| | | //check for supported auth methods |
| | | // check for supported auth methods |
| | | if (iil_C_GetCapability($conn, 'AUTH=CRAM-MD5') || iil_C_GetCapability($conn, 'AUTH=CRAM_MD5')) { |
| | | $auth_method = 'AUTH'; |
| | | } |
| | | else { |
| | | //default to plain text auth |
| | | // default to plain text auth |
| | | $auth_method = 'PLAIN'; |
| | | } |
| | | } |
| | | |
| | | if ($auth_method == 'AUTH') { |
| | | //do CRAM-MD5 authentication |
| | | // do CRAM-MD5 authentication |
| | | iil_PutLine($conn->fp, "a000 AUTHENTICATE CRAM-MD5"); |
| | | $line = trim(iil_ReadLine($conn->fp, 1024)); |
| | | |
| | | if ($line[0] == '+') { |
| | | //got a challenge string, try CRAM-5 |
| | | // got a challenge string, try CRAM-MD5 |
| | | $result = iil_C_Authenticate($conn, $user, $password, substr($line,2)); |
| | | |
| | | // stop if server sent BYE response |
| | | if($result == -3) { |
| | | if ($result == -3) { |
| | | $iil_error = $conn->error; |
| | | $iil_errornum = $conn->errorNum; |
| | | return false; |
| | | } |
| | | $conn->message .= "AUTH CRAM-MD5: $result\n"; |
| | | } else { |
| | | $conn->message .= "AUTH CRAM-MD5: failed\n"; |
| | | } |
| | | |
| | | if (!is_resource($result) && $orig_method == 'CHECK') { |
| | | $auth_method = 'PLAIN'; |
| | | } |
| | | } |
| | | |
| | | if (!$result || $auth_method == 'PLAIN') { |
| | | //do plain text auth |
| | | if ($auth_method == 'PLAIN') { |
| | | // do plain text auth |
| | | $result = iil_C_Login($conn, $user, $password); |
| | | $conn->message .= "AUTH PLAIN: $result\n"; |
| | | } |
| | | |
| | | if (!is_int($result)) { |
| | | |
| | | if (is_resource($result)) { |
| | | iil_C_Namespace($conn); |
| | | return $conn; |
| | | } else { |
| | |
| | | return preg_split('/\s+/', $data, -1, PREG_SPLIT_NO_EMPTY); |
| | | } |
| | | |
| | | function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field='', $skip_deleted=true) { |
| | | function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field='', $skip_deleted=true, $uidfetch=false) { |
| | | |
| | | list($from_idx, $to_idx) = explode(':', $message_set); |
| | | if (empty($message_set) || |
| | |
| | | |
| | | // build FETCH command string |
| | | $key = 'fhi0'; |
| | | $cmd = $uidfetch ? 'UID FETCH' : 'FETCH'; |
| | | $deleted = $skip_deleted ? ' FLAGS' : ''; |
| | | |
| | | if ($mode == 1) |
| | | $request = " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)]$deleted)"; |
| | | if ($mode == 1 && $index_field == 'DATE') |
| | | $request = " $cmd $message_set (INTERNALDATE BODY.PEEK[HEADER.FIELDS (DATE)]$deleted)"; |
| | | else if ($mode == 1) |
| | | $request = " $cmd $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)]$deleted)"; |
| | | else if ($mode == 2) { |
| | | if ($index_field == 'SIZE') |
| | | $request = " FETCH $message_set (RFC822.SIZE$deleted)"; |
| | | $request = " $cmd $message_set (RFC822.SIZE$deleted)"; |
| | | else |
| | | $request = " FETCH $message_set ($index_field$deleted)"; |
| | | $request = " $cmd $message_set ($index_field$deleted)"; |
| | | } else if ($mode == 3) |
| | | $request = " FETCH $message_set (FLAGS)"; |
| | | $request = " $cmd $message_set (FLAGS)"; |
| | | else // 4 |
| | | $request = " FETCH $message_set (INTERNALDATE$deleted)"; |
| | | $request = " $cmd $message_set (INTERNALDATE$deleted)"; |
| | | |
| | | $request = $key . $request; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | if ($mode == 1) { |
| | | if (preg_match('/BODY\[HEADER\.FIELDS \("?(DATE|FROM|REPLY-TO|SENDER|TO|SUBJECT)"?\)\] (.*)/', $line, $matches)) { |
| | | $value = preg_replace(array('/^"*[a-z]+:/i', '/\s+$/sm'), array('', ''), $matches[2]); |
| | | if ($mode == 1 && $index_field == 'DATE') { |
| | | if (preg_match('/BODY\[HEADER\.FIELDS \("*DATE"*\)\] (.*)/', $line, $matches)) { |
| | | $value = preg_replace(array('/^"*[a-z]+:/i'), '', $matches[1]); |
| | | $value = trim($value); |
| | | if ($index_field == 'DATE') { |
| | | $result[$id] = iil_StrToTime($value); |
| | | } else { |
| | | $result[$id] = $value; |
| | | } |
| | | $result[$id] = iil_StrToTime($value); |
| | | } |
| | | // non-existent/empty Date: header, use INTERNALDATE |
| | | if (empty($result[$id])) { |
| | | if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) |
| | | $result[$id] = iil_StrToTime($matches[1]); |
| | | else |
| | | $result[$id] = 0; |
| | | } |
| | | } else if ($mode == 1) { |
| | | if (preg_match('/BODY\[HEADER\.FIELDS \("?(FROM|REPLY-TO|SENDER|TO|SUBJECT)"?\)\] (.*)/', $line, $matches)) { |
| | | $value = preg_replace(array('/^"*[a-z]+:/i', '/\s+$/sm'), array('', ''), $matches[2]); |
| | | $result[$id] = trim($value); |
| | | } else { |
| | | $result[$id] = ''; |
| | | } |
| | |
| | | $request .= "BODY.PEEK[HEADER.FIELDS "; |
| | | $request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC "; |
| | | $request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID "; |
| | | $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY".$add.")])"; |
| | | $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY "; |
| | | $request .= "X-REPLY-UID X-FORWARD-UID".$add.")])"; |
| | | |
| | | if (!iil_PutLine($fp, $request)) { |
| | | return false; |
| | |
| | | return false; |
| | | } |
| | | |
| | | function iil_C_AppendFromFile(&$conn, $folder, $path) { |
| | | function iil_C_AppendFromFile(&$conn, $folder, $path, $headers=null, $separator="\n\n") { |
| | | if (!$folder) { |
| | | return false; |
| | | } |
| | |
| | | if (!$len) { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | if ($headers) { |
| | | $headers = preg_replace('/[\r\n]+$/', '', $headers); |
| | | $len += strlen($headers) + strlen($separator); |
| | | } |
| | | |
| | | //send APPEND command |
| | | $request = 'a APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . '}'; |
| | | if (iil_PutLine($fp, $request)) { |
| | |
| | | return false; |
| | | } |
| | | |
| | | //send file |
| | | // send headers with body separator |
| | | if ($headers) { |
| | | iil_PutLine($fp, $headers . $separator, false); |
| | | } |
| | | |
| | | // send file |
| | | while (!feof($in_fp)) { |
| | | $buffer = fgets($in_fp, 4096); |
| | | $buffer = fgets($in_fp, 4096); |
| | | iil_PutLine($fp, $buffer, false); |
| | | } |
| | | fclose($in_fp); |
| | | |
| | | iil_PutLine($fp, ''); // \r\n |
| | | |
| | | //read response |
| | | // read response |
| | | do { |
| | | $line = iil_ReadLine($fp); |
| | | } while (!iil_StartsWith($line, 'a ', true)); |