Получение писем из Gmail через OAuth2

Я пытаюсь получать электронные письма из gmail, используя PHP и CodeIgniter, а также библиотеку OAuth2. Я уже настроил OAuth2 для получения токена доступа пользователей и т. д. Я могу получить информацию о пользователях, выполнив

public function get_user_info(OAuth2_Token_Access $token)
{
    $url = 'https://www.googleapis.com/oauth2/v1/userinfo?alt=json&'.http_build_query(array(
        'access_token' => $token->access_token,
    ));

    $user = json_decode(file_get_contents($url), true);
    return array(
        'uid' => $user['id'],
        'nickname' => url_title($user['name'], '_', true),
        'name' => $user['name'],
        'first_name' => $user['given_name'],
        'last_name' => $user['family_name'],
        'email' => $user['email'],
        'location' => null,
        'image' => (isset($user['picture'])) ? $user['picture'] : null,
        'description' => null,
        'urls' => array(),
    );
}

Что я хочу сделать сейчас, так это получить несколько писем. Я искал в гугле какой-то код для получения электронной почты, но единственное, что я вижу, это https://mail.google.com/mail/feed/atom/. Я нашел это на игровой площадке Google OAuth2, но не могу понять, как его использовать, кроме прямого перехода к нему.

Может ли кто-нибудь дать мне несколько предложений? В идеале я хочу получать электронные письма, которые не просто новые (похоже, это то, что делает ссылка выше).


person iamjonesy    schedule 02.10.2012    source источник


Ответы (1)


Используя интерфейс на основе REST, в настоящее время вы можете получить только ленту непрочитанных сообщений. Если вы хотите получить доступ ко всем электронным письмам пользователя, вы должны использовать IMAP. Компания Google разработала метод аутентификации IMAP/SMTP с использованием OAuth2, который вы можете использовать.

person Jan Gerlinger    schedule 02.10.2012
comment
Привет, Ян, спасибо. Я так понимаю, для этого требуется разблокированный порт 993? Для входящих подключений к серверу IMAP по адресу imap.gmail.com:993 требуется SSL. Мой хостинг-провайдер не разблокирует это для меня, поэтому я решил вместо этого попробовать маршрут OAuth. - person iamjonesy; 02.10.2012
comment
Я не думаю, что это будет проблемой, так как ваш сервер не должен принимать входящие соединения через порт 993, но этот вопрос, вероятно, лучше подходит для serverfault. ком - person Jan Gerlinger; 02.10.2012
comment
Извините, я имел в виду, что исходящее соединение с 993 заблокировано моей хостинговой компанией. Я отправлю вопрос на SF. - person iamjonesy; 02.10.2012
comment
Привет, Джен, ты знаешь, можно ли передавать данные пользователей при использовании ленты непрочитанных сообщений? - person iamjonesy; 03.10.2012
comment
Извините, что вы хотите передать и где? - person Jan Gerlinger; 03.10.2012
comment
В идеале я хочу искать электронные письма из почтовых ящиков нескольких пользователей. Поэтому мне нужно сообщить Google, в почтовом ящике какого пользователя я хочу выполнить поиск. - person iamjonesy; 03.10.2012
comment
После того как пользователь авторизует ваше приложение, вы получаете токен доступа и токен обновления для каждого пользователя. Если вы используете токен доступа для пользователя А для аутентификации в IMAP, вы получаете доступ к почтовому ящику пользователя А, если вы используете токен доступа для пользователя Б для аутентификации в IMAP, вы получаете доступ к почтовому ящику пользователя B. - person Jan Gerlinger; 03.10.2012
comment
Извините, я имел в виду, что mail.google.com/mail/feed/atom похоже, не принимает никаких параметров, как пример в моем вопросе - person iamjonesy; 03.10.2012
comment
Вы должны включить заголовок авторизации OAuth в свой HTTP-запрос. См. developers.google.com/accounts/docs/, как это должно выглядеть. подобно. Предоставление токена доступа в строке запроса AFAIK здесь не работает. - person Jan Gerlinger; 03.10.2012