编码 64、Ruby 和 Mandrill API

Posted

技术标签:

【中文标题】编码 64、Ruby 和 Mandrill API【英文标题】:Encode 64, Ruby and Mandrill API 【发布时间】:2014-10-10 05:41:40 【问题描述】:

我正在尝试在通过 Mandrill API 将文件作为附件发送之前在 Ruby 中对其进行编码。我收到以下错误消息:

/home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/base64.rb:38:in `pack': no     implicit conversion of File into String (TypeError)                                           
    from /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/base64.rb:38:in `encode64'                                                                                  
    from email_spreadsheet.rb:10:in `<main>'

以下是我的 ruby​​ 代码:

require 'mandrill'
require 'csv'
require 'base64'
CSV.open("my_results.csv", "wb") do |csv|
  csv << ["animal", "count", "price"]
  csv << ["fox", "1", "$90.00"]
end

my_file = File.open("my_results.csv")
my_file_encoded = Base64.encode64(my_file)

m = Mandrill::API.new
message =   
 :subject=> "Hello from the Mandrill API",
 :from_name=> "Mandrill",  
 :text=>"Hi Gmail, how are you?",  
 :to=>[  
     
     :email=> "hello@gmail.com",  
     :name=> "Howie"  
     
 ],  
 :html=>"<html><h1>Hi <strong>Gmail</strong>, how are you?</h1></html>",  
 :from_email=>"mandrill@yourdomain.com",
 :attachments=>[
        
          :type=> "file/csv",
          :name=> "my_results.csv",
          :content=> attachment_encoded
        
    ]

sending = m.messages.send message
puts sending

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您的问题是您将File 实例交给Base64.encode64,而它需要String。因此出现“隐式转换”错误。先将文件读入String

my_file = File.open('my_results.csv', 'r')  |fp| fp.read 
my_file_encoded = Base64.encode64(my_file)

或:

my_file = File.read('my_results.csv')
my_file_encoded = Base64.encode64(my_file)

您也可以使用CSV.generate 将您的CSV 直接写入String 并完全跳过该文件。

【讨论】:

到达那里。它现在抛出以下错误:email_spreadsheet.rb:29:in "&lt;main&gt;": undefined local variable or method "attachment_encoded" for main:Object (NameError) 哇哦。傻我。我插入了错误的变量名。现在一切都好。太棒了,感谢您的帮助!

以上是关于编码 64、Ruby 和 Mandrill API的主要内容,如果未能解决你的问题,请参考以下文章

您可以将内联 base64 编码图像添加到 Mandrill 模板吗?

Django Mandrill 电子邮件编码

Mandrill 模板合并失败

Mandrill-api Excon::Errors::SocketError

ruby 中的 Mandrill 验证,在 php 和 ruby​​ 之间的翻译中丢失

从远程 url 加载 pdf 以作为 Mandrill 附件发送