Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当我想使用密件抄送时,如何正确使用ActionMailer?_Ruby On Rails_Ruby On Rails 3_Actionmailer - Fatal编程技术网

Ruby on rails 当我想使用密件抄送时,如何正确使用ActionMailer?

Ruby on rails 当我想使用密件抄送时,如何正确使用ActionMailer?,ruby-on-rails,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby On Rails 3,Actionmailer,我花时间做研究,这就是我能想到的。 但是,我很确定这部分有问题@users\u emails+=user.email 有人能修好我的代码让它工作吗 控制器/用户\u controller.rb def send_all_at_once @notification_users = User.where("users.country_id=?", 36) @notification_users.each do |user| @users_emails += use

我花时间做研究,这就是我能想到的。
但是,我很确定这部分有问题
@users\u emails+=user.email

有人能修好我的代码让它工作吗

控制器/用户\u 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
class CallMailer < ActionMailer::Base

    default :from => "dont-reply@example.com"

    def call_email(@users_emails, @subject, @body)
        mail(:to => "admin@example.com",
            :bcc => @users_emails,
            :subject => @subject,
            :body => @body) do |format|
            format.html
            format.text
        end
    end 

end
<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>
app/mailers/call\u mailer.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
class CallMailer < ActionMailer::Base

    default :from => "dont-reply@example.com"

    def call_email(@users_emails, @subject, @body)
        mail(:to => "admin@example.com",
            :bcc => @users_emails,
            :subject => @subject,
            :body => @body) do |format|
            format.html
            format.text
        end
    end 

end
<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>
class CallMailer“不-reply@example.com"
def call_email(@users_email、@subject、@body)
邮件(:收件人=>)admin@example.com",
:bcc=>@users\u电子邮件,
:subject=>@subject,
:body=>@body)do |格式|
format.html
format.text
结束
结束
结束
查看/call\u mailer/call\u email.html.erb

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
class CallMailer < ActionMailer::Base

    default :from => "dont-reply@example.com"

    def call_email(@users_emails, @subject, @body)
        mail(:to => "admin@example.com",
            :bcc => @users_emails,
            :subject => @subject,
            :body => @body) do |format|
            format.html
            format.text
        end
    end 

end
<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>


您收到一条消息。

主题:

发件人:


通常,您会将密件抄送的电子邮件地址作为数组传递:

mail(:to => "admin@example.com",
    :bcc => ['first@email.com', 'second@email.com', 'third@email.com'],
    :subject => @subject,
    :body => @body)
但是,由于
@user\u emails
已经是一个电子邮件数组,您应该放弃括号,直接传递实例变量:

mail(:to => "admin@example.com",
    :bcc => @users_emails,
    :subject => @subject,
    :body => @body)
以下描述了创建用户电子邮件数组的正确语法:

@notification_users.each do |user|
    @users_emails << user.email
end
更新2:

通过在调用
mail
函数时直接映射用户电子邮件,可以完全绕过控制器循环:

mail(:to => "admin@example.com",
    :bcc => User.where("users.country_id=?", 36).map(&:email),
    :subject => @subject,
    :body => @body)

谢谢你的评论!如何使用
@notification|u users.each do | user |
user.email
?非常感谢:)其他一切看起来都很好?您可能需要尝试传递
@users_电子邮件
。由于
@users\u emails
已经是一个数组,因此可能没有必要像传递单个电子邮件时那样将其包含在数组中,例如,
['first@email.com', 'second@email.com“]
。从理论上讲,人们也可以做
@user\u emails+=[user.email]
。@zeantsoi我在更新之前试过了。实际上,它只向
admin@example.com
:(@users\u电子邮件没有收到任何电子邮件