通过Google Gmail API创建草稿

我正在尝试为登录用户创建草稿消息,但在运行以下内容时不断收到错误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,但仍然没有运气。 有任何想法吗?

当我第一次尝试这样做时,我遇到了同样的问题。 我发现的解决方案是不将消息信息作为参数的一部分包含在内,而是将其传递给: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 in message是完整的SMTP消息。

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

例如:

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