使用ruby gmail api v0.9

时间:2016-10-25 18:16:54

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

有没有人有一个关于如何使用v0.9 API从头开始发送电子邮件的简单示例。

只需要发送以下内容的示例:

m = Mail.new(
to: "test1@test.com", 
from: "test2@test.com", 
subject: "Test Subject",
body:"Test Body")

现在要创建发送所需的消息对象,我们可以使用:

msg = Base64.urlsafe_encode64 m.to_s

然后尝试发送(其中message_object = msg):

client = Google::Apis::GmailV1::GmailService.new #Appropriately authorised
client.send_user_message("me", message_object)

客户端需要RFC822兼容的编码字符串,上面应该是。

我试过了:

message_object = msg
=> Google::Apis::ClientError: invalidArgument: 'raw' RFC822 payload message string or uploading message via /upload/* URL required
message_object = raw:msg
=>ArgumentError: unknown keyword: raw
message_object = {raw:msg}
=>ArgumentError: unknown keyword: raw 
message_object = Google::Apis::GmailV1::Message.new(raw:msg)
=> #<Google::Apis::GmailV1::Message:0x007f9158e5b4b0 @id="15800cd7178d69a4", @thread_id="15800cd7178d69a4">
#But then I get Bounce <nobody@gmail.com> - An error occurred. Your message was not sent.

即。他们都没有工作......

通过Gmail API接口测试人员here发送基本的加密字符串(上面的msg)。

我在这里明显遗漏了一些关于如何构建使其通过API工作所需的对象的明显内容。

2 个答案:

答案 0 :(得分:7)

确定。所以答案......感谢你的帮助Holger ...... 文档是错误的吗?它要求你编码到base64。 不需要base64编码(它由api客户端在内部完成)。

正确的发送方式是

msg = m.encoded 
# or m.to_s
# this doesn't base64 encode. It just turns the Mail::Message object into an appropriate string.

message_object = Google::Apis::GmailV1::Message.new(raw:m.to_s)
client.send_user_message("me", message_object)

希望能让其他人免受过度热心的mod的光顾。

答案 1 :(得分:3)

Carpela的回答很好,但是对于message_object,它已经缺失了#34; raw&#34;在Message.new中。正确的代码应如下:

message_object = Google::Apis::GmailV1::Message.new(raw: m.encoded) # or m.to_s
client.send_user_message('me', message_object)
相关问题