2011-08-24 3 views
0

Newb 질문 : 등록 된 사용자가있는 라이브 사이트가 있습니다. 일부 새 기능이 추가되었습니다 (메일러 지원 포함). 우리는 모든 기존 사용자에게 이메일을 보내고 싶습니다 (비슷하지만 새로운 사용자에게 자동으로 나가는 사용자와 동일하지는 않음).모든 (또는 일부) 사용자에게 전자 메일을 보내기위한 레일스 옵션이 있습니까?

이메일 전송을 위해 어떤 옵션이 있습니까? 이 메시지는 한 번만 전송되므로 Rails 앱에서 (메시지 자체 이외의) 코드는 필요하지 않습니다. 우리는 이것을받은 사람을 저장해야 할 필요가 없습니다. 왜냐하면 모든 사용자가 일단이 메시지를 얻을 수있게되면 그러한 메시지를받은 것으로 간주되기 때문입니다.

레이크 작업이지만 내가 찾을 수있는 모든 예제는 빌드 스크립트를위한 것입니다.!? 아니면 레일스 콘솔을 production에 사용해야하나요? 아마도 users의 배열을 가져 와서 이메일을 보내고 싶다면 deliver 메시지를 보내시겠습니까?

확실하지 않습니다. 나는 ActionMailer과 많이 일하지 않았다.

답변

0

나는 이런 식으로 그것을 할 아마 것 : 시스템이 사용자에게 이메일을 보냈는지 여부를 확인하기 위해

, 당신은 속성의는 기본적으로 그냥 부울 인 'sent_email'를 가정 해 봅시다 추가해야합니다.

나는 모든 사용자를 sent_email = 0으로 검사하는 rake 작업을 위해 cron 작업을 만들 것이다. 그런 다음 각 배열을 반복하고 전자 메일을 보내고 sent_email = 1로 설정합니다. cron 작업은 선호도에 따라 매일 실행될 수 있습니다. 보석을 사용할 때마다 cron 작업을 설정할 수 있습니다.

schedule.rb (때마다 물건)

job_type :run_script, "RAILS_ENV=:environment ruby :path/script/:task" 
every 1.day do 
    run_script('send_email.rb') 
end 

스크립트/send_email.rb

#!/usr/bin/env ruby 
puts "Loading rails environment..." 
require(File.dirname(__FILE__) + "/../config/environment") unless defined?(Rails) 

class SendEmail 
    def send_email 
    users = User.send_email_to 
    users.each do |user| 
     OneTimeMailer.deliver_one_time_email(user) 
    end 
    end 
end 

우편물/one_time_mailer.rb

class OneTimeMailer < ActionMailer::Base 
    def one_time_email(user) 
    recipients user.email 
    from 'your system' 
    subject 'hello world' 
    body 'this is a one time email. thank you' 
    end 
end 

도움이 되었기를 바랍니다.

+0

감사를 실행하고 완료! 두 가지 질문. 내가 한 번만 할 필요가 있기 때문에 앞으로 매일 매일 * cron 작업을 실행해야합니까? 둘째, Rails 2에 더 적합한 것처럼 보입니다. 확실하지는 않지만 적어도 레일스 3에서는'deliver' 메소드가 변경되었다고 생각합니다. 가능하다면 ** 간단한 Rake ** 작업을 찾고 있습니다. .. – Meltemi

+1

1) 한 번만 쓰면 내 의견의 cron 작업 섹션을 스크랩하고 SendEmail 클래스를 사용하여 레이크 작업을 실행하십시오. . 2) 빠른 Google을 수행하여 다음을 찾았습니다. http://edgeguides.rubyonrails.org/action_mailer_basics.html 필요한 것을 쉽게 볼 수 있습니다. OneTimeMailer.one_time_email (user) .deliver와 같을 것입니다. – Pash

0

레이크 작업을 한 번 실행하면 완료됩니다. 당신의 데이터베이스를 통해

rails g task my_namespace my_task1 my_task2 

이제 루프 :

namespace :sent_email_to_everyone do 
    desc "TODO" 
    task send_that_mail: :environment do 
    user = User.all 
    user.each do |user| 
     Yourmailer.send_email(user.email) 
     end 
    end 
    end 
end 

지금 당신은 그냥이 도움이됩니다

rake sent_that_mail 
관련 문제