2016-06-23 5 views
1

Я работаю над этим уже 3 дня, пытаясь различными способами, охотясь через gmail api docs и stackoverflow, но я все еще не уверен, что это даже возможно.gmail-api php без UI

Я пытаюсь отправить электронную почту с помощью gmail api в стиле cron. (не буквально cron, но похоже). Таким образом, взаимодействие с пользователем отсутствует.

Я установил учетные данные на странице https://console.developers.google.com/apis/credentials, но когда я пытаюсь ее использовать, я получаю ошибки. Я также запускал quickstart.php от https://developers.google.com/gmail/api/quickstart/php#step_2_install_the_google_client_library, но похоже, что учетные данные, которые он создает, истекают после 3600 секунд. Я также не уверен, как использовать их, поскольку у него нет похожих ключей, как у другого файла учетных данных.

И затем я увидел на странице учетных данных, если вы попытаетесь создать новый набор учетных данных для gmail api, для работы cron это не позволит вам. Он просто говорит: «Пользовательские данные не могут быть доступны с платформы без пользовательского интерфейса, потому что для взаимодействия требуется вход для входа».

Мой вопрос: возможно ли даже запустить задание cron для отправки электронной почты с помощью gmail api без создания моих собственных классов, которые реализуют завиток, чтобы читать и очищать веб-страницы?

Редактировать: Я ценю помощь каждого, но я просто хочу посмотреть, действительно ли кто-то это сделал. Пока никто этого не признает. Я просмотрел учетные данные уровня сервиса. Я просмотрел учетные данные пользовательского уровня. Я пробовал быстро начать. Быстрый запуск работает, но даже с немедленным использованием результата для отправки электронной почты с ошибкой входа.

Я прочитал документацию об обновлении ключа.

Мне кажется, что Google сделал так много доступного для api, что они, возможно, забыли сделать что-либо без взаимодействия с пользователем. Эй, я понял. Попытка написать для всего сложно. Я не жалуюсь. Я серьезно спрашиваю, может ли кто-нибудь вообще использовать gmail для этого.

+1

Вы можете использовать SMTP Gmail. –

+0

Вы имеете в виду gmail-api, о котором я спрашиваю? Или что-то еще? – jim

ответ

1

Я не знаю API Gmail, но если вы используете oAuth для получения учетных данных, обычно используется токен обновления, который вы можете использовать для обновления своих учетных данных (в основном, для получения нового набора) программно. Вы можете узнать больше об этом here.

Редактировать: Вам нужен пользовательский интерфейс при первом получении информации о токенах. Это можно сделать с помощью кнопки в настройках или того, что хранит возвращаемую информацию в постоянном месте, таком как база данных. Затем для вызовов типа «cron» вы ссылаетесь на токен доступа или, если истек, используйте токен обновления, чтобы получить новый токен доступа.

+0

Спасибо. Он предполагает, что он может это сделать, но, похоже, явно не говорит об этом. Это также противоречит информации на странице создания учетных данных, в которой говорится: «Пользовательские данные не могут быть доступны с платформы без пользовательского интерфейса, потому что для взаимодействия требуется вход для входа». Я действительно надеюсь, что кто-то, кто сделал это с помощью gmail api, включится. – jim

+0

Я пытался это сделать, но у меня все еще есть ошибка входа. Я должен сказать, что это было бы намного проще, если бы можно было найти образец, который делает это с самого начала, или если кто-то, кто действительно с ним справился, может подтвердить, что это возможно. Я серьезно подозреваю, что он был просто скопирован из системы авторизации для Android и не предназначен для использования в работе cron. – jim

+0

@jim Вы проверили [Реализация серверной авторизации] (https://developers.google.com/gmail/api/auth/web-server#exchange_the_authorization_code_for_an_access_token)? –

1

Вы можете запросить автономный доступ при первом входе пользователя в систему и обновлении его после истечения срока действия токена доступа. Вы должны попросить пользователя войти в систему в первый раз.

Прежде всего, прежде чем генерировать URL-адрес для входа, вам необходимо установить тип доступа «в автономном режиме». Для этого добавьте следующую строку кода перед вызовом $this->client->createAuthUrl().

$this->client->setAccessType($accessType); 

Это будет предлагать пользователю для автономного доступа при первом их аутентификации. Тогда, в функции обратного вызова, вы должны подтвердить подлинность пользователя на основе полученного кода и получить токен обновления:

$this->client->authenticate($code); 
$tokens = $this->client->getAccessToken(); 
$refresh_token = $tokens->refresh_token; 

Сохраните refresh_token в базе данных, и вы сможете создать новый маркер доступа каждый раз, когда он истекает ,Вы делаете это с помощью следующего кода:

$this->client->refreshToken($refreshToken); 

Примечания: Этот ответ основан на Google в PHP SDK и клиент является их клиентским объектом. Я создал оболочку для их API, что может оказаться полезным и проще для реализации. Вы можете проверить его here, он имеет большинство функций.

+0

Я просматриваю ваши примеры, но это больше пользовательский интерфейс и формы. Кажется, он не делает то, что я прошу. Все, что я хочу знать, это возможность использовать gmail api (oAuth 2.0) для отправки почты из задания cron. Если да, то было бы здорово, если бы у кого-то был простой пример того, как это сделать. Сейчас я использую учетные данные уровня сервиса, которые я создал, создаю новый Google_Client(), создаю имя приложения, задаю секрет клиента, области, захватываю службу от клиента и пытаюсь отправить электронное письмо. Однако при неудаче входа в систему. – jim

Смежные вопросы