シンプルですが、私はそれを動作させることができませんでした。ファイルはWebアプリケーションのS3からうまく動作しますが、以下のコードでメールを送信するとファイルが破損しています。ActionMailer - 添付ファイルを追加するには?
アプリケーションスタック:レール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添付ファイルを破る必要があります。
アイデア?
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
私は、これは余分なメモリの問題を引き起こすことはないと思うので、あなたが持っているどのような場合には:それは(Herokuの上でしばしば問題である)ファイルシステムには触れていないので、これは良い仕事かもしれない
S3からダウンロードしたtmpファイルが正常であることを確認できますか? – ffoeg