Пример #1
0
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);
 }
Пример #3
0
                                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 &quot;" . $pop3->hostname . "&quot;.</PRE>\n";
                    }
                } else {
                    $error = $result;
                }
            } else {
                $error = $result;
            }
        }
    }
}
if ($error != "") {
    echo "<H2>Error: ", HtmlSpecialChars($error), "</H2>";
}
?>
Пример #4
0
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 &quot;".$pop3->hostname."&quot;.</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);
    }
}
Пример #6
0
 /**
  * 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;
 }