晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/public_html/crm/modules/Settings/MailConverter/handlers/ |
Upload File : |
<?php
/*********************************************************************************
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*
********************************************************************************/
require_once('modules/Settings/MailConverter/handlers/MailScannerInfo.php');
require_once('modules/Settings/MailConverter/handlers/MailRecord.php');
/**
* Class to work with server mailbox.
*/
class Vtiger_MailBox {
// Mailbox credential information
var $_scannerinfo = false;
// IMAP connection instance
var $_imap = false;
// IMAP url to use for connecting
var $_imapurl = false;
// IMAP folder currently opened
var $_imapfolder = false;
// Should we need to expunge while closing imap connection?
var $_needExpunge = false;
// Mailbox crendential information (as a map)
var $_mailboxsettings = false;
/** DEBUG functionality. */
var $debug = false;
function log($message, $force=false) {
global $log;
if($log && ($force || $this->debug)) { $log->debug($message); }
else if( ($force || $this->debug) ) echo "$message\n";
}
/**
* Constructor
*/
function __construct($scannerinfo) {
$this->_scannerinfo = $scannerinfo;
$this->_mailboxsettings = $scannerinfo->getAsMap();
if($this->_mailboxsettings['ssltype'] == '') $this->_mailboxsettings['ssltype'] = 'notls';
if($this->_mailboxsettings['sslmethod']== '') $this->_mailboxsettings['sslmethod'] = 'novalidate-cert';
$server = $this->_mailboxsettings['server'];
$serverPort = explode(':', $server);
if(empty($serverPort[1])) {
if($this->_mailboxsettings['protocol'] == 'pop3') { $port = '110'; }
else {
if($this->_mailboxsettings['ssltype'] == 'tls' ||
$this->_mailboxsettings['ssltype'] == 'ssl') {
$port = '993';
}
else $port = '143';
}
} else {
$port = $serverPort[1];
$this->_mailboxsettings['server'] = $serverPort[0];
}
$this->_mailboxsettings['port'] = $port;
if($this->_scannerinfo->markas == "UNCHANGED") $this->_mailboxsettings['readonly'] = "/readonly";
}
/**
* Connect to mail box folder.
*/
function connect($folder='INBOX') {
$imap = false;
$mailboxsettings = $this->_mailboxsettings;
$isconnected = false;
// Connect using last successful url
if($mailboxsettings['connecturl']) {
$connecturl = $mailboxsettings['connecturl'];
if($mailboxsettings['readonly']) $connecturl = str_replace("}", "/readonly}", $connecturl);
$this->log("Trying to connect using connecturl $connecturl$folder", true);
$imap = @imap_open("$connecturl$folder", $mailboxsettings['username'], $mailboxsettings['password']);
if($imap) {
$this->_imapurl = $connecturl;
$this->_imapfolder = $folder;
$isconnected = true;
$this->log("Successfully connected", true);
}
}
if(!$imap) {
$connectString = '{'. "$mailboxsettings[server]:$mailboxsettings[port]/$mailboxsettings[protocol]/$mailboxsettings[ssltype]/$mailboxsettings[sslmethod]" .$mailboxsettings[readonly] ."}";
$connectStringShort = '{'. "$mailboxsettings[server]/$mailboxsettings[protocol]:$mailboxsettings[port]" .$mailboxsettings[readonly] ."}";
$this->log("Trying to connect using $connectString$folder", true);
if(!$imap = @imap_open("$connectString$folder", $mailboxsettings[username], $mailboxsettings[password])) {
$this->log("Connect failed using $connectString$folder, trying with $connectStringShort$folder...", true);
$imap = @imap_open("$connectStringShort$folder", $mailboxsettings[username], $mailboxsettings[password]);
if($imap) {
$this->_imapurl = $connectStringShort;
$this->_imapfolder = $folder;
$isconnected = true;
$this->log("Successfully connected", true);
} else {
$this->log("Connect failed using $connectStringShort$folder", true);
}
} else {
$this->_imapurl = $connectString;
$this->_imapfolder = $folder;
$isconnected = true;
$this->log("Successfully connected", true);
}
}
$this->_imap = $imap;
return $isconnected;
}
/**
* Open the mailbox folder.
* @param $folder Folder name to open
* @param $reopen set to true for re-opening folder if open (default=false)
* @return true if connected, false otherwise
*/
function open($folder, $reopen=false) {
/** Avoid re-opening of the box if not requested. */
if(!$reopen && ($folder == $this->_imapfolder)) return true;
if(!$this->_imap) return $this->connect($folder);
$mailboxsettings = $this->_mailboxsettings;
$isconnected = false;
$connectString = $this->_imapurl;
$this->log("Trying to open folder using $connectString$folder");
$imap = @imap_open("$connectString$folder", $mailboxsettings[username], $mailboxsettings[password]);
if($imap) {
// Perform cleanup task before re-initializing the connection
$this->close();
$this->_imapfolder = $folder;
$this->_imap = $imap;
$isconnected = true;
}
return $isconnected;
}
/**
* Get the mails based on searchquery.
* @param $folder Folder in which mails to be read.
* @param $searchQuery IMAP query, (default false: fetches mails newer from lastscan)
* @return imap_search records or false
*/
function search($folder, $searchQuery=false) {
if(!$searchQuery) {
$lastscanOn = $this->_scannerinfo->getLastscan($folder);
$searchfor = $this->_scannerinfo->searchfor;
if($searchfor && $lastscanOn) {
if($searchfor == 'ALL') {
$searchQuery = "SINCE $lastscanOn";
} else {
$searchQuery = "$searchfor SINCE $lastscanOn";
}
} else {
$searchQuery = $lastscanOn? "SINCE $lastscanOn" : "BEFORE ". $this->_scannerinfo->dateBasedOnMailServerTimezone('d-M-Y');
}
}
if($this->open($folder)) {
$this->log("Searching mailbox[$folder] using query: $searchQuery");
return imap_search($this->_imap, $searchQuery);
}
return false;
}
/**
* Get folder names (as list) for the given mailbox connection
*/
function getFolders() {
$folders = false;
if($this->_imap) {
$imapfolders = imap_list($this->_imap, $this->_imapurl, '*');
if($imapfolders) {
foreach($imapfolders as $imapfolder) {
$folders[] = substr($imapfolder, strlen($this->_imapurl));
}
} else {
return imap_last_error();
}
}
return $folders;
}
/**
* Fetch the email based on the messageid.
* @param $messageid messageid of the email
* @param $fetchbody set to false to defer fetching the body, (default: true)
*/
function getMessage($messageid, $fetchbody=true) {
return new Vtiger_MailRecord($this->_imap, $messageid, $fetchbody);
}
/**
* Mark the message in the mailbox.
*/
function markMessage($messageid) {
$markas = $this->_scannerinfo->markas;
if ($this->_imap && $markas) {
if (strtoupper($markas) == 'SEEN') {
$markas = "\\Seen";
imap_setflag_full($this->_imap, $messageid, $markas);
} else if (strtoupper($markas) == 'UNSEEN') {
imap_clearflag_full($this->_imap, $messageid, "\\Seen");
}
}
}
/**
* Close the open IMAP connection.
*/
function close() {
if($this->_needExpunge) {
imap_expunge($this->_imap);
}
$this->_needExpunge = false;
if($this->_imap) {
imap_close($this->_imap);
$this->_imap = false;
}
}
}
?>