Для работы с Yahoo Web Mail Service, нужно:
- Завести аккаунт на Yahoo.com.
- Зайти на страницу управления вашими проектами и создаем новый. Проект - это сущность, которая является "учетной записью" вашего проекта на сервере Yahoo. Каждый проект имеет Consumer Key и Consumer Secret, по которым и осуществляется доступ к API.
- Скачать здесь PHP-библиотеку для работы с Yahoo Web Mail Service и поместить её в директорию сайта.
- Ниже приведен исходный код скрипта для работы с API:
require_once 'ymclient.php'; define('OA_CONSUMER_KEY', '****************************************************************************************************'); define('OA_CONSUMER_SECRET', '****************************************'); define('OA_CALLBACK_URL', 'http://localhost/'); define('REQUEST_TOKEN_COOKIE_NAME', 'rt'); define('ACCESS_TOKEN_COOKIE_NAME', 'at'); $ymc = new YMClientRequest(OA_CONSUMER_KEY, OA_CONSUMER_SECRET, OA_CALLBACK_URL, '192.168.60.3:3128'); header("Content-type: text/plain\r\n\r\n"); message = new stdclass(); $msg->message->subject = 'Test from Yahoo!'; $msg->message->from = new stdclass(); $msg->message->from->email = '*******@yahoo.com'; $msg->message->to = new stdclass(); $msg->message->to->email = '******@gmail.com'; $msg->message->simplebody = new stdclass(); $msg->message->simplebody->text = 'Hello, World!'; if ($ymc->SendMessage($msg)===false) echo 'error'; else echo 'ok'; class YMClientRequest { function __construct($oaConsumerKey, $oaConsumerSecret, $callbackURL, $proxy=null) { $this->oaConsumerKey = $oaConsumerKey; $this->oaConsumerSecret = $oaConsumerSecret; $this->callbackURL = $callbackURL; $this->ymc = new YMClient($oaConsumerKey, $oaConsumerSecret, $proxy); } function __call($method, $arguments) { $tok = $this->__get_access_token(); $result = $this->ymc->$method($arguments, $tok); $newtok = $this->ymc->oauth_get_refreshed_token(); if($newtok) { setcookie(ACCESS_TOKEN_COOKIE_NAME, YMClient::oauth_token_to_query_string($newtok)); } return $result; } private function __get_access_token() { // Access token exists in a cookie if(isset($_COOKIE[ACCESS_TOKEN_COOKIE_NAME]) && $_COOKIE[ACCESS_TOKEN_COOKIE_NAME]) { parse_str($_COOKIE[ACCESS_TOKEN_COOKIE_NAME], $tok); return $tok; } // Handling a redirect back from login else if(isset($_COOKIE[REQUEST_TOKEN_COOKIE_NAME]) && $_COOKIE[REQUEST_TOKEN_COOKIE_NAME] && isset($_REQUEST['oauth_verifier']) && $_REQUEST['oauth_verifier'] && isset($_REQUEST['oauth_token']) && $_REQUEST['oauth_token']) { $tok = YMClient::oauth_token_from_query_string( $_COOKIE[REQUEST_TOKEN_COOKIE_NAME]); if($tok['oauth_token'] != $_REQUEST['oauth_token']) throw new Exception("Cookie and URL disagree " ."about request token value"); $tok['oauth_verifier'] = $_REQUEST['oauth_verifier']; $newtok = $this->ymc->oauth_get_access_token($tok); setcookie(REQUEST_TOKEN_COOKIE_NAME, "", time()-3600); setcookie(ACCESS_TOKEN_COOKIE_NAME, YMClient::oauth_token_to_query_string($newtok)); return $newtok; } else { list ($tok, $url) = $this->ymc->oauth_get_request_token( $this->callbackURL); setcookie(REQUEST_TOKEN_COOKIE_NAME, YMClient::oauth_token_to_query_string($tok)); header("Location: $url"); } } }
В приведенном выше фрагменте используется прокси для подключению с API. Изначально библиотека этого не предусматривала, поэтому её пришлось несколько модифицировать. Исходный код модифицированной версии можно скачать здесь. Этот фрагмент отправляет электронное сообщение, что и требовалось.
- Аутентификация осуществляется через OAuth.