2013-07-22 4 views
0

Я потратил время на исследования, и это то, о чем я мог думать.
Но, я уверен, что что-то не так с этой частью @users_emails += user.emailКак правильно использовать ActionMailer, когда я хочу использовать BCC?

Может ли кто-нибудь исправить мой код, чтобы заставить его работать?

Контроллеры/users_controller.rb

def send_all_at_once 

    @notification_users = User.where("users.country_id=?", 36) 

    @notification_users.each do |user| 
     @users_emails += user.email 
    end 

    @subject = "Test subject" 
    @body = "Test body" 

    CallMailer.call_email(@users_emails, @subject, @body).deliver 

end 

приложение/отправители/call_mailer.rb

class CallMailer < ActionMailer::Base 

    default :from => "[email protected]" 

    def call_email(@users_emails, @subject, @body) 
     mail(:to => "[email protected]", 
      :bcc => @users_emails, 
      :subject => @subject, 
      :body => @body) do |format| 
      format.html 
      format.text 
     end 
    end 

end 

просмотров/call_mailer/call_email.html.erb

<html> 
    <head> 
     <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> 
    </head> 
    <body> 
     <p> 
      You received a message. 
     </p> 
     <p> 
      Subject: <%= raw @subject %> 
     </p> 
     <blockquote> 
      <p> 
       <%= simple_format(@body) %> 
      </p> 
     </blockquote> 
     <p> 
      From: <%= link_to root_url,root_url %> 
     </p> 
    </body> 
</html> 

ответ

1

Как правило, вы бы передать свои bcc'ed адреса электронной почты в виде массива:

mail(:to => "[email protected]", 
    :bcc => ['[email protected]', '[email protected]', '[email protected]'], 
    :subject => @subject, 
    :body => @body) 

Однако, поскольку @user_emails уже массив писем, вы должны отказаться обрамляющие скобки и передать переменную экземпляра напрямую :

mail(:to => "[email protected]", 
    :bcc => @users_emails, 
    :subject => @subject, 
    :body => @body) 

Ниже изображен правильный синтаксис для создания массива пользовательских писем:

@notification_users.each do |user| 
    @users_emails << user.email 
end 

ОБНОВЛЕНИЕ:

В комментатора mbratch проницательно указывает, лопата оператор в приведенном выше примере, может быть замещен плюс-равно (+=) оператор следующим образом:

@user_emails = [] 
@notification_users.each do |user| 
    @users_emails += [user.email] 
end 

ОБНОВЛЕНИЕ 2:

Вы можете обойти цикл контроллера в целом с помощью электронных писем пользователей отображения непосредственно в вашем вызове функции mail:

mail(:to => "[email protected]", 
    :bcc => User.where("users.country_id=?", 36).map(&:email), 
    :subject => @subject, 
    :body => @body) 
+0

Спасибо за комментарий! Как я могу создать массив с помощью '@notification_users.each do | user \' и 'user.email'? – MKK

+0

Спасибо большое :) Все остальное выглядит хорошо для вас? – MKK

+0

Возможно, вам придется попробовать передать '@ users_emails' как с _and_ без прилагаемых скобок. Поскольку '@ users_emails' уже является массивом, может быть необязательным вложить его в массив, как если бы вы отправляли отдельные электронные письма, например,' ['[email protected]', '[email protected]'] '. – zeantsoi

Смежные вопросы