2011-09-22 3 views
4

Rails 3 및 Action Mailer로 이메일을 발송하려고합니다. 이메일은 정상적으로 출력되지만 배경 이미지가 포함 된 기본 스타일로 HTML 형식으로 만들길 바랍니다. 사용자가 사진을 표시 할 때까지 이미지가 차단 될 수 있지만 여전히 웹 서버의 이미지에 연결하는 것이 가장 좋을 것이라고 생각합니다.CSS 이미지가 Rails 3를 사용하는 이메일에 있음

registration_confirmation.html.erb라는 이메일 템플릿이처럼 시작합니다

전체 호스트 그래서 배경이 것을 포함하도록 배경 이미지에 대한 URL 링크를 얻을 수있는 가장 좋은 방법은 무엇입니까
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 
<style type="text/css"> 
body { 
    background: url(/images/mainbg_repeat.jpg) top repeat-x #cfcfcf; 
    margin: 0px 0px 0px 0px; 
    font-family: Arial, Helvetica, sans-serif; 
    font-size: 12px; 
    color: #565656; 
} 

이메일에 표시 되니?

답변

16

을 응답에서 내 다른 대답에 , @Kevin 썼다 :

감사 대답, 나는 그런 일을 생각 않았지만, 나는 내가 설정을이 방법으로 가능하다고 생각하지 않습니다 . 메일러 호출은 컨트롤러가 아닌 모델의 after_create 호출에서 발생하므로 언급 된대로 요청 개체에 액세스 할 수 있다고 생각하지 않습니다 (또는 내가 잘못 본 것). 내 메일러 이니셜 라이저에 이것을 가지고 있습니다 : ActionMailer :: Base.default_url_options [: host] = "localhost : 3000 어떻게 든 작동하도록 내 메일러에서 그 매개 변수를 사용할 수 있습니까?

대답은 예입니다. 모든 레일 URL - 건설 도우미는이 defualt_url_options를 사용해야합니다. :host를 설정하는 것 외에도, 당신은 또한 설정하여이 옵션 절대 URL을 사용하도록 강제해야한다 :

config.action_mailer.asset_host = 'http://localhost:3000' 

그런 다음 바로 image_path 도우미를 사용 또한

ActionMailer::Base.default_url_options[:only_path] = false 

를,이 같은 자산 호스트를 설정 대신에 손으로 쓰는 다음과 같이 URL을 :

<style type="text/css"> 
body { 
    background: url(<%= image_path('mainbg_repeat.jpg') %>) top repeat-x #cfcfcf; 
} 
</style> 

참고 : 설정 default_url_options을 그 deprec 직접적처럼 ated.여기에 그것을 할 수있는 새로운 방법 : 당신이 성능에 대해 걱정하지 않는 경우, roadie gem 당신을위한 스타일 시트에 URL을 처리 할 수 ​​

config.action_mailer.default_url_options = { 
    :host => 'localhost:3000', 
    :only_path => false 
} 
+0

추가 답변을 제공해 주셔서 감사 드리며, 문제가되는 방식과 새로운 방식을 모두 구성 해 보았지만 호스트와 전체 경로를 얻을 수는 없으므로 좀 더 연구하고 제가 찾을 수있는 부분을 살펴 보겠습니다. 한 가지 다른 점은 제안 된대로 image_tag를 사용할 때 내 이메일 코드는 다음과 같이 나타납니다 :'background : url (Mainbg_repeat) top repeat-x #cfcfcf;'image_tag가 올바른 도우미인가? 나는 가지고 싶지 않다 내 CSS에 내가 생각하지 않아? – Kevin

+0

@Kevin,'image_tag'는 제 부분의 오타였습니다. 'image_path'라고 쓰고 싶다. 그것을 수정했습니다. –

+0

@Kevin, image_path에 명시 적으로': only_path => false'를 설정하고 어떻게되는지보십시오. 'image_path ('mainbg_repeat.jpg', : only_path => false)' –

2

요청 호스트를 매개 변수로 메일러 메서드에 전달한 다음 메서드에서보기로 전달합니다. 따라서, 예를 들어, 메일 발송 방법 (예 레일 문서에서 해제 여기 수정) 다음과 같습니다

class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def registration_confirmation(user, host) 
    @user = user 
    @host = host 
    mail(:to => user.email, :subject => "Welcome to My Awesome Site") 
    end 
end 

당신은 이런 식으로 부를 것이다 : 당신의보기에서 다음

def some_action 
    UserMailer.registration_confirmation(@user, request.host).deliver 
end 

, 당신을 @host를 사용합니다 :

<style type="text/css"> 
body { 
    background: url(http://<%= @host %>/images/mainbg_repeat.jpg) top repeat-x #cfcfcf; 
} 
</style> 

이것은 모두 이미지 서버가 요청을 실행하는 서버와 동일한 것으로 가정합니다. 이미지 서버가 다른 곳에 호스팅되면 여기에 상수를 출력해야합니다. 당신은 lib 디렉토리/settings.rb이 같은 것을 넣어 수 : 상수가보기에 그런

module Settings 
    IMAGE_HOST = 'superawesome.images.com' 
end 

, 당신은 좋겠 단지 출력, 다음과 같이 :

<style type="text/css"> 
body { 
    background: url(http://<%= Settings::IMAGE_HOST %>/images/mainbg_repeat.jpg) top repeat-x #cfcfcf; 
} 
</style> 
+0

답변을 주셔서 감사합니다. 그런 식으로 생각했지만 어떻게 설정했는지 생각하지 않습니다. 메일러 호출은 컨트롤러가 아닌 모델에서 after_create 호출에서 발생하므로 언급 한대로 요청 개체에 액세스 할 수 없다고 생각합니다. 내 메일러 이니셜 라이저에 이것을 가지고 있습니다 : 'ActionMailer :: Base.default_url_options [: host] = "localhost : 3000"' 제 우편기에서 그 매개 변수를 어떻게 사용해도 작동 되나요? – Kevin