function hesk_testPOP3() { global $hesk_settings, $hesklang, $set; $set['pop3_host_name'] = hesk_input(hesk_POST('s_pop3_host_name', 'mail.domain.com')); $set['pop3_host_port'] = intval(hesk_POST('s_pop3_host_port', 110)); $set['pop3_tls'] = empty($_POST['s_pop3_tls']) ? 0 : 1; $set['pop3_keep'] = empty($_POST['s_pop3_keep']) ? 0 : 1; $set['pop3_user'] = hesk_input(hesk_POST('s_pop3_user')); $set['pop3_password'] = hesk_input(hesk_POST('s_pop3_password')); // Initiate POP3 class and set parameters require_once HESK_PATH . 'inc/mail/pop3.php'; $pop3 = new pop3_class(); $pop3->hostname = $set['pop3_host_name']; $pop3->port = $set['pop3_host_port']; $pop3->tls = $set['pop3_tls']; $pop3->debug = 1; $connection_OK = false; ob_start(); // Connect to POP3 if (($error = $pop3->Open()) == "") { // Authenticate if (($error = $pop3->Login($set['pop3_user'], hesk_htmlspecialchars_decode(stripslashes($set['pop3_password'])))) == "") { if (($error = $pop3->Close()) == "") { // Connection OK $connection_OK = true; } } } if ($error != '') { global $pop3_error, $pop3_log; $pop3_error = $error; $pop3_log = ob_get_contents(); } ob_end_clean(); return $connection_OK; }
/** * Test POP3 * * @return @e void */ protected function test() { require_once IPS_KERNEL_PATH . '/pop3class/pop3.php'; /*noLibHook*/ $pop3 = new pop3_class(); $pop3->hostname = $this->settings['pop3_server']; $pop3->port = $this->settings['pop3_port']; $pop3->tls = $this->settings['pop3_tls']; $pop3->realm = ''; $pop3->workstation = ''; $pop3->authentication_mechanism = 'USER'; $pop3->debug = FALSE; $pop3->html_debug = FALSE; $pop3->join_continuation_header_lines = TRUE; $user = $this->settings['pop3_user']; $password = $this->settings['pop3_password']; $apop = FALSE; $open = $pop3->Open(); if ($open != '') { $this->registry->output->global_error = '<strong>' . $this->lang->words['pop3_err_connect'] . '</strong><br /> ' . $open; return; } $login = $pop3->Login($user, $password, $apop); if ($login != '') { $this->registry->output->global_error = '<strong>' . $this->lang->words['pop3_err_login'] . '</strong><br /> ' . $login; return; } $messages = NULL; $size = NULL; $pop3->Statistics($messages, $size); if ($messages === NULL or $size === NULL) { $this->registry->output->global_error = $this->lang->words['pop3_err_stats']; } $pop3->Close(); $this->registry->output->global_message = sprintf($this->lang->words['pop3_okay'], $messages); }
echo "<PRE>", HtmlSpecialChars($headers[$line]), "</PRE>\n"; } echo "<PRE>---Message headers ends above---\n---Message body starts below---</PRE>\n"; for ($line = 0; $line < count($body); $line++) { echo "<PRE>", HtmlSpecialChars($body[$line]), "</PRE>\n"; } echo "<PRE>---Message body ends above---</PRE>\n"; if (($error = $pop3->DeleteMessage(1)) == "") { echo "<PRE>Marked message 1 for deletion.</PRE>\n"; if (($error = $pop3->ResetDeletedMessages()) == "") { echo "<PRE>Resetted the list of messages to be deleted.</PRE>\n"; } } } } if ($error == "" && ($error = $pop3->Close()) == "") { echo "<PRE>Disconnected from the POP3 server "" . $pop3->hostname . "".</PRE>\n"; } } else { $error = $result; } } else { $error = $result; } } } } if ($error != "") { echo "<H2>Error: ", HtmlSpecialChars($error), "</H2>"; } ?>
function auth_user_login($auth, $test_username, $test_password, $settings) { global $webDir; $testauth = false; switch ($auth) { case '1': $unamewhere = get_config('case_insensitive_usernames') ? "= " : "COLLATE utf8_bin = "; $result = Database::get()->querySingle("SELECT password FROM user WHERE username {$unamewhere} ?s", $test_username); if ($result) { foreach ($result as $myrow) { $hasher = new PasswordHash(8, false); if ($hasher->CheckPassword($test_password, $myrow->password)) { $testauth = true; } else { if (strlen($myrow->password) < 60 && md5($test_password) == $myrow->password) { $testauth = true; // password is in old md5 format, update transparently $password_encrypted = $hasher->HashPassword($test_password); Database::get()->query("UPDATE user SET password = ?s WHERE username COLLATE utf8_bin = ?s", $password_encrypted, $test_username); } } } } break; case '2': $pop3 = new pop3_class(); $pop3->hostname = $settings['pop3host']; // POP 3 server host name $pop3->port = 110; // POP 3 server host port $user = $test_username; // Authentication user name $password = $test_password; // Authentication password $pop3->realm = ''; // Authentication realm or domain $pop3->workstation = ''; // Workstation for NTLM authentication $apop = 0; // Use APOP authentication $pop3->authentication_mechanism = 'USER'; // SASL authentication mechanism $pop3->debug = 0; // Output debug information $pop3->html_debug = 1; // Debug information is in HTML $pop3->join_continuation_header_lines = 1; // Concatenate headers split in multiple lines if (($error = $pop3->Open()) == '') { if (($error = $pop3->Login($user, $password, $apop)) == '') { if ($error == '' and ($error = $pop3->Close()) == '') { $testauth = true; } } } if ($error != '') { $testauth = false; } break; case '3': $imaphost = $settings['imaphost']; $imapauth = imap_auth($imaphost, $test_username, $test_password); if ($imapauth) { $testauth = true; } break; case '4': $ldap = ldap_connect($settings['ldaphost']); if (!$ldap) { $GLOBALS['auth_errors'] = 'Error connecting to LDAP host'; return false; } else { // LDAP connection established - now search for user dn @ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); if (@ldap_bind($ldap, $settings['ldapbind_dn'], $settings['ldapbind_pw'])) { if (empty($settings['ldap_login_attr2'])) { $search_filter = "({$settings['ldap_login_attr']}={$test_username})"; } else { $search_filter = "(|({$settings['ldap_login_attr']}={$test_username})\n ({$settings['ldap_login_attr2']}={$test_username}))"; } $userinforequest = ldap_search($ldap, $settings['ldap_base'], $search_filter); if ($entry_id = ldap_first_entry($ldap, $userinforequest)) { $user_dn = ldap_get_dn($ldap, $entry_id); if (@ldap_bind($ldap, $user_dn, $test_password)) { $testauth = true; $userinfo = ldap_get_entries($ldap, $userinforequest); if ($userinfo['count'] == 1) { $lastname = get_ldap_attribute($userinfo, 'sn'); $firstname = get_ldap_attribute($userinfo, 'givenname'); if (empty($firstname)) { $cn = get_ldap_attribute($userinfo, 'cn'); $firstname = trim(str_replace($lastname, '', $cn)); } $GLOBALS['auth_user_info'] = array('firstname' => $firstname, 'lastname' => $lastname, 'email' => get_ldap_attribute($userinfo, 'mail')); } } } } else { $GLOBALS['auth_errors'] = ldap_error($ldap); return false; } @ldap_unbind($ldap); } break; case '5': $link = new Database($settings['dbhost'], $settings['dbname'], $settings['dbuser'], $settings['dbpass']); if ($link) { if ($link) { $res = $link->querySingle("SELECT `{$settings['dbfieldpass']}`\n FROM `{$settings['dbtable']}`\n WHERE `{$settings['dbfielduser']}` = ?s", $test_username); if ($res) { $testauth = external_DB_Check_Pass($test_password, $res->{$settings}['dbfieldpass'], $settings['dbpassencr']); } } } break; case '6': $path = "{$webDir}secure/"; if (!file_exists($path)) { if (!mkdir($path, 0700)) { $testauth = false; } } else { $indexfile = $path . 'index.php'; $index_regfile = $path . 'index_reg.php'; // creation of secure/index.php file $f = fopen($indexfile, 'w'); $filecontents = '<?php session_start(); $_SESSION[\'shib_email\'] = ' . $settings['shibemail'] . '; $_SESSION[\'shib_uname\'] = ' . $settings['shibuname'] . '; $_SESSION[\'shib_surname\'] = ' . $settings['shibcn'] . '; header("Location: ../index.php"); '; if (fwrite($f, $filecontents)) { $testauth = true; } fclose($f); // creation of secure/index_reg.php // used in professor request registration process via shibboleth $f = fopen($index_regfile, "w"); $filecontents = '<?php session_start(); $_SESSION[\'shib_email\'] = ' . $settings['shibemail'] . '; $_SESSION[\'shib_uname\'] = ' . $settings['shibuname'] . '; $_SESSION[\'shib_surname\'] = ' . $settings['shibcn'] . '; $_SESSION[\'shib_status\'] = $_SERVER[\'unscoped-affiliation\']; $_SESSION[\'shib_auth\'] = true; header("Location: ../modules/auth/altsearch.php" . (isset($_GET["p"]) && $_GET["p"]? "?p=1": "")); '; if (fwrite($f, $filecontents)) { $testauth = true; } fclose($f); } break; case '7': cas_authenticate($auth); if (phpCAS::checkAuthentication()) { $testauth = true; } break; } return $testauth; }
function JB_monitor_mail_box() { $pop3 = new pop3_class(); $pop3->hostname = MON_EMAIL_POP_SERVER; /* POP 3 server host name */ $pop3->port = MON_POP3_PORT; /* POP 3 server host port */ $user = MON_EMAIL_POP_USER; /* Authentication user name */ $password = MON_EMAIL_POP_PASS; /* Authentication password */ $pop3->realm = ""; /* Authentication realm or domain */ $pop3->workstation = ""; /* Workstation for NTLM authentication */ $apop = 0; /* Use APOP authentication */ $pop3->authentication_mechanism = "USER"; /* SASL authentication mechanism */ $pop3->debug = 0; /* Output debug information */ $pop3->html_debug = 0; /* Debug information is in HTML */ if ($_REQUEST['scan'] != '') { echo "opening Pop Connection"; } if (($error = $pop3->Open()) == "") { if (($error = $pop3->Login($user, $password, $apop)) == "") { if (($error = $pop3->Statistics($messages, $size)) == "") { if ($_REQUEST['scan'] != '') { echo "<PRE>There are {$messages} messages in the mail box with a total of {$size} bytes.</PRE>\n"; echo "<h3>Pop3 connection was successful.</h3>"; } $result = $pop3->ListMessages("", 0); if (GetType($result) == "array") { $result = $pop3->ListMessages('', 1); // list all, unique if (is_array($result)) { for (Reset($result), $message = 0; $message < count($result); Next($result), $message++) { if (($error = $pop3->RetrieveMessage(key($result), $headers, $body, -1)) == "") { $head_txt = ''; $body_txt = ''; for ($line = 0; $line < count($headers); $line++) { $head_txt .= $headers[$line] . "\n"; } preg_match('#Delivery-date: (.+)?\\n#i', $head_txt, $m); $ts = strtotime($m[1]); if (intval(MON_DEL_DAYS) > 0) { if (time() - $ts > 60 * 60 * 24 * MON_DEL_DAYS) { // more than 30 days if (($error = $pop3->DeleteMessage(key($result))) == "") { continue; } } } for ($line = 0; $line < count($body); $line++) { $body_txt .= $body[$line] . "\n"; } $from_name = JB_mon_extract_from_name($head_txt); if ($failed_rec = JB_mon_extract_recipient($head_txt . $body_txt)) { if (JB_match_mon_from_pattern($from_name) && JB_match_mon_body_pattern($body_txt)) { if (JB_mon_match_user_email($failed_rec)) { $user_id = JB_mon_unsubscribe_user($failed_rec); if (($error = $pop3->DeleteMessage(key($result))) == "") { JB_mon_append_log($failed_rec, 'C'); } } if (JB_mon_match_employer_email($failed_rec)) { $user_id = JB_mon_unsubscribe_employer($failed_rec); if (($error = $pop3->DeleteMessage(key($result))) == "") { //echo "dlete ".key($result)."<br>"; JB_mon_append_log($failed_rec, 'E'); } } } } } } if ($error == "" && ($error = $pop3->Close()) == "") { //echo "<PRE>Disconnected from the POP3 server "".$pop3->hostname."".</PRE>\n"; } } else { $error = $result; } } else { $error = $result; } } } } // proces mail_monitor_log $now = gmdate("Y-m-d H:i:s"); if (intval(MON_LOG_DAYS) > 0) { $sql = "DELETE FROM mail_monitor_log WHERE DATE_SUB('{$now}', INTERVAL " . MON_LOG_DAYS . " DAY) >= `date` "; JB_mysql_query($sql); } }
/** * Get the emails from a given server * * @param string $server * @param string $user * @param string $pass * @param boolean $delete whether to delete the emails after * retrieval */ public function readEmailFrom($server, $user, $pass, $delete = true, $secure = false) { $parts = split(":", $server); $port = "110"; if (count($parts) == 2) { $port = $parts[1]; } if ($port == "995") { $secure = true; } $server = $parts[0]; // Connect to mail server include_once dirname(__FILE__) . '/lib/pop3.phpclasses.php'; $pop3 = new pop3_class(); $pop3->hostname = $server; $pop3->port = $port; // $pop3->join_continuation_header_lines=1; if ($secure) { $pop3->tls = 1; } if (($error = $pop3->open()) != "") { throw new Exception($error); } if (($error = $pop3->login($user, $pass)) != "") { throw new Exception($error); } $messageInfo = $pop3->ListMessages("", 0); $pop3->Statistics($messages, $size); $count = $messages; $emails = array(); $this->log->debug("Retrieved {$count} new emails"); for ($i = 1; $i <= $count; $i++) { // If result at $i - 1 > 50000, just delete, it's too big to process $size = $messageInfo[$i]; if ($size > za()->getConfig('email_max_size', 100000)) { // skip for now, NEED TO SEND A BOUNCEBACK! $pop3->DeleteMessage($i); $this->log->err("Deleted email of size {$size}"); continue; } if (($error = $pop3->RetrieveMessage($i, $headers, $body, -1)) != "") { $this->log->err("Failed retrieving message: " . $error); continue; } $email = implode("\r\n", $headers); $email .= "\r\n\r\n" . implode("\r\n", $body); $email .= "\r\n."; $decoder = new Mail_mimeDecode($email); $email = $decoder->decode(array('include_bodies' => true)); if ($delete) { // $this->popService->delete_mail($i); if (($error = $pop3->DeleteMessage($i)) != "") { $this->log->err("Failed deleting message {$i}: " . $error); continue; } $this->log->debug("Deleted message {$i}"); } else { $this->log->debug("No messages being deleted"); } if ($email !== false) { if ($this->isAutoReply($email)) { // log and quit $from = ifset($email->headers, 'from', "unknown@email"); $this->log->warn("AutoReply email from " . $from . " has been ignored"); } else { $emails[] = $email; } } else { $this->log->err("Failed decoding email {$i}"); } } $pop3->Close(); return $emails; }