在rails3中制作简报的最佳方式是什么?

mon*_*ike 7 ruby-on-rails ruby-on-rails-3

有没有宝石可以做到这一点,如果没有,最好的方法是什么.我假设我将电子邮件存储在时事通讯数据库中,并且需要一个可以同时通过电子邮件发送给所有人的表单.谢谢!

Kru*_*ule 12

我所知道的没有宝石.

实际上,由于处理问题,最好的方法是通过提供商的API使用外部批量电子邮件服务提供商.

但是,构建自己的新闻稿系统与构建常规MVC没有什么不同.只有添加邮件和邮件的视图.

(1)因此,您创建处理注册数据的模型(:name,:email,:etc ...)和处理简报本身的模型.

(2)处理它的控制器(CRUD)+(:发送).发送接收每个收件人,将数据发送到邮件程序,然后发送它.

def send
 @newsletter = Newsletter.find(:params['id'])
 @recipients = Recipient.all
 @recipients.each do |recipient|
   Newsletter.newsletter_email(recipient, @newsletter).deliver
 end
end
Run Code Online (Sandbox Code Playgroud)

(3)Mailer构建一个电子邮件,如果你想做类似的事情,在每封电子邮件中做一些更改,并将其返回到控制器动作发送以进行传递.

class Newsletter < ActionMailer::Base
  default :from => "my_email@example.com", :content_type => "multipart/mixed"

  def newsletter_email(recipient, newsletter)
    # these are instance variables for newsletter view
    @newsletter = newsletter
    @recipient = recipient
    mail(:to => recipient.email, :subject => newsletter.subject)
  end
end
Run Code Online (Sandbox Code Playgroud)

(4)Ofc,您需要与常规视图一样的邮件视图.好的多部分有:

  • newsletter_email.html.erb(或haml)
  • newsletter_email.txt.erb

    当您要发送html和纯文本电子邮件时.实例变量在邮件程序中定义.

而且......就是这样.那么你可以使用延迟工作发送它们,因为发送超过几百封电子邮件可能需要一段时间.几个ms时间n可能是很多时间.

玩得开心.

  • 好吧,如果你发送电子邮件给你的系统的所有管理员,这是完全正常的.这会将所有收件人置于"收件人"字段中.对于时事通讯来说不是一个好主意,除非您愿意与全世界分享您的时事通讯订阅者的私人数据(电子邮件地址).:bcc而不是:如果你没有自定义电子邮件,可能会很好地工作. (2认同)