通过Google Gmail API创建草稿

时间:2014-08-25 19:43:17

标签: ruby google-api gmail gmail-api google-api-ruby-client

我正在尝试为已登录的用户创建草稿消息,但在运行以下内容时不断收到错误Missing draft message

require 'google/api_client'
client = Google::APIClient.new
client.authorization.client_id = ENV['GOOGLE_CLIENT_ID']
client.authorization.client_secret = ENV['GOOGLE_CLIENT_SECRET']
client.authorization.grant_type = 'refresh_token'
client.authorization.refresh_token = User.last.refresh_token
token = client.authorization.fetch_access_token!
gmail = client.discovered_api('gmail', 'v1')
params = { 'userId' => 'me', 'draft' => { 'message' => {'raw' => 'test email' } } }
# { 'userId' => 'me', 'message' => {'raw' => 'test email' } }
result = client.execute(api_method: gmail.users.drafts.create, parameters: params)

此外,我尝试了注释组合的params,但仍然没有运气。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

当我第一次尝试这样做时,我遇到了同样的问题。我发现的解决方案是不将消息信息作为参数的一部分包含在内,而是将其传递到:body_object中,如下所示。

@result = client.execute(
  :api_method => gmail.users.drafts.create,
  :parameters => {
    'userId' => "me"      
  },
  :body_object => {
    'message' => {
      'raw' =>  Base64.urlsafe_encode64('Test Email Message')
    }
  }
)

答案 1 :(得分:1)

raw中的

message是完整的SMTP邮件。

  • 您可以在body_object
  • 中设置内容
  • 或者您在message
  • 中设置包含标题的完整SMTP邮件

例如:

params = { 'userId' => 'me', 'draft' => { 'message' => {'raw' => 'From: foo@example.com\nSubject:Ignore\n\ntest email' } } }