ruby-on-rails - 如何将文档附加到电子邮件 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 和电子表格)。我需要将这些文件附加到电子邮件中并发送,有什么办法可以解决?
解决方案
我只是使用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
推荐阅读
- unity3d - OneSignal.IdsAvailable(UserId) 超时或未初始化
- python - 如何计算头部姿势估计?
- python - Flask 没有渲染所有的动态 html 表
- jhipster - JHipster v7.1.0:开发中的 TLS 支持不起作用 - 应用程序崩溃或抛出异常
- elasticsearch - 使用 Logstash 将 JSON 从 url 导入到 elasticsearch
- facebook - 如何使用 instagram 作为聊天机器人,我已经使用 facebook messenger
- soap - SOAP 请求 XML 元素顺序 (node-soap)
- php - Laravel 8.53 - 路由不适用于任何页面
- reporting-services - Power Bi 报表生成器 - 计算去年的变化
- python - 如何使用python根据同一数据框中另一列的值对数据框中的列中的值进行排序