2013-07-06 5 views
0

많은 양의 이메일을 보내야합니다. 이 경우 이메일을 구축하는 것은 매우 무거운 작업이다, 그래서 나는 캐시 및 재사용하기 위해 노력하고있어 :ActionMailer에서 동일한 이메일을 다시 보내십시오.

mail = Rails.cache.fetch("newsletters/#{newsletter.id}") do 
    NewsletterMailer.products(newsletter) 
end 

recipients.find_each do |user| 
    mail.to = user.email 
    mail.deliver 
end 

을하지만이 코드 만 먼저 수신자가 이메일을 수신합니다. 동일한 전자 메일을 두 번 이상 보낼 수없는 것 같습니다. 내가 DUP 시도보다 :

recipients.find_each do |user| 
    m = mail.dup 
    m.to = user.email 
    m.deliver 
end 

같은 결과.

m = Marshal.load(Marshal.dump(mail)) 

그런 다음 이메일 모든받는 사람에게 배달됩니다 : 그냥 내가 시도 대신 DUP의 가정을 확인합니다.

제 궁금한 점은 어떻게 "재설정"(또는 그와 같은) 이메일을 보내고 다시 보낼 수 있습니까?

ActionMailer 버전은 문제가 이메일 같은 '메시지 ID'헤더를하였습니다이었다 3.1.12

UPD

입니다. 개발 중에 나는 GMail을 사용하고 있었고 정확히 ActionMailer 나 Gmail이 보내지 않았다는 것을 모릅니다. 지금은 테스트 할 기회가 없습니다. 어쨌든 같은 '메시지 ID가'잘못 그래서 각 이메일에 대한 새로운 헤더를 생성하는 add_message_id 추가 :

recipients.find_each do |user| 
    mail.add_message_id 
    mail.to = user.email 
    mail.deliver 
end 

어쩌면 누군가가 도움이 찾을 것 또는 사람이 명확한 설명을 제공 할 수 있습니다.

피어 앨런의 답변을 시도하지 않았습니다. 그러나 내가 이메일에있는 데이터는 이메일 without using templates을 보내려고 수있는 각 수신자에 대한 변경이 필요하지 않는 가정이

답변

0

을 받아 그 이유는, 또한 해결책이 될 수있는 것 같다.

# determine a way to get the email body into a string 
email_body = NewsletterMailGenerator.generate_email(newsletter) 

recipients.find_each do |user| 
    NewsletterMailer.products(user.email, email_body).deliver 
end 

class NewsletterMailer < ActionMailer::Base 
    def products(user, email_body) 
    mail(to: user, 
     body: email_body, 
     content_type: "text/html", 
     subject: "Already rendered!") 
    end 
end 

샘플 메일러 코드는 http://guides.rubyonrails.org/action_mailer_basics.html#sending-emails-without-template-rendering

+0

I 업데이트 질문 여기에서이다 –

관련 문제