如何使用Ruby Mail.rb向多个收件人发送电子邮件

时间:2013-05-28 08:56:18

标签: ruby email

我写了一个小脚本来发送带有Ruby附件的电子邮件。只要有一个收件人,它就像魅力一样,但我需要将邮件发送给收件人列表。收件人存储在yaml文件中,该文件由脚本读取,然后在循环的帮助下将电子邮件发送给每个收件人:

Mail.defaults do
delivery_method :smtp, options
end

mail['mail_to'].each do |i|
    mail = Mail.new do 
        to i
        from mail['mail_from']
        subject mail_subject
        body mail_body
        add_file    :filename => 'Report.pdf', :content => File.read(global['filename_pdf'])
end
    mail.deliver!
end

然而,这只适用于第一个收件人,之后ruby会抛出这个:

/home/juwi/.gem/ruby/1.9.1/gems/mail-2.5.4/lib/mail/check_delivery_params.rb:5:in `check_delivery_params': An SMTP From address is required to send a message. Set the message smtp_envelope_from, return_path, sender, or from address. (ArgumentError)
from /home/juwi/.gem/ruby/1.9.1/gems/mail-2.5.4/lib/mail/network/delivery_methods/smtp.rb:98:in `deliver!'
from /home/juwi/.gem/ruby/1.9.1/gems/mail-2.5.4/lib/mail/message.rb:248:in `deliver!'
from main.rb:47:in `block in <main>'
from main.rb:33:in `each'
from main.rb:33:in `<main>'

我真的不明白为什么会这样。所以我很想在这里开悟!

2 个答案:

答案 0 :(得分:2)

我意识到从循环的第二次运行开始就没有结果,我才找到答案。看起来,Ruby试图迭代&#34;来自&#34;字段好像是一个数组。所以我明确地为它添加了一个变量,并解决了它。

答案 1 :(得分:1)

在许多情况下可能有效的另一种方法是在to字段中使用以逗号分隔的列表 - 例如。

  mail = Mail.new do
    from    'me@my_domain.com'
    to      'me@my_domain.com, him@elsewhere.com'
    subject 'test'
    body    'message'
  end

来自:https://github.com/mikel/mail/blob/master/lib/mail/elements/address_list.rb

  

Mail :: AddressList需要格式正确的组或邮箱列表   根据RFC2822或RFC822。它还处理这些中的所有过时版本   的RFC。