Reputation: 1602
I am trying to create a draft message for a logged in user but keep getting the error Missing draft message
when I run the below
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)
In addition I tried the commented out combination for params and still no luck. Any ideas?
Upvotes: 1
Views: 2051
Reputation: 26984
raw
in message
is the full SMTP message.
body_object
message
eg:
params = { 'userId' => 'me', 'draft' => { 'message' => {'raw' => 'From: [email protected]\nSubject:Ignore\n\ntest email' } } }
Upvotes: 1
Reputation: 301
I had the same issue when I was trying to do this for the first time as well. The solution that I found was to not include the message information as part of the parameters, but rather pass that on in the :body_object as shown below.
@result = client.execute(
:api_method => gmail.users.drafts.create,
:parameters => {
'userId' => "me"
},
:body_object => {
'message' => {
'raw' => Base64.urlsafe_encode64('Test Email Message')
}
}
)
Upvotes: 4