我正在尝试通过GmailV1
API发送带有附件的电子邮件。但是由于Missing Draft Message
错误,它无法正常工作。
根据RubyDoc,我尝试按以下方式创建草稿消息:
GmailV1:GmailService.create_user_draft()
方法接受标识符和draft_object
(接受授权用户'me'
)。草稿对象(Google::Apis::GmailV1::Draft
)采用message
形式的Google::Apis::GmailV1::Message
,payload
依次采用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
答案 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)