if (!$pop3->login($mailfetch_user, $mailfetch_pass)) { Mail_Fetch_Status(_("Login Failed:") . ' ' . sm_encode_html_special_chars($pop3->error)); continue; } $aMsgStat = $pop3->command_stat(); if (is_bool($aMsgStat)) { Mail_Fetch_Status(_("Can't get mailbox status:") . ' ' . sm_encode_html_special_chars($pop3->error)); continue; } $Count = $aMsgStat['count']; $i = 1; if ($Count > 0) { // If we leave messages on server, try using UIDL if ($mailfetch_lmos == 'on') { Mail_Fetch_Status(_("Fetching UIDL...")); $msglist = $pop3->command_uidl(); if (is_bool($msglist)) { Mail_Fetch_Status(_("Server does not support UIDL.") . ' ' . sm_encode_html_special_chars($pop3->error)); // User asked to leave messages on server, but we can't do that. $pop3->command_quit(); continue; // $mailfetch_lmos = 'off'; } else { // calculate number of new messages for ($j = 1; $j <= sizeof($msglist); $j++) { // do strict comparison ('1111.10' should not be equal to '1111.100') if ($msglist[$j] === $mailfetch_uidl) { $i = $j + 1; break; } }
/** * Internal function used to fetch pop3 mails on login * @since 1.5.1 * @private */ function mail_fetch_login_function() { include_once SM_PATH . 'functions/imap_general.php'; global $username, $data_dir, $imapServerAddress, $imapPort, $imap_stream_options; $mailfetch_newlog = getPref($data_dir, $username, 'mailfetch_newlog'); $outMsg = ''; $mailfetch_server_number = getPref($data_dir, $username, 'mailfetch_server_number'); if (!isset($mailfetch_server_number)) { $mailfetch_server_number = 0; } $mailfetch_cypher = getPref($data_dir, $username, 'mailfetch_cypher'); if ($mailfetch_server_number < 1) { $mailfetch_server_number = 0; } for ($i_loop = 0; $i_loop < $mailfetch_server_number; $i_loop++) { $mailfetch_login_[$i_loop] = getPref($data_dir, $username, "mailfetch_login_{$i_loop}"); $mailfetch_fref_[$i_loop] = getPref($data_dir, $username, "mailfetch_fref_{$i_loop}"); $mailfetch_pass_[$i_loop] = getPref($data_dir, $username, "mailfetch_pass_{$i_loop}"); if ($mailfetch_cypher == 'on') { $mailfetch_pass_[$i_loop] = decrypt($mailfetch_pass_[$i_loop]); } if ($mailfetch_pass_[$i_loop] != '' && ($mailfetch_login_[$i_loop] == 'on' && $mailfetch_newlog == 'on' || $mailfetch_fref_[$i_loop] == 'on')) { // What the heck $mailfetch_server_[$i_loop] = getPref($data_dir, $username, "mailfetch_server_{$i_loop}"); $mailfetch_port_[$i_loop] = getPref($data_dir, $username, "mailfetch_port_{$i_loop}"); $mailfetch_alias_[$i_loop] = getPref($data_dir, $username, "mailfetch_alias_{$i_loop}"); $mailfetch_user_[$i_loop] = getPref($data_dir, $username, "mailfetch_user_{$i_loop}"); $mailfetch_lmos_[$i_loop] = getPref($data_dir, $username, "mailfetch_lmos_{$i_loop}"); $mailfetch_uidl_[$i_loop] = getPref($data_dir, $username, "mailfetch_uidl_{$i_loop}"); $mailfetch_subfolder_[$i_loop] = getPref($data_dir, $username, "mailfetch_subfolder_{$i_loop}"); $mailfetch_auth_[$i_loop] = getPref($data_dir, $username, "mailfetch_auth_{$i_loop}", MAIL_FETCH_AUTH_USER); $mailfetch_type_[$i_loop] = getPref($data_dir, $username, "mailfetch_type_{$i_loop}", MAIL_FETCH_USE_PLAIN); $mailfetch_server = $mailfetch_server_[$i_loop]; $mailfetch_port = $mailfetch_port_[$i_loop]; $mailfetch_user = $mailfetch_user_[$i_loop]; $mailfetch_alias = $mailfetch_alias_[$i_loop]; $mailfetch_pass = $mailfetch_pass_[$i_loop]; $mailfetch_lmos = $mailfetch_lmos_[$i_loop]; $mailfetch_login = $mailfetch_login_[$i_loop]; $mailfetch_uidl = $mailfetch_uidl_[$i_loop]; $mailfetch_subfolder = $mailfetch_subfolder_[$i_loop]; $mailfetch_auth = $mailfetch_auth_[$i_loop]; $mailfetch_type = $mailfetch_type_[$i_loop]; // end of what the heck // $outMsg .= "$mailfetch_alias checked<br />"; // $outMsg .= "$mailfetch_alias_[$i_loop]<br />"; // FIXME: duplicate code with different output destination. $pop3 = new mail_fetch(array('host' => $mailfetch_server, 'port' => $mailfetch_port, 'auth' => $mailfetch_auth, 'tls' => $mailfetch_type, 'timeout' => 60)); if (!empty($pop3->error)) { $outMsg .= _("Warning:") . ' ' . $pop3->error; continue; } $imap_stream = sqimap_login($username, false, $imapServerAddress, $imapPort, 10, $imap_stream_options); /* log into pop server*/ if (!$pop3->login($mailfetch_user, $mailfetch_pass)) { $outMsg .= _("Login Failed:") . ' ' . $pop3->error; continue; } $aMsgStat = $pop3->command_stat(); if (is_bool($aMsgStat)) { $outMsg .= _("Can't get mailbox status:") . ' ' . sm_encode_html_special_chars($pop3->error); continue; } $Count = $aMsgStat['count']; $i = 1; if ($Count > 0) { // If we leave messages on server, try using UIDL if ($mailfetch_lmos == 'on') { $msglist = $pop3->command_uidl(); if (is_bool($msglist)) { $outMsg .= _("Server does not support UIDL.") . ' ' . sm_encode_html_special_chars($pop3->error); // User asked to leave messages on server, but we can't do that. $pop3->command_quit(); continue; // $mailfetch_lmos = 'off'; } else { // calculate number of new messages for ($j = 1; $j <= sizeof($msglist); $j++) { // do strict comparison ('1111.10' should not be equal to '1111.100') if ($msglist[$j] === $mailfetch_uidl) { $i = $j + 1; break; } } } } // fetch list of messages with LIST // we can use else control, but we can also set $mailfetch_lmos // to off if server does not support UIDL. if ($mailfetch_lmos != 'on') { $msglist = $pop3->command_list(); } } if ($Count < $i) { $pop3->command_quit(); continue; } if ($Count == 0) { $pop3->command_quit(); continue; } for (; $i <= $Count; $i++) { if (!ini_get('safe_mode')) { set_time_limit(20); } // 20 seconds per message max $Message = $pop3->command_retr($i); if (is_bool($Message)) { $outMsg .= _("Warning:") . ' ' . sm_encode_html_special_chars($pop3->error); continue; } // check if mail folder is not null and subscribed (There is possible issue with /noselect mail folders) if ($mailfetch_subfolder == '' || !mail_fetch_check_folder($imap_stream, $mailfetch_subfolder)) { fputs($imap_stream, "A3{$i} APPEND INBOX {" . strlen($Message) . "}\r\n"); } else { fputs($imap_stream, "A3{$i} APPEND {$mailfetch_subfolder} {" . strlen($Message) . "}\r\n"); } $Line = fgets($imap_stream, 1024); if (substr($Line, 0, 1) == '+') { fputs($imap_stream, $Message); fputs($imap_stream, "\r\n"); sqimap_read_data($imap_stream, "A3{$i}", false, $response, $message); // Check results of append command $response = implode('', $response); $message = implode('', $message); if ($response != 'OK') { $outMsg .= _("Error Appending Message!") . " " . sm_encode_html_special_chars($message); if ($mailfetch_lmos == 'on') { setPref($data_dir, $username, "mailfetch_uidl_{$i_loop}", $msglist[$i - 1]); } // Destroy msg list in order to prevent UIDL update $msglist = false; // if append fails, don't download other messages break; } if ($mailfetch_lmos != 'on') { $pop3->command_dele($i); } } else { echo "{$Line}"; $outMsg .= _("Error Appending Message!"); } } $pop3->command_quit(); sqimap_logout($imap_stream); if ($mailfetch_lmos == 'on' && is_array($msglist)) { setPref($data_dir, $username, "mailfetch_uidl_{$i_loop}", array_pop($msglist)); } } } if (trim($outMsg) != '') { echo '<br /><font size="1">' . _("Mail Fetch Result:") . "<br />{$outMsg}</font>"; } if ($mailfetch_newlog == 'on') { setPref($data_dir, $username, 'mailfetch_newlog', 'off'); } }