首页 > 解决方案 > 电子邮件属性的未定义方法

问题描述

我正在尝试一次向多个收件人发送一堆单独的电子邮件。我打算这样做是用户将下载一个 Excel 电子表格并用一堆姓名和相应的电子邮件填写它,然后将该电子表格上传到应用程序。该应用程序创建填写了字段的客人名单对象,我想向客人名单中的每个人发送一封电子邮件。

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

更新

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

邮件程序代码:

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)

提前致谢

标签: rubyemailruby-on-rails-5actionmailer

解决方案


如果您将电子表格导入功能与电子邮件功能分开,它可能更具可读性。所以首先导入整个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


推荐阅读