Rails 4, Mailer preview, preview attached images

前端 未结 3 658
南笙
南笙 2021-02-15 15:39

I have problem with rails 4.1.6 mailer preview.

I want to see attached images in preview mode, but it doesn\'t work. I think it\'s incorrect

There is my code:

相关标签:
3条回答
  • 2021-02-15 16:02

    You're not doing anything wrong; it's a shortcoming in the way the Rails Mail Previewer is designed.

    The Rails Mailer code, reasonably, generates URLs for attachments that reference mail "parts" in a multipart email. The "cid" in the URL for your <img> tag refers to the "content ID" of the particular part/attachment. This is how URLs within an email work.

    However, the previewer controller isn't rendering in the context of an email client: it's a standard web browser. There is no "cid" URL protocol scheme, and no multi-part email to reference (it's all just standard HTML documents). Rails::MailersController currently isn't smart enough to realize this, and just renders the email as-is.

    To make this work, it'd have to detect all references to cid: URLs and replace them with regular http: URLs back to itself, then return the content for the various attachments.

    There's an open issue on GitHub/rails to do this, but as of yet it's not complete.

    0 讨论(0)
  • 2021-02-15 16:18

    For Rails >= 4.2 to preview images you should create initializer:

    # config/initializer/preview_interceptors.rb
    ActionMailer::Base.register_preview_interceptor(ActionMailer::InlinePreviewInterceptor)
    
    0 讨论(0)
  • 2021-02-15 16:18

    Until the Rails mail previewer is enhanced to support attachment viewing, I'm using this (hack-ish) enhancement to Mail::Part#url to embed the attachment data into the URL itself. This lets see my inline images in the previewer (assuming I have INLINE_MAIL_PART_URLS turned on) while preserving the original behaviour in the appropriate settings.

    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
    

    I save this code to config/initializers/inline_mail_part_urls.

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

    0 讨论(0)
提交回复
热议问题