我正试图为登录的用户创建一个草稿消息,但在运行以下时一直收到错误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')
}
}
)
message
中的raw
是完整的SMTP消息。
- 要么在
body_object
中设置内容 - 或者您在
message
中设置了包含标头的完整SMTP邮件
例如:
params = { 'userId' => 'me', 'draft' => { 'message' => {'raw' => 'From: foo@example.comnSubject:Ignorenntest email' } } }