2010-12-08 4 views
6

Ruby on Rails에서 나는 (특정 테스트 환경에서) 내 응용 프로그램이 응용 프로그램에서 생성 한 모든 보내는 전자 메일을 가로 채고 대신 보내고 싶습니다. 다른 테스트 주소 (어쩌면 "처음에 보낸 사람 : ..."이라고 말하기 위해 본문을 수정할 수도 있습니다).모든 발신 이메일을 테스트 용 단일 주소로 리디렉션

나는 ActionMailer가 메일을 관찰하거나 가로 채기위한 몇 가지 고리를 가지고 있다고 생각하지만, 쉬운 방법이 있다면 내 솔루션을 돌리고 싶지 않습니다. 제안?

답변

11

우리는 많은 성공을 거둔 sanitize_email 보석을 사용하고 있습니다. 모든 이메일을 지정한 주소로 보내고 원래 수신자와 함께 제목을 앞에 둡니다. 그것은 당신이 원하는 것을 정확히하고 이메일을 보내 주시면 우리에게 바람을 불어 넣는 것처럼 들립니다.

+0

정확히 내가 본 것과 같습니다. 감사! – jrdioko

1

일반적으로 테스트에서 수행하는 작업은 응용 프로그램을 통해 전송 된 메일에 대한 TMail 객체의 배열 인 ActionMailer :: Base.deliveries를 검사하는 것입니다. 테스트 환경에서 기본 설정은 아무 것도 전달되지 않고 해당 배열에 배치된다는 것입니다.

또한 테스트에서 email_spec을 사용하고 있습니다. 자체 테스트 기능을 롤링하는 것보다 훨씬 편리합니다. email_spec, capybara의 도우미 기능과 웹 단계, factory_girl을 사용하면 대부분의 응용 프로그램에서 테스트 용 응용 프로그램의 표면 영역의 80 %에 가깝습니다.

1

오래된 질문하지만, Google에 먼저 타격 ...

나는 결국 delivery_method = :sendmail를 사용하여 (AB)에 의해 다른 방식으로이 문제를 해결 단지 파이프 실행 뭔가 이메일이 효과; 이것은 sendmail으로 가정합니다. 그러나 실제로는 무엇이든 될 수 있습니다. 확인 후

YourApp::Application.configure do 
    # [...] 
    config.action_mailer.delivery_method = :sendmail 
    config.action_mailer.sendmail_settings = { 
     location: "#{Rails.root}/script/fake-sendmail", 
     arguments: '[email protected]', 
    } 
end 

그리고 script/fake-sendmail :

#!/bin/sh 
sendmail -if [email protected] "$1" < /dev/stdin 

(!이 실행을하는 것을 잊지 마세요)

관련 솔루션 당신의 config/environments/development.rb 당신이 뭔가를 할 수 있습니다에서

(내가 선호하는) mbox 파일에 추가하는 것입니다. 이것은 거의 필요치 않았다.

config/environments/development.rb은 비슷합니다

YourApp::Application.configure do 
    # [...] 
    config.action_mailer.delivery_method = :sendmail 
    config.action_mailer.sendmail_settings = { 
     location: "#{Rails.root}/script/fake-sendmail", 
     arguments: "'#{Rails.root}/tmp/mail.mbox'", 
    } 
end 

그리고 script/fake-sendmail을 지금과 같이 보인다 :

#!/bin/sh 
echo "From FAKE-SENDMAIL $(date)" >> "$1" 
cat /dev/stdin >> "$1" 
echo >> "$1" 

열기 이것은 매우 간단한 방법이다

$any 전자 메일 클라이언트로 mbox 파일 ... , 그것은 꽤 잘 작동하는 것 같습니다. 좀 더 자세한 내용 can be found here (나는이 페이지의 저자입니다).

관련 문제