2017-11-08 12 views
-1

devise mailer를 재정 의하여 맞춤 메일러를 사용하고 있습니다. 잘 작동합니다. 그러나 일부 데이터를 메일러 템플릿에 전달해야 확인 이메일이 사용자에게 전송 될 때 일부 동적 콘텐츠가 포함됩니다. 세션, @ resource 및 current_user 메소드를 사용하여 시도했지만 둘 다 작동하지 않습니다. 그것을 할 방법이 있습니까? 컨트롤러Rails에서 맞춤 메일러를 고안하기 위해 인스턴스 변수를 전달하는 방법은 무엇입니까?

CustomMailer.confirmation_instructions(token, {custom_field: "abc"}) 

이의 사용자 정의 메일러

class CustomMailer < Devise::Mailer 
    helper :application # gives access to all helpers defined within `application_helper`. 
    include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url` 
    default template_path: 'devise/mailer' # to make sure that you mailer uses the devise views 

    def confirmation_instructions(record, token, opts={}) 
     opts[:subject] = "Email Confirmation" 
     opts[:from] = '[email protected]' 
     @data = opts[:custom_field] 
    super 
    end 

end 

템플릿의 코드

We are happy to invite you as user of the <b> <%= @data %> </b> 

감사합니다.

+0

방금 ​​편집 한 확인 이메일보기 나이 : 그럼

def confirmation_instructions(record, token, opts={}) headers["Custom-header"] = "Bar" opts[:from] = '[email protected]' opts[:reply_to] = '[email protected]' super end 

를 호출 어디서든 당신이 원하는 메일러에서 작동하도록 구성 설정을 변경 했습니까? – AntonTkachov

+0

질문에 코드를 추가하십시오! – Niklas

+0

@Niklas 코드를 추가하십시오. – john

답변

1

먼저 Devise custom mailer에 대해 읽어보고 프로세스를 숙지하십시오.

간단히 이것은 당신이 그 일에 대해 갈 것 방법은 다음과 같습니다

설정 에/초기화/devise.rb : 이제

config.mailer = "DeviseMailer" 

당신이 할 것 같은 그냥 DeviseMailer을 사용할 수 있습니다 프로젝트의 다른 메일 서버 :

class DeviseMailer < Devise::Mailer 
     helper :application # gives access to all helpers defined within `application_helper`. 
     include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url` 
     default template_path: 'devise/mailer' # to make sure that your mailer uses the devise views 
    ... 

    def invite(sender, recipient) 
     @sender = sender 
     @recipient = recipient 

     mail(:to => recipient.email, 
      :subject => "Invite by #{sender.name}" 
     ) 
    end 
     ... 
    end 

이제 프로젝트의 invite를 호출하고 whate를 전달할 수 있습니다 ver 변수에서 템플릿에 액세스 할 수 있습니다.

예 :

<p>Hello <%= @recipient.email %></p> 

<% if @sender.email? %> 
    <p> some additional welcome text here from <%= @sender.email %> </p> 
<% end %> 
invite.html.erb :

DeviseMailer.invite(current_user, newContact).deliver 

그래서보기에 당신은 그럼 그냥 변수 호출 할 수 있습니다

invite 메소드를 호출

여기에 특정 질문에 답하려면 편집을 재정의 할 것입니다 :

DeviseMailer.confirmation_instructions(User.first, "faketoken", {}) 
+0

답장을 보내 주셔서 감사합니다.하지만 컨트롤러가 계정 생성시 확인 이메일을 보내주십시오. 질문을 편집 해주세요. – john

+0

확실합니다. 이것은 정의한 함수를 재정의하는 방법을 보여주는 예입니다. 여기에 편집이 있습니다. – Cyzanfar

+0

친절하게 제 코드를보고 제가 잘못 생각한 부분을 지적하십시오. 나는 올바르게하고 있다고 생각하지만 그것이 왜 효과가 없는지 확신하지 못합니다. – john