2012-04-30 3 views
2

이메일을 보내는 데 사용할 앱을 만들고 있습니다. 이메일을 생성하는 데 사용될 데이터를 수신하기 때문에 일반 메일러와 템플릿을 사용할 필요가 없습니다. 그러나 SMTP과 직접 상호 작용하는 대신 ActionMailer을 사용하면 몇 가지 이점이 있다고 가정합니다. ActionMailer::Base의 새 인스턴스를 인스턴스화하는 동안 문제가 발생했습니다. ActionMailer::Base을 확장하는 새 클래스를 정의하지 않고도 ActionMailer을 단독으로 사용하려면 어떻게해야합니까?레일 : ActionMailer를 단독으로 사용하는 방법?

+0

질문은 약간 혼란 스럽습니다. 이메일을 보내기위한 RESTful API를 만들고 있다고 가정 해 보겠습니다. RESTful API를 처리하는 레일 앱도 이메일 전송 책임이 있습니까? – patrickmcgraw

+0

네 말이 맞아. 미안. 나는 진짜 질문과 아무 관련이 없기 때문에 질문을 업데이트하고 REST에 관한 부분을 꺼냈다. – Andrew

+0

ActionMailer :: Base를 확장하고 싶지 않은 이유는 무엇입니까? 이것이 작동하는 방법입니다. – tybro0103

답변

7

난 당신의 우승자는 포니라는 루비 보석이라고 생각합니다. 이것은 예컨대, 당신은 매우 간단하게 메일을 보낼 수 있습니다 :

Mail.deliver do 
    from  '[email protected]' 
    to  '[email protected]' 
    subject 'Here is the image you wanted' 
    body  File.read('body.txt') 
    add_file :filename => 'somefile.png', :content => File.read('/somefile.png') 
end 

그것은 ActionMailer가하는 모두 같은 방법으로 전달을 지원합니다.

+0

메일 본문에 메일 젬을 사용하여 자리 표시자를 사용할 수 있습니까? – mohit

+0

아마 Rails가없는 Ruby 스크립트에서 이것을 사용할 수 있을까요? – Donato

2

이것은 가장 기본적인 해결책입니다. smtp 설정과 하드 코딩 된 값을 변수 등으로 변경해야합니다. 이렇게하면보기를 사용할 필요가 없습니다. 그래도 ERB를 사용하고 싶다면 Railscast 206을 확인하시기 바랍니다.

그냥이 코드를 변경 "test_email.rb"와 같은 파일에 넣어 ruby test_email.rb

require 'action_mailer' 

ActionMailer::Base.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => "gmail.com", 
    :user_name   => "testuser123", 
    :password    => "secret", 
    :authentication  => "plain", 
    :enable_starttls_auto => true 
} 

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

    # def somemethod() 
    # mail(:to => "John Doe <[email protected]>", :subject => "TEST", :body => "HERE WE GO!!!") 
    # end 

    def mail(args) 
    super 
    end 
end 

# TestMailer.somemethod().deliver 
TestMailer.mail(:to => "John Doe <[email protected]>", :subject => "TEST", :body => "HERE WE GO!!!") 
+0

이것은 내가 이미하고있는 일의 유형입니다. 일반적인 "준비"방법을 사용하는 일반 메일러가 있습니다. 나는'mail()'을 직접 사용하는 것과 같은 일을하고 싶습니다. – Andrew

+0

그래 코드를 좀 더 일반적인 것으로 변경했습니다. 이것은 당신이 원하는 것입니다, 그러나 당신이 그것을 제안한 방식이 아닙니다. 나는 약간의 오버 헤드가 있지만 그것은 당신의 명세를 따른다는 것을 알고있다. 당신은 모든 것을 오버라이드 할 수 있고, 아무런 뷰도 없다. mail()에서 당신 자신을 추가 할 수 있기 때문에 디폴트는 무의미하다. – ayckoster

2

아와 전화, 나는 지금보다 나은 이해 생각한다. 기본적으로 php의 mail()과 비슷한 간단한 하나의 라이너를 찾고 있습니다.

그렇다면 ActionMailer는 실제로이 작업에 적합한 도구가 아니기 때문에 당신에게 의미가 없습니다. https://github.com/benprew/pony

예 : ActionMailer의 기본 기능은 mail gem에 의해 제공됩니다

Pony.mail(:to => '[email protected]', :from => '[email protected]', :subject => 'hi', :body => 'Hello there.') 
+0

레일즈 밖에서 ActionMailer를 사용하면 약간의 번거롭고 사용하기가 번거롭다. 또한 Ruby (레일이 아닌) 프로젝트에서 Pony를 사용하고 있습니다. – dimitarvp

관련 문제