2017-02-27 19 views
0

Gmail API(using google-api-client、ルビー用)を使用してメールを送信するためのレールアプリケーションがあります。私はGoogleの開発者の1つのアプリケーションを作成し、私はサービスアカウントのキーを生成しました。私はその資格JSONファイル(/home/user/.config/gcloud/applicaton_default_credentials.jsonに格納)を格納するためのGoogle仕様書を使用しています。手始めにruby​​でgoogle apiを使用してサーバ間通信を実装する方法はありますか?

は、私は以下の私のコード

require 'google/apis/gmail_v1' 
gmail_v1 = Google::Apis::GmailV1 
service = gmail_v1::GmailService.new 
service.authorization = Google::Auth.get_application_default([gmail_v1::AUTH_SCOPE, gmail_v1::AUTH_GMAIL_COMPOSE, gmail_v1::AUTH_GMAIL_MODIFY, gmail_v1::AUTH_GMAIL_READONLY]) 
user_id = 'me' 
result = service.list_user_labels(user_id) 

である。しかし、これは私にGoogle::Apis::ClientError: failedPrecondition: Bad Requestエラーを与えているuser labelsをフェッチしたかったです。

私のユーザ名とパスワードをActionMailerのsmtp設定に入れたくないので、最終的な目標は、私が資格JSONファイルを生成したメールを使ってメールを送信することです。

答えて

0

ような何かをする必要がありますが、私は最終的に実用的なソリューションを見つけました。 DalmToは、Gmailがユーザーアカウントを必要とするため、サービスアカウントがGmailにアクセスできないという概念については正しいですが、この場合はimpersonationの力を活用することができます。なりすましを行う手順は次のとおりです。

  1. サービスアカウントに移動します。
  2. 偽装するユーザーに許可を与えます。我々は注意
    service = gmail_v1::GmailService.new 
    service.authorization = Google::Auth.get_application_default([gmail_v1::AUTH_SCOPE, gmail_v1::AUTH_GMAIL_COMPOSE, gmail_v1::AUTH_GMAIL_MODIFY, gmail_v1::AUTH_GMAIL_READONLY]) 
    auth_client = service.authorization.dup 
    auth_client.sub = '[email protected]' 
    user_id = 'me' 
    result = auth_client.list_user_labels(user_id) 
    

以下のように、このセットアップのために私たちのコードを変更する必要が
  • :このために、仕事に、私たちはG-スーツのアカウントにアクセスし、当社のサービスに適切な権限を与える必要がありアカウント。

  • 0

    覚えているサービスアカウントはあなたではありません。サービスアカウントは、GoogleのドライブアカウントとGoogleカレンダーアカウントを持っているダミーのユーザーで、たぶんもう少しです。ただし、Gmailアカウントはありません。

    のuser_id = '私'

    サービスアカウントでは動作しません。

    注:通常のGmailユーザーアカウントでサービスアカウントを使用することはできません。

    ドメインアカウントユーザーの場合は、サービスアカウントのメールアドレスを使用して、ドメイン管理者アカウントのユーザーとして追加できます。ユーザーにGmailアカウントにアクセスする権限を与えます。次に、デバッグの多くの時間後

    のuser_id =「ユーザー@ドメイン」

    関連する問題