質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

544閲覧

Gmail APIでinvalid_grantとなる為、サービスアカウントで当APIを使いたい

yuki_90453

総合スコア326

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2023/01/09 08:04

編集2023/01/09 08:17

概要

現在、Gmail APを使用し受信したメールを取得する処理を作っています。
OAuth 同意画面の設定では、テストユーザーのみで、ユーザーの種類は、「外部」となっている為、7日を超えるとトークンの更新が必要になります。

(有料のGoogle WorkSpaceを使用していないので、ユーザーの種類は変更出来ません)

7日を超えるとその都度トークンの更新をするのは面倒なので、それをトークンを長期間更新しないで済む方法を探した所、「サービスアカウントであれば、トークンの更新が必要ない」という記事を見ました。
Google API で Token has been expired or revoked. のエラー

試したこと

そこでサービスアカウントを作成しましたが、このあとどのようにすればいいのかわかりません。

今までは、認証キーをダウンロードして、下記のようなOAuth認証画面を立ち上げるコードを書いてトークンを生成するプロセスでした。

TypeScript

1import * as credentials from './credentials.json' 2 3 (async() => { 4 const SCOPES = ['https://www.googleapis.com/auth/gmail.modify']; 5 const TOKEN_PATH = 'token.json'; 6 const {google} = require('googleapis'); 7 const fs = require('fs'); 8 9 //クライアントID、秘密キー、リダイレクトURLが入ったJSONファイルを読み込む 10 const {client_secret, client_id, redirect_uris} = credentials.installed; 11 const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]); 12 13 14 //認証用URLの生成 15 let url = oAuth2Client.generateAuthUrl({scope:SCOPES}); 16 console.log('自動でブラウザが開かない場合は手動でURLを開いてください:' + url); 17 18 //ブラウザで認証用URLを開く 19 const exec = require('child_process').exec; 20 exec('start ' + url.replace(/&/g, '^&')); //^&は&のエスケープ処理 21 22 //コード入力用 23 const readline = require('readline'); 24 const rl = readline.createInterface({input: process.stdin,output: process.stdout}); 25 rl.question('表示されたコードを貼り付けてください:', (code:any) => { 26 rl.close(); 27 oAuth2Client.getToken(code, (err:any, token:any) => { 28 if (err) { 29 return console.error('アクセストークンの取得に失敗しました', err); 30 } 31 const fs = require('fs'); 32 console.log('下記のコードを手動でコピーして保存して下さい。') 33 console.log(JSON.stringify(token)) 34 fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err:any) => { 35 if (err) { 36 return console.error(err); 37 } 38 console.log('トークンを ' + TOKEN_PATH + ' に保存しました'); 39 }); 40 }); 41 }); 42})();

質問

サービスアカウンを使用して、Gmail APIを使用する場合、どのようにTokenを生成すれば良いでしょうか?
それともサービスアカウントであれば、Tokenを生成する必要はないのでしょうか?

簡単なアドバイスでも良いので、助言をお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問