【问题标题】:Creating draft via Google Gmail API通过 Google Gmail API 创建草稿
【发布时间】:2014-10-19 00:49:54
【问题描述】:

我正在尝试为已登录用户创建草稿消息,但在运行以下命令时不断收到错误 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)

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 正确虽然 raw 不仅仅是“测试电子邮件”,它应该更像是:“To: someguy@yahoo.com\r\nFrom: myaddress@gmail.com\r\nSubject:看看这个很酷的网站\r\n\r\n这里是身体等等"
【解决方案2】:

message 中的raw 是完整的 SMTP 消息。

  • 要么在body_object中设置内容
  • 或者您设置完整的 SMTP 邮件,包括 message 中的标头

例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 2018-04-19
    • 1970-01-01
    • 2017-06-17
    • 2021-04-28
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多