首页 > 解决方案 > 如何将文档附加到电子邮件 ActiveStorage 和 Cloudinary?

问题描述

我将 ActiveStorage 与 Cloudinary 一起使用:

gem 'cloudinary', '~> 1.14.0'
gem 'activestorage-cloudinary-service', '~> 0.2.3'

我的邮件中有以下内容:

if @job_request.work_files.attached?
  @job_request.work_files.each do |file|
    attachments[file.blob[:filename]] = { mime_type: file.blob.content_type, content: file.download }
  end
end

这会在 Heroku 上引发错误:

SendGridActionMailer::DeliveryMethod::SendgridDeliveryError

Sendgrid delivery failed with 400 The attachment content is required.

用户可以提交带有文件的工作请求(使用 ActiveStorage 和 Cloudinary,Cloudinary 允许提交图像、文档、pdf 和电子表格)。我需要将这些文件附加到电子邮件中并发送,有什么办法可以解决?

标签: ruby-on-railsrubycloudinaryrails-activestorage

解决方案


我只是使用open-uri库打开远程文件并附加它

require 'open-uri'

class MyMailer << ApplicationMailer
  def new_job(job_request)
     @job_request = job_request
     if @job_request.work_files.attached?
       @job_request.work_files.each do |file|
         temp_file = open(file.service_url).read
         attachments[file.blob[:filename]] = { mime_type: file.blob.content_type, content: temp_file }
       end
     end

    mail to: @job_request.email
  end
end

推荐阅读