我正在尝试实现一项允许用户向多个收件人发送一封电子邮件的功能。我通过调用recipient email
方法拆分.split
参数,将其转换为数组。然后我使用每个方法遍历数组,该方法应该将mail方法应用于数组中的每个元素。控制器和邮件程序代码如下。
控制器代码
def create
@scoreboard = Scoreboard.find(params[:scoreboard_id])
@invitation = @scoreboard.sent_invitations.build(invitation_params)
if @invitation.save
UserMailer.registered_invitation_email(@scoreboard, @invitation).deliver_now
flash[:success] = "Invitation sent successfully"
redirect_to new_scoreboard_invitation_path
else
render 'new'
end
end
end
邮件代码
def registered_invitation_email(scoreboard, invitation)
@scoreboard = scoreboard
@invitation = invitation
split_email = @invitation.recipient_email.split
split_email.each do |email|
mail(to: email, subject: "View scoreboard")
end
end
问题是它只将电子邮件发送到数组中的最后一个元素。例如,如果用户在表单中键入"joe@example.com Mike@example.com"
,则它只会向数组中的最后一个元素发送电子邮件。在这种情况下,Mike@exapmle.com
。我不知道为什么会这样。我想我正在循环它。我不确定是什么导致了这个问题。我不确定它的循环或循环是否在活动邮件程序中不起作用。不完全确定。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:0)
尝试这样的事情
使用字段
创建模型field :mail_to
field :subject
在同一模型中创建一个方法
def deliver
UserMailer.send_invitation_mail(self).deliver
end
邮件程序
def send_invitation_mail(email)
mail(to: email.mail_to, subject: email.subject)
email.destroy
end
控制器
def create
user_emails.each do |email|
email = Email.new(:mail_to => "xxx@yyy.com",:subject => "View Scoreboard") # Email is the model name.
email.deliver
sleep(1)
end
end
这样你也可以在模型中记录并传送所有邮件,并对电子邮件进行各种操作。