Example #1
0
 /**
  * @param string $sServerName
  * @param int $iPort
  * @param int $iSecurityType = \MailSo\Net\Enumerations\ConnectionSecurityType::AUTO_DETECT
  * @param bool $bVerifySsl = false
  *
  * @return void
  *
  * @throws \MailSo\Base\Exceptions\InvalidArgumentException
  * @throws \MailSo\Net\Exceptions\SocketAlreadyConnectedException
  * @throws \MailSo\Net\Exceptions\SocketCanNotConnectToHostException
  */
 public function Connect($sServerName, $iPort, $iSecurityType = \MailSo\Net\Enumerations\ConnectionSecurityType::AUTO_DETECT, $bVerifySsl = false)
 {
     if (!\MailSo\Base\Validator::NotEmptyString($sServerName, true) || !\MailSo\Base\Validator::PortInt($iPort)) {
         $this->writeLogException(new \MailSo\Base\Exceptions\InvalidArgumentException(), \MailSo\Log\Enumerations\Type::ERROR, true);
     }
     if ($this->IsConnected()) {
         $this->writeLogException(new Exceptions\SocketAlreadyConnectedException(), \MailSo\Log\Enumerations\Type::ERROR, true);
     }
     $sServerName = \trim($sServerName);
     $sErrorStr = '';
     $iErrorNo = 0;
     $this->sConnectedHost = $sServerName;
     $this->iConnectedPort = $iPort;
     $this->iSecurityType = $iSecurityType;
     $this->bSecure = \MailSo\Net\Enumerations\ConnectionSecurityType::UseSSL($this->iConnectedPort, $this->iSecurityType);
     $this->sConnectedHost = \in_array(\strtolower(\substr($this->sConnectedHost, 0, 6)), array('ssl://', 'tcp://')) ? \substr($this->sConnectedHost, 6) : $this->sConnectedHost;
     $this->sConnectedHost = ($this->bSecure ? 'ssl://' : 'tcp://') . $this->sConnectedHost;
     //		$this->sConnectedHost = ($this->bSecure ? 'ssl://' : '').$this->sConnectedHost;
     if (!$this->bSecure && \MailSo\Net\Enumerations\ConnectionSecurityType::SSL === $this->iSecurityType) {
         $this->writeLogException(new \MailSo\Net\Exceptions\SocketUnsuppoterdSecureConnectionException('SSL isn\'t supported: (' . \implode(', ', \stream_get_transports()) . ')'), \MailSo\Log\Enumerations\Type::ERROR, true);
     }
     $this->iStartConnectTime = \microtime(true);
     $this->writeLog('Start connection to "' . $this->sConnectedHost . ':' . $this->iConnectedPort . '"', \MailSo\Log\Enumerations\Type::NOTE);
     //		$this->rConnect = @\fsockopen($this->sConnectedHost, $this->iConnectedPort,
     //			$iErrorNo, $sErrorStr, $this->iConnectTimeOut);
     $bVerifySsl = !!$bVerifySsl;
     $aStreamContextSettings = array('ssl' => array('verify_host' => $bVerifySsl, 'verify_peer' => $bVerifySsl, 'verify_peer_name' => $bVerifySsl, 'allow_self_signed' => !$bVerifySsl));
     \MailSo\Hooks::Run('Net.NetClient.StreamContextSettings/Filter', array(&$aStreamContextSettings));
     $rStreamContext = \stream_context_create($aStreamContextSettings);
     \set_error_handler(array(&$this, 'capturePhpErrorWithException'));
     try {
         $this->rConnect = \stream_socket_client($this->sConnectedHost . ':' . $this->iConnectedPort, $iErrorNo, $sErrorStr, $this->iConnectTimeOut, STREAM_CLIENT_CONNECT, $rStreamContext);
     } catch (\Exception $oExc) {
         $sErrorStr = $oExc->getMessage();
         $iErrorNo = $oExc->getCode();
     }
     \restore_error_handler();
     if (!\is_resource($this->rConnect)) {
         $this->writeLogException(new Exceptions\SocketCanNotConnectToHostException(\MailSo\Base\Utils::ConvertSystemString($sErrorStr), (int) $iErrorNo, 'Can\'t connect to host "' . $this->sConnectedHost . ':' . $this->iConnectedPort . '"'), \MailSo\Log\Enumerations\Type::NOTICE, true);
     }
     $this->writeLog(\microtime(true) - $this->iStartConnectTime . ' (raw connection)', \MailSo\Log\Enumerations\Type::TIME);
     if ($this->rConnect) {
         if (\MailSo\Base\Utils::FunctionExistsAndEnabled('stream_set_timeout')) {
             @\stream_set_timeout($this->rConnect, $this->iSocketTimeOut);
         }
     }
 }
Example #2
0
 /**
  * @return string
  */
 public static function SetupDefaultMailSoConfig()
 {
     if (\class_exists('MailSo\\Config')) {
         if (\RainLoop\Api::Config()->Get('labs', 'disable_iconv_if_mbstring_supported', false) && \MailSo\Base\Utils::IsMbStringSupported() && \MailSo\Config::$MBSTRING) {
             \MailSo\Config::$ICONV = false;
         }
         \MailSo\Config::$MessageListFastSimpleSearch = !!\RainLoop\Api::Config()->Get('labs', 'imap_message_list_fast_simple_search', true);
         \MailSo\Config::$MessageListCountLimitTrigger = (int) \RainLoop\Api::Config()->Get('labs', 'imap_message_list_count_limit_trigger', 0);
         \MailSo\Config::$MessageListDateFilter = (int) \RainLoop\Api::Config()->Get('labs', 'imap_message_list_date_filter', 0);
         \MailSo\Config::$MessageListPermanentFilter = \trim(\RainLoop\Api::Config()->Get('labs', 'imap_message_list_permanent_filter', ''));
         \MailSo\Config::$MessageAllHeaders = !!\RainLoop\Api::Config()->Get('labs', 'imap_message_all_headers', false);
         \MailSo\Config::$LargeThreadLimit = (int) \RainLoop\Api::Config()->Get('labs', 'imap_large_thread_limit', 50);
         \MailSo\Config::$BoundaryPrefix = '_RainLoop_';
         \MailSo\Config::$SystemLogger = \RainLoop\Api::Logger();
         $sSslCafile = \RainLoop\Api::Config()->Get('ssl', 'cafile', '');
         $sSslCapath = \RainLoop\Api::Config()->Get('ssl', 'capath', '');
         if (!empty($sSslCafile) || !empty($sSslCapath)) {
             \MailSo\Hooks::Add('Net.NetClient.StreamContextSettings/Filter', function (&$aStreamContextSettings) use($sSslCafile, $sSslCapath) {
                 if (isset($aStreamContextSettings['ssl']) && \is_array($aStreamContextSettings['ssl'])) {
                     if (empty($aStreamContextSettings['ssl']['cafile']) && !empty($sSslCafile)) {
                         $aStreamContextSettings['ssl']['cafile'] = $sSslCafile;
                     }
                     if (empty($aStreamContextSettings['ssl']['capath']) && !empty($sSslCapath)) {
                         $aStreamContextSettings['ssl']['capath'] = $sSslCapath;
                     }
                 }
             });
         }
     }
 }