代码之家  ›  专栏  ›  技术社区  ›  Carpela

使用ruby gmail api v0.9发送电子邮件

  •  6
  • Carpela  · 技术社区  · 9 年前

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

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

    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.
    

    i、 它们都不起作用。。。

    通过Gmail API接口测试仪发送基本加密字符串(上面的消息) here 作品

    很明显,我在这里遗漏了一些显而易见的东西,比如如何构造通过API工作所需的对象。

    2 回复  |  直到 9 年前
        1
  •  10
  •   Carpela    8 年前

    好的,所以答案是…谢谢你的帮助,霍尔格。。。 是文档错误。它要求您编码为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)
    

    希望这能避免其他人被过于热心的国防部光顾。

        2
  •  3
  •   Yi Liu    8 年前

    Carpelas answer工作正常,但对于message_object,它在message.new中缺少“raw”。正确的代码应如下所示:

    message_object = Google::Apis::GmailV1::Message.new(raw: m.encoded) # or m.to_s
    client.send_user_message('me', message_object)
    
    推荐文章