2013-05-28 78 views
4

我已經編寫了一個小腳本來發送帶有Ruby附件的電子郵件。只要有一個收件人,它就像一個魅力一樣,但是我需要發送郵件給收件人列表。收件人都存儲在一個YAML文件,該文件是由腳本讀取,然後電子郵件是在一個循環的幫助發送到每個收件人:如何使用Ruby Mail.rb發送電子郵件給多個收件人

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 

然而,這僅適用於第一個收件人,事後紅寶石拋出這個:

/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>' 

我真的不明白爲什麼會發生這種情況。所以我很想在這裏開悟!

+0

嘗試'pp mail ['mail_to']'並查看是否有任何無效(空白?)條目。 – davogones

+0

郵件['mail_to']不是問題。 mail ['mail_from']在循環的第二次運行中爲零。 – juwi

回答

2

我剛剛發現答案後意識到我從循環的第二次運行開始無零。看起來,Ruby試圖迭代「from」字段,就好像它是一個數組。所以我明確地爲它添加了一個變量,並且解決了它。

1

另一種可能在許多情況下工作的方法是在to字段中使用逗號分隔列表 - 例如。

mail = Mail.new do 
    from '[email protected]_domain.com' 
    to  '[email protected]_domain.com, [email protected]' 
    subject 'test' 
    body 'message' 
    end 

來源:https://github.com/mikel/mail/blob/master/lib/mail/elements/address_list.rb

的Mail :: AddressList中要求每個RFC2822或RFC822格式正確的組或郵箱列表 。它還處理那些 RFC中的所有過時版本。

相關問題