使用附加GmailV1 API ruby​​创建消息

时间:2016-08-15 13:50:45

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

我正在尝试通过GmailV1 API发送带有附件的电子邮件。但是由于Missing Draft Message错误,它无法正常工作。

根据RubyDoc,我尝试按以下方式创建草稿消息:

GmailV1:GmailService.create_user_draft()方法接受标识符和draft_object(接受授权用户'me')。草稿对象(Google::Apis::GmailV1::Draft)采用message形式的Google::Apis::GmailV1::Messagepayload依次采用Google::Apis::GmailV1::MessagePart形式的filename具有所需{ {1}}方法。

所以我运行了这段代码:

##assume client is an authorized instance of Google::Apis::GmailV1:GmailService
msg_part = Google::Apis::GmailV1::MessagePart.new(filename: 'path/to/file')
msg = Google::Apis::GmailV1::Message.new(payload: msg_part)
draft = Google::Apis::GmailV1::Draft.new(message: msg)
client.create_user_draft('me', draft)

>> Google::Apis::ClientError: invalidArgument: Missing draft message

怎么来的?

版本:

  • google-api-client 0.9.9

  • googleauth 0.5.1

  • ruby​​ 2.3.1p112

2 个答案:

答案 0 :(得分:1)

使用here所述的GmailService类,我可以使用下面的代码保存草稿。我认为关键是消息中需要raw关键字。

result = service.create_user_draft(
  user_id,
  Google::Apis::GmailV1::Draft.new(
    :message => Google::Apis::GmailV1::Message.new(
      :raw => "To: test@test.com\r\nSubject: Test Message\r\n\r\nTest Body"
    )
  )
)

答案 1 :(得分:1)

我解决了这个问题,首先使用' mail'创建一个Mail对象。宝石就这样:

require 'mail'

mail = Mail.new
mail['from'] = 'pippo@pluto.it'
mail[:to]    = 'me@mymail.it'
mail.subject = 'This is a test email'
mail.body 'this is the body'
mail.add_file("./path/to/file")
#... and other ...

然后我在原始对象中转换了它:

raw_message = mail.to_s

然后用这个raw创建gmail消息:

message = Google::Apis::GmailV1::Message.new(
  :raw => raw_message  
)

和finnaly:

draft = Google::Apis::GmailV1::Draft.new(message: message)
gmail.create_user_draft('me', draft)