How can I use assets within Mailer?
Asked Answered
A

2

6

I have trouble using any form of the asset pipeline within mailer, wether the Mailer itself or the view.

The following produces and empty src image tag.

<%= image_tag "emails/header-general.png" %>

The empty image tag looks like this:

img alt="Header-general"

The following form of attaching a file through the model and using it in the view attaches an empty image.

attachments.inline['header.jpg'] = 'emails/header-general.png'
...
<%= image_tag attachments['header.png'] %>

I did check the path and even tried with multiple paths and so on but with no luck. Please help. Any form of including an image within the email would be helpful.

Here is the production env.

Xenium::Application.configure do
# Settings specified here will take precedence over those in config/application.rb

# Code is not reloaded between requests
config.cache_classes = true

# Full error reports are disabled and caching is turned on
config.consider_all_requests_local       = false
config.action_controller.perform_caching = true

# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false

# Compress JavaScripts and CSS
config.assets.compress = true

# Choose the compressors to use
config.assets.js_compressor  = :yui
config.assets.css_compressor = :yui

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true

# Generate digests for assets URLs
config.assets.digest = true

# Defaults to Rails.root.join("public/assets")
# config.assets.manifest = YOUR_PATH

# Specifies the header that your server uses for sending files
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true

# See everything in the log (default is :info)
config.log_level = :fatal

# Use a different logger for distributed setups
# config.logger = SyslogLogger.new

# Use a different cache store in production
config.cache_store = :mem_cache_store

# Enable serving of images, stylesheets, and JavaScripts from an asset server
#config.action_controller.asset_host = "http://asset.xenium.bg"

# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
# config.assets.precompile += %w( search.js )

# Disable delivery errors, bad email addresses will be ignored
config.action_mailer.raise_delivery_errors = true
#config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address              => "localhost",
:port                 => 25,
:domain               => 'xenium.bg',
#:user_name            => '<username>',
#:password             => '<password>',
#:authentication       => 'plain',
:enable_starttls_auto => false
}

# Enable threaded mode
# config.threadsafe!

# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
config.i18n.fallbacks = true

# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
end

Thanks!

Antevert answered 27/9, 2011 at 16:29 Comment(2)
Some general tips on debugging this, which would also give you some extra info to put in this question. #1. If you display the same image in a plain-old view, does it display? If so, what is the generated URL for the image? #2. In the mailer version, the src attribute is actually blank? Please include the img tag that was generated in your question. #3. Be really careful about browser caching as you try different configs to fix this. Your browser may continue to display an "empty" image even after you've fixed your problem. #4. Include your environment config file as part of this question.Meridith
Hi thanks for the comment. I edited my question to include more stuff. There is no cache weirdness or something else. It just seems not to workAntevert
A
5

set config.action_controller.asset_host and config.action_mailer.asset_host and this works well.

config.action_mailer.asset_host = URL from where pick image
<%= image_tag image_path('logo.png') %>
Adolphadolphe answered 9/3, 2017 at 6:10 Comment(0)
G
3

According to the 2.3.3 Making Inline Attachments section, to create an inline attachment you will do as follows

attachments.inline['image.jpg'] = File.read('/path/to/image.jpg')

So in your case, it should be

attachments.inline['header.jpg'] = File.read("#{Rails.root}/app/assets/images/emails/header-general.png"
Gallinacean answered 7/12, 2011 at 5:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.