2009-01-23 32 views
23

Làm thế nào để bạn tạo và gửi email từ ứng dụng Rails, có chứa hình ảnh và định dạng thích hợp? giống như những gì bạn nhận được từ facebook và thích.Làm cách nào để tạo email với css và hình ảnh từ Rails?

+0

phản hồi của tôi có trả lời câu hỏi của bạn không? –

+0

@ bjeanes - Tôi đã không thực sự có thời gian để thử điều này vì tôi đã bận rộn với cái gì khác, nhưng có vẻ như giải pháp của bạn là trên dòng bên phải. cảm ơn. Sẽ cố gắng và cập nhật. – Akshay

Trả lời

31

Giả sử bạn biết cách gửi email thuần văn bản thông thường từ Rails bằng ActionMailer, để nhận được HTML email hoạt động, bạn cần đặt loại nội dung cho email của mình.

Ví dụ, notifer của bạn có thể trông như thế này:

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 

Lưu ý dòng content_type "text/html". Điều này yêu cầu ActionMailer gửi email có loại nội dung là text/html thay vì mặc định text/plain.

Tiếp theo, bạn phải đặt đầu ra chế độ xem thư của mình là HTML. Ví dụ, xem tập tin của bạn app/views/my_mailer/signup_notification.html.erb có thể trông giống như sau:

<!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> 

Như bạn có thể thấy quan điểm HTML có thể bao gồm một thẻ <style> để xác định phong cách cơ bản. Không phải tất cả HTMLCSS đều được hỗ trợ, đặc biệt là trên tất cả ứng dụng thư khách, nhưng bạn chắc chắn phải có đủ quyền kiểm soát định dạng đối với kiểu văn bản.

Hình ảnh nhúng là một mẹo nhỏ nếu bạn định hiển thị các email được đính kèm. Nếu bạn chỉ đơn giản là bao gồm các email từ các trang web bên ngoài, bạn có thể sử dụng một thẻ <img /> như bạn thường làm trong HTML. Tuy nhiên, nhiều ứng dụng thư khách sẽ chặn các hình ảnh này hiển thị cho đến khi người dùng ủy quyền. Nếu bạn cần hiển thị hình ảnh đính kèm, trình cắm thêm Rails Inline Attachments có thể đáng xem.

Để biết thêm thông tin về hỗ trợ gửi thư Rails, các ActionMailer documentation là một nguồn lực lớn

+8

Chỉ cần lưu ý: Gmail sẽ ** không hỗ trợ ** CSS bên ngoài. Nếu bạn muốn CSS hiển thị đúng trong Gmail, bạn phải sử dụng kiểu nội tuyến như '

text
. ' – sscirrus

+2

Bạn có thể tự động điền các kiểu bằng Roadie: https://github.com/Mange/roadie –

+1

Đá quý Premailer cũng rất tốt cho nội tuyến phong cách. Ngoài ra còn có một gem được gọi là inline_css sử dụng Premailer để làm cho nó dễ sử dụng trong các mẫu/bố cục email của bạn. – scottwb

1

Đối với hình ảnh mà bạn chỉ có thể sử dụng bình thường image_tag helper sau khi bạn đã xác định các ActionMailer::Base.asset_host = 'http://www.your-domain.com'

tôi sử dụng Kẹp giấy để lưu trữ hình ảnh của tôi vì vậy trong trường hợp của tôi, tôi có thể thêm một hình ảnh vào một email bằng cách sử dụng này.

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

Đây là 'config.action_mailer.asset_host' ngay bây giờ – elsurudo

Các vấn đề liên quan