PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Gmail рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

рдЕрдЪреНрдЫреЗ рджрд┐рди, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ Gmail API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рд╡рд┐рд╖рдп рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рдХрд╡рд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рдерд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЬреАрдореЗрд▓ рдореЗрд▓рдмреЙрдХреНрд╕ рдкрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ PHP рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЦреЛрдЬ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдЦреЛрдЬ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬреАрдореЗрд▓ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЦреЛрдЬ рдмрд╛рд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ ": рдмрд╛рдж рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ: 2012/08/10"ред рд╣рд╛рдВ, рдФрд░ API рдХреЗ рдкрд╛рд╕ IMAP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ X-GM- * рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИрдВ

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Google рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИред

рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

class Model_OAuth_Gmail { //   OAuth public function Connect( $callback ); //    Access Token (     ) public function getConnection($accessToken); //      const MODE_NONE = 0; const MODE_MESSAGES = 1; const MODE_THREAD = 2; //  :  (  getConnection ),     public function searchMessages($imapConnection, $params, $mode = 0); } 


рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИред
рдиреЛрдЯ: рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ!

рддреЛ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

рдХрдиреЗрдХреНрдЯ


  public function Connect( $callback ) { $this -> urls['callbackUrl'] = $callback; $session = new Zend_Session_Namespace('OAuth'); $OAuth_Consumer = new Zend_Oauth_Consumer(array_merge($this->config, $this->urls)); try { if (!isset($session -> accessToken)) { if (!isset($session -> requestToken)) { $session -> requestToken = $OAuth_Consumer -> getRequestToken(array('scope' => $this -> scopes), "GET"); $OAuth_Consumer -> redirect(); } else { $session -> accessToken = $OAuth_Consumer -> getAccessToken($_GET, $session -> requestToken); } } $accessToken = $session -> accessToken; $session -> unsetAll(); unset($session); return $accessToken; } catch( exception $e) { $session -> unsetAll(); throw new Zend_Exception("Error occurred. try to reload this page", 5); } } 


рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЧреНрд░рд╛рдВрдЯ рдПрдХреНрд╕реЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google рдкрд░ рдлреЗрдВрдХреЗрдВ, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╡реЗрджрди рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдЗ-рдХреИрдЪ рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдкрд╕ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддрдм рдФрд░ рдЕрдзрд┐рдХ, рдЬрдм рддрдХ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛, рддрдм рддрдХ рд╡рд╣ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ (рдЕрдиреБрд░реЛрдз рдЯреЛрдХрди рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ)!

рдЦреИрд░, рдореИрдВ рд▓рдЧрднрдЧ рд╡рд┐рдиреНрдпрд╛рд╕ рднреВрд▓ рдЧрдпрд╛:

  protected $config = array( 'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 'version' => '1.0', 'consumerKey' => 'anonymous', 'signatureMethod' => 'HMAC-SHA1', 'consumerSecret' => 'anonymous', ); protected $urls = array('callbackUrl' => "", 'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken', 'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken', 'accessTokenUrl' => 'https://www.google.com/accounts/OAuthGetAccessToken' ); protected $scopes = 'https://mail.google.com/ https://www.googleapis.com/auth/userinfo#email'; 


getConnection


  public function getConnection($accessToken) { $config = new Zend_Oauth_Config(); $config -> setOptions($this::config); $config -> setToken(unserialize($user::accessToken)); $config -> setRequestMethod('GET'); $url = 'https://mail.google.com/mail/b/' . $user -> email . '/imap/'; $urlWithXoauth = $url . '?xoauth_requestor_id=' . urlencode($user -> email); $httpUtility = new Zend_Oauth_Http_Utility(); /** * Get an unsorted array of oauth params, * including the signature based off those params. */ $params = $httpUtility -> assembleParams($url, $config, array('xoauth_requestor_id' => $user -> email)); /** * Sort parameters based on their names, as required * by OAuth. */ ksort($params); /** * Construct a comma-deliminated,ordered,quoted list of * OAuth params as required by XOAUTH. * * Example: oauth_param1="foo",oauth_param2="bar" */ $first = true; $oauthParams = ''; foreach ($params as $key => $value) { // only include standard oauth params if (strpos($key, 'oauth_') === 0) { if (!$first) { $oauthParams .= ','; } $oauthParams .= $key . '="' . urlencode($value) . '"'; $first = false; } } /** * Generate SASL client request, using base64 encoded * OAuth params */ $initClientRequest = 'GET ' . $urlWithXoauth . ' ' . $oauthParams; $initClientRequestEncoded = base64_encode($initClientRequest); /** * Make the IMAP connection and send the auth request */ $imap = new Zend_Mail_Protocol_Imap('imap.gmail.com', '993', true); $authenticateParams = array('XOAUTH', $initClientRequestEncoded); $imap -> requestAndResponse('AUTHENTICATE', $authenticateParams); return $imap; } 


рдпрд╣ рд╡рд┐рдзрд┐ Google рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ, рдпрд╣ "рдЬреИрд╕рд╛ рд╣реИ" рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред

рдЦреИрд░, рдЪрд▓реЛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ :

searchMessages


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
  1. рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЦреЛрдЬ рдмрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ
  2. рд╕рдВрджреЗрд╢ рдЖрдИрдбреА рдорд┐рд▓рд╛рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
  3. $ рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ
  4. рд▓рд╛рдн! :)


рдЖрдЗрдЯрдо 1:

  $searchString = 'X-GM-RAW "'; foreach ($params as $key => $value) switch ($key) { // this is dates case "before" : case "after" : $searchString .= $key . ":" . date("Y/m/d", $value) . " "; break; // this is simple strings default : $searchString .= $key . ":" . $value . " "; break; } $searchString = trim($searchString) . '"'; 

рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рддрд╛рд░реАрдЦреЗрдВ рд╣реИрдВ, рдЬреЛ рд╣рдо рдЦреБрдж рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЖрдЗрдЯрдо 2:

  $messages = $imapConnection -> search(array($searchString)); 

рдмрд╕ рд╕рд╣реА рд╣реИ? рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ EXAMINE "INBOX" рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХреАред рдЦреИрд░:

  if (isset($params['in'])){ $imapConnection->examine(strtoupper(($params['in']))); } else { $imapConnection->examine("INBOX"); } $messages = $imapConnection -> search(array($searchString)); 


рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд▓рдЧрднрдЧ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕реЗ рд╣реА рд╣рдореЗрдВ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ (рднреЗрдЬреЗ рдЧрдП) рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛, рд╣рдореЗрдВ рдЧрд▓рдд рдЙрддреНрддрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдФрд░ рдПрдХ рдЙрддреНрддрд░ рдорд┐рд▓рд╛ред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЬреАрдореЗрд▓ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХрд╛ рдирд╛рдо SENT, INBOX, ... рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд▓реЛрдХреЗрд▓-рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдирд╛рдо (oO) рд╣реИрдВред рдореБрдЭреЗ рдлрд╝реЛрд▓реНрдбрд░ рдирд╛рдореЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдмрдирд╛рдиреА рдкрдбрд╝реА:

  protected function getFolder($imap, $folder) { $response = $imap -> requestAndResponse('XLIST "" "*"'); $folders = array(); foreach ($response AS $item) { if ($item[0] != "XLIST") { continue; } $folders[strtoupper(str_replace('\\', '', end($item[1])))] = $item[3]; } return $folders[$folder]; } 


рдмрд╕ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдФрд░ рдЖрдкрдХреЛ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрд╕реЗ рдвреВрдВрдвреЗрдВред рд▓реЗрдХрд┐рди рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдкрд░реАрдХреНрд╖рд╛ рдЕрднреА рднреА рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  if (isset($params['in'])) $imapConnection -> select($this -> getFolder($imapConnection, strtoupper($params['in']))); $messages = $imapConnection -> search(array($searchString)); 

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЖрдИрдбреА рд╣реИ, рдЫреЛрдЯреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИред

  switch ( $mode ) { case $this::MODE_NONE : return $messages; case $this::MODE_MESSAGES : // fetching (get content of messages) $messages = $imapConnection -> requestAndResponse("FETCH " . implode(',', $messages) . " (X-GM-THRID)"); return $messages; case $this::MODE_THREAD : $messages = $imapConnection -> requestAndResponse("FETCH " . implode(',', $messages) . " (X-GM-THRID)"); $storage = new Zend_Mail_Storage_Imap($imapConnection); $storage -> selectFolder( $this -> getFolder($imapConnection, strtoupper($params['in'])) ); $threads = array(); if ($messages) foreach ($messages AS $message) { if (isset($message[2][1])) { $thread_id = $message[2][1]; if (!isset($threads[$thread_id])) { $threads[$thread_id] = array('all' => $imapConnection -> requestAndResponse("SEARCH X-GM-THRID $thread_id"), 'my' => array()); unset($threads[$thread_id]['all'][0][0]); } $threads[$thread_id]['my'][] = $message[0]; } } $result = array(); foreach ($threads as $thread) if (!array_slice($thread['all'], array_search(max($thread['my']), $thread['all']) + 1)) $result[$storage -> getUniqueId(max($thread['my']))] = $storage -> getMessage(max($thread['my'])); return array_reverse($result); // for right order } 


рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдВрдЧреЗ, рджреВрд╕рд░реЗ рдореЗрдВ рд╣рдо рд╕реНрд╡рдпрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддреАрд╕рд░рд╛ рдорд╛рдорд▓рд╛ред

рдпрд╣рд╛рдБ рд╣рдо Zend_Mail_Message рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Zend_Mail_Storage_Imap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ Zend_Mail_Storage_Imap рдиреЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдФрд░ рдирдВрдмрд░рд┐рдВрдЧ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╣рдо рдЪрдпрди рдлрд╝реЛрд▓реНрдбрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓реЗрдВрдЧреЗред

рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд░рд▓ рд╣реИ: рд╣рдореЗрдВ рд╕рдВрджреЗрд╢ рдзрд╛рдЧрд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ: [рд╕рднреА рд╕рдВрджреЗрд╢, рдореЗрд░реЗ рд╕рдВрджреЗрд╢]ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдереНрд░реЗрдб рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рдПрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдирдВрдмрд░рд┐рдВрдЧ рдкреБрд░рд╛рдиреЗ рд╕реЗ рдирдП рдореЗрдВ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд╣ рд╕рдм рд╣реИ! рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рд▓рдЧрд╛ рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In149748/


All Articles