nodeJSのgoogle-api-nodejs-clientライブラリの最新(0.9.8)を使用しています。 サービスアカウントとJWTの有効範囲がhttps:\\googleapis.com/auth/gmail.send
(および/ auth/drive FWIW)になっています。nodeJSのGMail API - sendが400 Bad Requestを返す
私はこのような電子メール(base64urlencoded)を送信しよう:
req = mail.users.messages.send(
{
auth: jwtClient, // really works with google drive
userId: [email protected] // actually a legit gmail address
resource: {
raw: message // base64encode(urlencode(RFC822 msg))
}
}, (err, res) => { console.log(err); }
);
とコールバックは、この今までとても便利オブジェクトを受信:
{"code": 400,"errors":[{"domain":"global","reason":"failedPrecondition","message":"Bad Request"}]}
を私はGoogleの-API-nodejs-クライアントことを認識していますはalphaで、GMail API自体が進化しています(メッセージとリソースなど)。だから、オンラインの情報(Google独自のドキュメントを含む)の中には矛盾しているものがあります。エラーが非常に一般的なように私は任意の提案を探しています。
UPDATE: 'users.labels.list({auth:jwtClient、userId: 'me'})'に対しても(400、Bad Request)を取得します。一時的に 'auth'をnullに設定すると、パーミッションエラーが発生するので、JWTがうまくいきます。私のサービスアカウントではなく、ユーザーのためにOAuth2を使用すると、ラベルが正常に取得されます。私はサービスアカウントで世界的に何か問題があると言いたいと思いますが、同じJWTを使ってGoogleドライブのドキュメントを作成したり作成したりできます(問題ありません)。 ??? – Carlos
(https://github.com/google/google-api-nodejs-client/issues/399)のように、GMailはOAuth2クライアントIDのみで使用でき、サービスアカウントでは使用できないようです。ドメイン全体の委任を設定し、サービスアカウントのクライアントIDを作成し、そのclient-idでGMailを試します。 – Carlos