Rails Email Protips

CSS inlining

Para obter os melhores resultados de entrega de e-mail em HTML, o CSS deve ser embutido. Isso é uma dor enorme e um boletim informativo simples se torna incontrolável muito rapidamente. Inline email CSS automaticamente com premailer-rails ou roadie-rails

Rastreamento UTM

Anexe parâmetros UTM com identificador de e-mail a todos os links nos e-mails:

# Gemfile
gem
'addressable'
# app/mailer_interceptors/utm_mailer_interceptor.rb
class UtmMailerInterceptor
URL_RE
= /\b((https?):\/\/\w+\.[-A-Z0-9+&@#\/%?=~_|$!:,.;]*)/i
URL_IN_HREF_RE
=/href=["']#{URL_RE}["']/i
MIME_TYPES
= %w(text/plain text/html application/xhtml+xml)
class << self
def delivering_email(message)
[message, message.all_parts].flatten.compact.each do |part|
if MIME_TYPES.include?(part.mime_type)
part
.body = part.body.decoded.gsub(URL_IN_HREF_RE) do |href, a|
url
= $1
if url !~ /\.(jpg|png|gif)(\?|$)/
%Q(href="#{append_utm message, url}")
else
href

end
end
end
end
end

private

def append_utm(message, url)
params
= {
utm_source
: 'App Emails',
utm_medium
: 'email',
utm_campaign
: message.header['X-APP-EMAIL-ID'].value,
utm_content
: message.subject
}
append_params url
, params
end

def append_params(url, params)
uri
= Addressable::URI.parse(url)
uri
.query_values = (uri.query_values || {}).merge(params)
uri
.to_s
end
end
end
# config/initializers/configure_mailers.rb
ActionMailer::Base.register_interceptor UtmMailerInterceptor
ActionMailer::Base.class_eval do
def mail(headers = {}, &block)
# Set identifier for the email being rendered
headers
['X-APP-EMAIL-ID'] ||= "#{self.class.name.underscore}-#{caller[0][/`.*'/][1..-2]}"
super(headers, &block)
end
end

Visualização de Email

Para um desenvolvimento rápido, você pode querer visualizar e-mails e testar as entregas facilmente, usando uma joia como o REP .

captura de tela