编码 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 "<main>": undefined local variable or method "attachment_encoded" for main:Object (NameError)
哇哦。傻我。我插入了错误的变量名。现在一切都好。太棒了,感谢您的帮助!以上是关于编码 64、Ruby 和 Mandrill API的主要内容,如果未能解决你的问题,请参考以下文章
您可以将内联 base64 编码图像添加到 Mandrill 模板吗?
Mandrill-api Excon::Errors::SocketError