I struggled with this one a bit, so I figured I'd share it with those that may be in a similar place.  Okay, so here was the goal - obtain the directory listings of a folder (which contained folders named after recipients) and recursively find every file in the recipient folder.  Once a file(s) is found in the corresponding recipient folder, add the file(s) as an attachment to one email.  Pheww, that can take the breath out of a person.  If you have a better way of accomplishing this goal, then please share! :) 
#!/usr/bin/env ruby 
require 'pony' 
smtp_relay = "smtp_relay.somedomain.com" 
name_root = “~/my_mail_list_dir/”
attachment_hash = {}
Dir.entries(name_root).each do |name|
  # Replace message text with name
  msg_body = File.read("~/email_msg.txt").gsub("NAME_OF_PERSON", name) 
  # Recurse each name folder and find corresponding files to add as attachments 
  Dir["#{name_root}/#{name}/**"].each do |attachment|
    if File.file?(current_attachment) == true
      current_attachment_name = File.basename(current_attachment) 
      attachment_hash["#{current_attachment_name}"] = "#{File.binread(current_attachment)}"
    end
   end
   Pony.mail( 
    :to => "destination@domain.com",
    :from => "source@otherdestination.com", 
    :subject => "The Subject",
    :body => msg_body,
    :attachments => attachment_hash, 
    :via => :smtp,
    # It's important to note that you should use SMTPS (TCP port 465) 
    # whenever possible - I only had a inadequate SMTP (TCP port 25)
    # relay at my disposal at the time of this writing
    :via_options => {
      :address => smtp_relay,
      :port => 25,
      :enable_starttls_auto => false 
    }
  )
   # Reset attachments for new owner
  attachment_hash = {}
end
Hope it helps ya!  Cheers!
 
No comments:
Post a Comment