提问人:duhaime 提问时间:7/9/2022 最后编辑:duhaime 更新时间:7/12/2022 访问量:413
如何在 Rails Mailer 中添加任意内联图像?
How to add arbitrary inline images in Rails Mailer?
问:
我正在开发一个 Rails 应用程序,它可以发送包含任意 HTML 内容的电子邮件。在邮件中,我们有:
class YeetMailer < ActionMailer::Base
def welcome_email(html)
# custom method that returns string[] where each string is an image src attribute
@images = get_images_for_yeet_email(html)
# add image attachments / Content-ID headers
@images.map { |i|
attachments.inline[i] = URI.open(i).read
}
# pass the html to the view
@html = html
end
end
然后在视图中:yeet_mailer/welcome_email.slim
= @html
我看过的所有指南(例如这个 Rails 指南)都建议应该使用带有 cid 内容的图像在电子邮件中呈现,但我还没有弄清楚在任意数量的图像的情况下如何做到这一点。<%= image_tag attachments['image_name.jpg'].url %>
我想我能做到:
@images.map { |i|
attachments.inline[i] = URI.open(i).read
html = html.sub(i, attachments.inline[i])
}
进行替换,但这会抛出.我添加了一行来进入方法内部的调试器并提供了一些见解(这是输出),所以我越来越近了......no implicit conversion of Mail::Part into String
byebug
welcome_email
puts(attachments.first)
有人知道我应该如何进行吗?任何提示都会非常有帮助!
答:
0赞
duhaime
7/12/2022
#1
事实证明,您可以:
@images.each_with_index { |i, idx|
attachments.inline[i] = URI.open(i).read
cid = attachments[idx].header.find { |h| h.name == 'Content-ID' }.field.value
html = html.sub(i, "cid:#{cid}")
}
评论
@images.map { |i| attachments.inline[i] = URI.open(i).read }
.inline["my-file.png"]
img_tag
<%= img_tag ... %>
sub
<<<hereimages>>>
@images.map {|i| "<img src=#{i} >"}.join
attachments.inline[i]= etc..
@images.map {|i| "<img src=#{attachments[i].url} >"}.join