2009-01-23 27 views
23

Görüntüleri ve düzgün biçimlendirme içeren Rails uygulamasından e-postalar nasıl oluşturup gönderirsiniz? Facebook'tan ve beğendiğiniz gibi.Rails'in css ve görüntüleri ile nasıl e-posta oluşturabilirim?

+0

Cevabım, sorunuzu yanıtlıyor mu? –

+0

@bjeanes - Başka bir şeyle meşgul olduğum için bunu denemek için zamanım olmadı, ama çözümünüz doğru satırlarda olduğu gibi görünüyor. Teşekkürler. Denemek ve güncellemek. – Akshay

cevap

31

ActionMailer kullanarak Rails'ten normal düz metin e-postalarını nasıl göndereceğinizi bildiğinizi varsayarak, HTML e-postanızı almak için e-postanız için bir içerik türü ayarlamanız gerekir.

Örneğin, bildirimde bulunan bu gibi görünebilir:

class MyMailer < ActionMailer::Base 
    def signup_notification(recipient) 
    recipients recipient.email_address_with_name 
    subject  "New account information" 
    from   "[email protected]" 
    body   :user => recipient 
    content_type "text/html" 
    end 
end 

Not content_type "text/html" hattı. Bu, ActionMailer uygulamasına varsayılan text/plain yerine text/html içerik türünde bir e-posta göndermesini bildirir.

Sonraki mailer görünümleri çıktısını HTML yapmalısınız. Örneğin, görünüm dosyası app/views/my_mailer/signup_notification.html.erb aşağıdaki gibi görünebilir:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

<html lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <style type="text/css" media="screen"> 
     h3 { color: #f00; } 
     ul { list-style: none; } 
    </style> 
</head> 
<body> 
    <h3>Your account signup details are below</h3> 
    <ul> 
    <li>Name: <%= @user.name %></li> 
    <li>Login: <%= @user.login %></li> 
    <li>E-mail: <%= @user.email_address %></li> 
    </ul> 
</body> 
</html> 

Eğer HTML görünümü, temel stiller tanımlamak için bir <style> etiketi içerebilir görebileceğiniz gibi. Tüm posta istemcilerinde özellikle HTML ve CSS desteklenmez, ancak metin stilleri üzerinde yeterli biçimlendirme denetimine sahip olmanız gerekir.

Ekli e-postaları görüntülemeyi düşünüyorsanız görüntüleri katıştırmak biraz daha zordur. Harici sitelerden e-postaları dahil ediyorsanız, genellikle HTML'da olduğu gibi bir <img /> etiketi kullanabilirsiniz. Bununla birlikte, birçok posta istemcisi, kullanıcı görüntüleri yetkilendirene kadar bu görüntülerin görüntülenmesini engeller. Ekli görüntüleri görüntülemeniz gerekiyorsa, Raylar eklentisi Inline Attachments bir göz atmaya değer olabilir. Raylar posta desteğine ilişkin daha fazla bilgi için

, ActionMailer documentation harika bir kaynak

+8

Sadece bir not: Gmail ** harici CSS'yi ** desteklemeyecektir. CSS'nin düzgün bir şekilde Gmail'de görüntülenmesini istiyorsanız, '

text
.0 – sscirrus

+2

gibi satır içi stillerini kullanmanız gerekir. Roadie'yi kullanarak stillerinizi otomatik olarak çizebilirsiniz: https://github.com/Mange/roadie –

+1

The Premailer gem, inlining için de çok uygundur stilleri. E-posta şablonlarınızda/düzenlerinizde kullanımı çok kolay hale getirmek için Premailer'i kullanan inline_css adlı bir mücevher de vardır. – scottwb

1

size benim görüntüleri depolamak için Paperclip kullanmak ActionMailer::Base.asset_host = 'http://www.your-domain.com'

tanımladıktan sonra görüntüler için sadece normal bir image_tag yardımcısı kullanabilirsiniz Benim durumumda bunu kullanarak bir e-postaya resim ekleyebilirim.

image_tag result.photo.url(:small) 
+0

Bu 'config.action_mailer.asset_host' şimdi – elsurudo

İlgili konular