gpt4 book ai didi

ruby-on-rails - ActionMailer - 如何添加附件?

转载 作者:行者123 更新时间:2023-12-03 00:28:58 26 4
gpt4 key购买 nike

看起来很简单,但我还没能让它发挥作用。这些文件在 Web 应用程序上的 S3 上工作正常,但当我通过下面的代码通过电子邮件发送它们时,文件已损坏。

应用程序堆栈:rails 3、heroku、回形针 + s3

代码如下:

class UserMailer < ActionMailer::Base
# Add Attachments if any
if @comment.attachments.count > 0
@comment.attachments.each do |a|
require 'open-uri'
open("#{Rails.root.to_s}/tmp/#{a.attachment_file_name}", "wb") do |file|
file << open(a.authenticated_url()).read
attachments[a.attachment_file_name] = File.read("#{Rails.root.to_s}/tmp/#{a.attachment_file_name}")
end
end
end

mail( :to => "#{XXXX}",
:reply_to => "XXXXX>",
:subject => "XXXXXX"
)

a.authenticated_url() 只是给我一个 s3 的 URL 来获取文件(任何类型),我检查了这个,工作正常。与我保存临时文件的方式有关的事情一定会破坏 ActionMailer 附件。

有什么想法吗?

最佳答案

这可能会工作得更好,因为它不会触及文件系统(这在 Heroku 上通常会出现问题):

require 'net/http'
require 'net/https' # You can remove this if you don't need HTTPS
require 'uri'

class UserMailer < ActionMailer::Base
# Add Attachments if any
if @comment.attachments.count > 0
@comment.attachments.each do |a|
# Parse the S3 URL into its constituent parts
uri = URI.parse a.authenticated_url
# Use Ruby's built-in Net::HTTP to read the attachment into memory
response = Net::HTTP.start(uri.host, uri.port) { |http| http.get uri.path }
# Attach it to your outgoing ActionMailer email
attachments[a.attachment_file_name] = response.body
end
end
end

我认为这不会导致任何额外的内存问题,因为无论如何您都必须将文件的数据加载到 attachments[a.attachment_file_name] 行的内存中。

关于ruby-on-rails - ActionMailer - 如何添加附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4360377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com