簡體   English   中英

Rails 4,Mailer預覽,預覽附加圖像

[英]Rails 4, Mailer preview, preview attached images

我在Rails 4.1.6郵件預覽中遇到問題。

我想在預覽模式下查看附件圖像,但是它不起作用。 我覺得不對

有我的代碼:

郵件文件

class AppMailer < ActionMailer::Base
  default from: "robot@mysite.com"

  # AppMailer.test_mail.deliver
  def test_mail
    attachments.inline['rails.png'] = File.read(Rails.root.join('app', 'assets', 'images', 'rails.png'))

    mail(
      to: 'my-email@gmail.com',
      subject: "test letter",
      template_path: "mailers",
      template_name: "test"
    )
  end
end

預覽文件

class MailerPreview < ActionMailer::Preview
  def app_mailer
    AppMailer.test_mail
  end
end

模板文件

%p Hello, World!
%p= image_tag attachments['rails.png'].url

當我去

/rails/mailers/mailer/app_mailer

我看到預覽頁面,但是圖像不起作用。 有結果HTML代碼

<p>Hello, World!</p>
<p><img src="cid:544d1354a8aa0_fda8082dbf8258ca@admins-air.mail"></p>

所以。 我認為,我應該找到一種在預覽模式下獲取路徑/到/文件而不是CID的方法

(當我向信箱發送信件時-信件看起來不錯)

在預覽模式下我做錯了什么?

對於> = 4.2的Rails預覽圖像,您應該創建初始化程序:

# config/initializer/preview_interceptors.rb
ActionMailer::Base.register_preview_interceptor(ActionMailer::InlinePreviewInterceptor)

在增強Rails郵件預覽器以支持附件查看之前,我將使用Mail::Part#url此增強功能將附件數據嵌入URL本身。 這樣可以在預覽器中查看我的嵌入式圖像(假設我已INLINE_MAIL_PART_URLS ),同時在適當的設置中保留了原始行為。

module InlineMailPartUrls
  def url
    if ENV["INLINE_MAIL_PART_URLS"] == "true"
      "data:#{mime_type};base64,#{Base64.encode64(body.decoded)}"
    else
      super
    end
  end
end

class Mail::Part
  prepend InlineMailPartUrls
end

我將此代碼保存到config/initializers/inline_mail_part_urls

https://gist.github.com/softcraft-development/2ed70a2a4d6e2c829fac

您沒有做錯任何事; 這是Rails Mail Previewer設計方式的一個缺點。

Rails Mailer代碼合理地為引用多部分電子郵件中的郵件“部分”的附件生成URL。 您的<img>標簽的URL中的“ cid”是指特定零件/附件的“內容ID”。 這是電子郵件中URL的工作方式。

但是,預覽器控制器未在電子郵件客戶端的上下文中呈現:它是標准的Web瀏覽器。 沒有“ cid” URL協議方案,也沒有多部分的電子郵件可供參考(全部都是標准HTML文檔)。 Rails::MailersController當前還不足以實現這一目標,只能按原樣呈現電子郵件。

為了使這項工作有效,它必須檢測到所有對cid: URL的引用,並用常規的http: URL替換它們,然后返回各種附件的內容。

GitHub / rails上存在一個未解決的問題 ,但到目前為止還沒有完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM