복붙노트

[RUBY-ON-RAILS] 레일 3 + 유증 : 확인 이메일이 사용자의 두 번째 전자 메일 주소를 추가 할 수 메일러 방법을 수정하는 방법

RUBY-ON-RAILS

레일 3 + 유증 : 확인 이메일이 사용자의 두 번째 전자 메일 주소를 추가 할 수 메일러 방법을 수정하는 방법

배경 : 우리의 응용 프로그램에서 우리는 종종 영업 담당자가 영업 사원의 컴퓨터를 사용하는 고객에 대한 설정을 할 수 있습니다 (종종 고객들은 우리가 그들을 설정 한 시간에 자신의 이메일에 액세스 할 수 없습니다). 있는 거 생각은 영업 담당자의 이메일 주소에 대한 유증 등록 양식에 필드를 추가하고 확인 링크를 가지고 우리가 또한 이메일 주소로 이동합니다.

질문 : 숨은 참조 (또는 참조)에도 새 사용자 등록 양식에 제공되는 (선택 사항) "backup_email"이메일 주소로 처음 확인 메일 (초기 확인 이메일을) 유증을 알 수있는 방법이 있습니까?

특정 코드가 등록 필드에 입력 만하면 다른 방법으로는, 방법 만에 '사용 안 함'확인 이메일 과정이있다?

나는 유증 등록 양식에 다른 필드를 추가하는 방법을 알고 있지만, 나는 그것이 또한 "backup_email"주소로 이동하는 방법 / 확인 메일은 "이메일"주소로 보낼 때 있도록 고안 메일러 코드를 수정하는 경우 표시되지 않습니다 (있는 경우, 경우에 따라서는 빈입니다).

조니 잔디에 감사합니다!

나는 레일 메일러 CustomerUserMailer를 생성 않았다 및 추가

#config/initializers/devise.rb
config.mailer = "CustomUserMailer"

내 사용자 지정 메일러 외모가 좋아 :

# app/mailers/customer_user_mailer.rb
class CustomUserMailer < Devise::Mailer
  def headers_for(action)
    headers = {
      :subject       => translate(devise_mapping, action),
      :from          => mailer_sender(devise_mapping),
      :to            => resource.email,
      :cc            => resource.backup_user_email(action),
      :template_path => template_paths
    }
  end
end

그럼 내가보기에 / 궁리 / 메일러에게 전망 FROM / customer_user_mailer을 (그렇지 않으면 이메일이 비어) 3 메일러 템플릿을 이동

그럼 난 내 사용자 모델이라는 backup_user_email하는 방법을 추가 ()이 반환 사용자 레코드와 행동 데이터를 기반으로 '백업'이메일 주소 (있는 경우). confirmation_instructions : 유일한 "트릭은"작업을 테스트 할 때이 동작 == "confirmation_instructions"그것은 행동 ==이다가 아니라고있다.

해결법

  1. ==============================

    1.그것을 할 수있는 한 가지 방법은 고안의 headers_for 조치를 무시하는 것 :: 메일러

    그것을 할 수있는 한 가지 방법은 고안의 headers_for 조치를 무시하는 것 :: 메일러

    class MyMailer < Devise::Mailer
      backup_email = "..."
      def headers_for(action)
        headers = {
         :subject       => translate(devise_mapping, action),
         :from          => mailer_sender(devise_mapping),
         :to            => resource.email,
         :bcc           => backup_email
         :template_path => template_paths
      }
    end
    

    그리고 당신의 우편물을 사용하는 유증 알려주기 :

    #config/initializers/devise.rb
    config.mailer = "MyMailer"
    
  2. ==============================

    2.이런 경우에 누구는 Google을 통해 여기 있어요 - 고안의 최신 버전으로, header_for는 두 개의 매개 변수를 사용합니다. 코드가 될 필요가있을 것이다 그래서 :

    이런 경우에 누구는 Google을 통해 여기 있어요 - 고안의 최신 버전으로, header_for는 두 개의 매개 변수를 사용합니다. 코드가 될 필요가있을 것이다 그래서 :

    class MyMailer < Devise::Mailer
      backup_email = "..."
      def headers_for(action, opts)
        headers = {
          :subject       => subject_for(action),
          :to            => resource.email,
          :from          => mailer_sender(devise_mapping),
          :bcc           => backup_email,
          :reply_to      => mailer_reply_to(devise_mapping),
          :template_path => template_paths,
          :template_name => action
        }.merge(opts)
      end
    end
    

    즉 그것을 할 수있는 가장 좋은 방법이 될 않을 수도 있지만 적어도 그것은 오류를 방지 할 수 있습니다.

  3. ==============================

    3.당신은 훨씬 깨끗하고 간단 인이 코드를 사용할 수 있습니다

    당신은 훨씬 깨끗하고 간단 인이 코드를 사용할 수 있습니다

    # app/mailers/my_mailer.rb
    class MyMailer < Devise::Mailer
      def headers_for(action, opts)
        backup_email = "..."
        super.merge!({bcc: backup_email})
      end
    end
    
    # config/initializers/devise.rb
    ...
    config.mailer = MyMailer
    ...
    

    해시 병합에 전달! 방법은 추가하거나 원하는 이메일 헤더를 수정할 수 있습니다.

  4. ==============================

    4.당신의 대답은 나를 위해 일했다. 정말 고맙습니다.

    당신의 대답은 나를 위해 일했다. 정말 고맙습니다.

    난 그녀가 유증을 사용자 정의 할 필요했습니다있어서, 시나리오를했다 :   1) 다른 이메일에 BCC에 송신 가입 확인 이메일은 환경에 따라.   2) 이메일은 가입 확인 메일에 대한 BCC 추가해야합니다.

    코드 조각 아래 그림과 같은 것을 달성하기 위해서, 난 작용 인자에 대한 값을 비교 :

    def headers_for(action)
      if action == :confirmation_instructions
        if Rails.env.production?
            recipient_email = "user1@example.com"
        else
            recipient_email = "user2@example.com"
        end
    
        headers = {
          :subject => translate(devise_mapping, action),
          :from => mailer_sender(devise_mapping),
          :to => resource.email,
          :bcc => recipient_email,
          :template_path => template_paths
        }
      else
        super
      end
    end
    
  5. from https://stackoverflow.com/questions/6271093/rails-3-devise-how-to-modify-the-mailer-method-for-confirmation-emails-to-add by cc-by-sa and MIT license