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:
Mailer file
class AppMailer < ActionMailer::Base
default from: "[email protected]"
# AppMailer.test_mail.deliver
def test_mail
attachments.inline['rails.png'] = File.read(Rails.root.join('app', 'assets', 'images', 'rails.png'))
mail(
to: '[email protected]',
subject: "test letter",
template_path: "mailers",
template_name: "test"
)
end
end
Preview file
class MailerPreview < ActionMailer::Preview
def app_mailer
AppMailer.test_mail
end
end
Template file
%p Hello, World!
%p= image_tag attachments['rails.png'].url
When I go to
/rails/mailers/mailer/app_mailer
I see preview page, but images doesn't work. There is resulted html code
<p>Hello, World!</p>
<p><img src="cid:[email protected]"></p>
So. I think, I should to find a way to get path/to/file instead CID in preview mode
(When I sent letter to my mailbox - letter looks fine)
What I am doing wrong in preview mode?
For Rails >= 4.2 to preview images you should create initializer:
# config/initializer/preview_interceptors.rb
ActionMailer::Base.register_preview_interceptor(ActionMailer::InlinePreviewInterceptor)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With