如何在 ActionMailer 中将云文件添加为电子邮件附件

Posted

技术标签:

【中文标题】如何在 ActionMailer 中将云文件添加为电子邮件附件【英文标题】:How to add cloudinary file as email attachment in ActionMailer 【发布时间】:2019-03-21 11:58:52 【问题描述】:

我正在 Rails 中构建一个工作申请,我需要附加在工作申请中作为电子邮件附件上传的简历 (cv)。应用程序中的所有文件都使用 CarrierWave 上传到 Cloudinary。电子邮件由 Action Mailer 处理。在 ActionMailer 中,我有

  class ApplicantMailer < ApplicationMailer    
      def applicant_info(applicant)
        @applicant = applicant
        mail(to: @applicant.job.email, subject: 'Applicant Details')
      end
   end

在我的邮件视图模板中,我有

<p>Hi Recruiter, in this email, you would find the resume of the latest applicant</p>
<p>Resume: <%= cl_image_tag(@applicant.resume, :attachment=>true) %></p>

目前,这不会将云文件呈现为电子邮件中的附件。我需要能够将简历呈现为可读的附件文件。

【问题讨论】:

我们期望@applicant.resume 返回什么?另外,您当前的代码会收到哪些错误消息? @applicant.resume 返回从 cloudinary 下载文件的 url。当前代码可以很好地发送电子邮件,但 @applicant.resume(resume) 不是电子邮件中的附件。但我希望它是一个附件 【参考方案1】:

这样的事情应该可以工作。我认为你不需要那个帮手

class ApplicantMailer < ApplicationMailer    
  def applicant_info(applicant)
    @applicant = applicant
    attachments[ open(applicant.resume) ]
    mail(to: @applicant.job.email, subject: 'Applicant Details')
  end
 end

模板

<p>Hi Recruiter, in this email, you would find the resume of the latest applicant</p>
<p>Resume: <%= image_tag @applicant.resume %></p>

【讨论】:

它不工作。我收到以下错误“没有将 ResumeUploader 隐式转换为字符串” 很难在没有看到完整堆栈跟踪的情况下判断,但如果您删除 &lt;p&gt;Resume: &lt;%= image_tag @applicant.resume %&gt;&lt;/p&gt; 电子邮件是否正常工作并附加文件会发生什么?如果不是,我怀疑@applicant.resume 不是你想的那样。 @applicant 是什么类型的对象,.resume 是一种方法?关系?我们只能根据您提供的信息进行猜测。 @applicant 是模型申请者的实例变量,.resume 是载波对象,它是申请者模型中的列字段。 更新您的问题以在申请人模型中显示相关代码并添加错误的完整堆栈跟踪。

以上是关于如何在 ActionMailer 中将云文件添加为电子邮件附件的主要内容,如果未能解决你的问题,请参考以下文章

ruby 如何在ActionMailer中为各个用户设置* url_options *

为 ActionMailer Deliver_later 设置默认队列?

如何在 Windows 终端中将 Ubuntu 添加为配置文件选项?

如何在解析云代码中将文本文件附加到山魈邮件?

如何将 ApplicationMailer(或 ActionMailer)设置为默认使用 Activejob/sidekiq

当 ActionMailer 遇到错误时,如何让 Delayed_Job 通知 Airbrake?