电子邮件属性的未定义方法



我正在尝试一次向多个收件人发送一堆单独的电子邮件。我是如何做到这一点的,用户将下载一个 excel 电子表格并填写一堆名称和相应的电子邮件,然后将该电子表格上传到应用程序。该应用程序创建填充了字段的来宾列表对象,我想向来宾列表中的每个人发送电子邮件。

客人名单的导入正在工作,但是我似乎无法让我的邮件发送电子邮件。

更新

邮件程序现在发送的电子邮件数量与来宾列表中的人数相同,但所有电子邮件都发送到其中一个电子邮件地址。

邮件代码:

def guestlist_email()
Guestlist.all.each { |guestlist| mail(to: guestlist.email) }
end

控制器的代码:

def import
Guestlist.import(params[:file])
Guestlist.all.each do |guestlist|
GuestMailer.with(guestlist: @guestlist).guestlist_email.deliver_now
end
redirect_to guestlists_url, notice: "Guest-list Successfully 
Imported."
end

如果您需要更多代码,我将上传。

这是来自终端的日志。

(0.2ms)  begin transaction
↳ app/models/guestlist.rb:20
Guestlist Create (3.5ms)  INSERT INTO "guestlists" ("id", "name", "email", "response", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?)  [["id", 3], ["name", "Ryan Neill"], ["email", "ryan.neill11@gmail.com"], ["response", "no"], ["created_at", "2019-10-01 14:43:31.133312"], ["updated_at", "2019-10-01 14:43:31.133312"]]
↳ app/models/guestlist.rb:20
(3.1ms)  commit transaction
↳ app/models/guestlist.rb:20
Guestlist Load (0.3ms)  SELECT  "guestlists".* FROM "guestlists" WHERE "guestlists"."id" = ? LIMIT ?  [["id", 2], ["LIMIT", 1]]
↳ app/models/guestlist.rb:18
(0.1ms)  begin transaction
↳ app/models/guestlist.rb:20
Guestlist Create (1.1ms)  INSERT INTO "guestlists" ("id", "name", "email", "response", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?)  [["id", 2], ["name", "robiin"], ["email", "robinbrink43@gmail.com"], ["response", "yes"], ["created_at", "2019-10-01 14:43:31.147201"], ["updated_at", "2019-10-01 14:43:31.147201"]]
↳ app/models/guestlist.rb:20
(3.6ms)  commit transaction
↳ app/models/guestlist.rb:20
Guestlist Load (0.3ms)  SELECT  "guestlists".* FROM "guestlists" WHERE "guestlists"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
↳ app/models/guestlist.rb:18
(0.1ms)  begin transaction
↳ app/models/guestlist.rb:20
Guestlist Create (0.8ms)  INSERT INTO "guestlists" ("id", "name", "email", "response", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?)  [["id", 1], ["name", "ryan"], ["email", "ryan.neill11@gmail.com"], ["response", ""], ["created_at", "2019-10-01 14:43:31.159332"], ["updated_at", "2019-10-01 14:43:31.159332"]]
↳ app/models/guestlist.rb:20
(3.8ms)  commit transaction
↳ app/models/guestlist.rb:20
Redirected to http://localhost:3000/guestlists
Guestlist Load (0.6ms)  SELECT  "guestlists".* FROM "guestlists" ORDER BY "guestlists"."id" ASC LIMIT ?  [["LIMIT", 1]]
↳ app/mailers/guest_mailer.rb:11
Rendering guest_mailer/guestlist_email.html.erb within layouts/mailer
Rendered guest_mailer/guestlist_email.html.erb within layouts/mailer (1.0ms)
Guestlist Load (0.5ms)  SELECT  "guestlists".* FROM "guestlists" ORDER BY "guestlists"."id" ASC LIMIT ? OFFSET ?  [["LIMIT", 1], ["OFFSET", 1]]
↳ app/mailers/guest_mailer.rb:12
Rendering guest_mailer/guestlist_email.html.erb within layouts/mailer
Rendered guest_mailer/guestlist_email.html.erb within layouts/mailer (1.1ms)
Guestlist Load (0.8ms)  SELECT  "guestlists".* FROM "guestlists" ORDER BY "guestlists"."id" ASC LIMIT ? OFFSET ?  [["LIMIT", 1], ["OFFSET", 2]]
↳ app/mailers/guest_mailer.rb:13
Rendering guest_mailer/guestlist_email.html.erb within layouts/mailer
Rendered guest_mailer/guestlist_email.html.erb within layouts/mailer (0.1ms)
GuestMailer#guestlist_email: processed outbound mail in 108.8ms
Sent mail to ryan.neill11@gmail.com (3768.3ms)
Date: Tue, 01 Oct 2019 16:43:31 +0200
From: rsvpeasy01@gmail.com
To: ryan.neill11@gmail.com
Message-ID: <5d9366134463d_7c6d3fdbf4e367045421e@Ryans-MacBook-Air.local.mail>
Subject: Guestlist email
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
/* Email styles need to be inline */
</style>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
/* Email styles need to be inline */
</style>
</head>
<body>
</body>
</html>
</body>
</html>
Completed 302 Found in 3969ms (ActiveRecord: 20.3ms)

提前致谢

尝试以下操作:

def guestlist_email()
Guestlist.all.each { |guestlist| mail(to: guestlist.email) }
end

如果上面的代码只是向第一个来宾列表发送电子邮件,则强烈建议其他电子邮件是错误的。下面的代码与上面的代码相同,但显式执行每封电子邮件:

def guestlist_email()
mail(to: Guestlist.first.email )
mail(to: Guestlist.second.email )
mail(to: Guestlist.third.email )
end

如果其中一个有效而其他无效,那么问题一定出在您为第二个和第三个来宾列表存储的来宾列表电子邮件上

第二次编辑:

尝试将导入方法更改为:

def import
Guestlist.import(params[:file])
Guestlist.all.each do |guestlist|
GuestMailer.with(guestlist: @guestlist, event: @event).guestlist_email.deliver_now
end
redirect_to guestlists_url, notice: "Guestlists imported."
end

如果将电子表格导入功能与电子邮件功能分开,则可能更具可读性。 因此,首先导入整个Excel工作表。 然后循环访问表中的数据,一次发送一封邮件。

您的循环应该是这样的:

class SendWeeklySummary
def run
User.find_each do |user|
UserMailer.with(user: user).weekly_summary.deliver_now
end
end
end

https://guides.rubyonrails.org/action_mailer_basics.html

最新更新