Как получить токен из API Google, чтобы отправить письмо из сценария ruby? - PullRequest
0 голосов
/ 07 сентября 2018

Я использую ruby ​​для создания скрипта, который будет отправлять электронную почту каждый раз, когда возникает ошибка, используя gem 'gmail'.

Я планирую отправить его с учетной записью Gmail. Однако я бы не стал использовать аутентификацию LOGIN или PLAIN для предоставления доступа к SMTP-запросу.

Таким образом, Google предоставляет мне возможность использовать OAuth для аутентификации.

Проблема в том, что у меня нет клиентской стороны. Поэтому мне понадобится часть моего скрипта для отправки запроса в API Google, который в свою очередь предоставит мне токен для подключения к моей учетной записи Gmail и отправки почты.

gem 'spreadsheet'
gem 'gmail'
gem 'mail'
gem 'csv'
gem 'google-api-client', '~> 0.7.1'

require 'spreadsheet'
require 'csv'
require 'mail'
require 'gmail'
require 'google/api_client/client_secrets'
require_relative 'gmail_manager'



def run
  #some code runs here 
  # if an expception is raised: 
  error_mail(filename, e)
end

def error_mail(filename, exception)
  client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
  auth_client = client_secrets.to_authorization

 **#this is where I get stuck, am i supposed to do a POST request?
     auth_client.code = auth_code (is nil)
     auth_client.fetch_access_token! (doesn't work because code is nil)

  gmail = Gmail.connect(:xoauth2, "my@gmail.com", "TOKEN I DON'T HAVE")

  gmail.deliver do
    to "my@gmail.com"
    from "my@gmail.com"
    subject "The file #{filename} failed to convert"

    html_part do
      content_type 'text/html; charset=UTF-8'
      body "<p>Good day,</p>
          <p>content</p>
    end
  end
  gmail.logout
end

run

Это мой файл client_secrets.json, в котором у меня есть идентификатор клиента и секрет клиента (я не уверен насчет redirect_uri, потому что у меня нет клиентской стороны или auth_uri, какой это должно быть? )

{
  "web": {
    "client_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "client_secret": "XXXXXXXXXXXXXXXXXX",
    "redirect_uris": ["http://localhost:8080"],
    "auth_uri": "'https://accounts.google.com/o/oauth2/auth'",
    "token_uri": "https://accounts.google.com/o/oauth2/token",
    "scope": "https://gmail.com"
  }
}

Я пытаюсь выполнить следующие шаги https://developers.google.com/identity/protocols/OAuth2WebServer но я застреваю на шаге 2.

...