On Jan 15, 2008, at 12:54 PM, Peter Bailey wrote:

> Hi,
> I just want Ruby to enable me to send simple e-mails, sometimes  
> with an
> attachment, if possible. Here's all I want:
>
> To:        pbailey / bna.com    (that's me, as a test)
> From:      my account, whatever
> Message:   Some test text. More test text. And so on.
> Attach:    c:\simplestuff.pdf
>
> The e-mail server here at my company is Lotus Notes. I've used it for
> years as an SMTP server.
>
> Thanks,
> Peter
> -- 
> Posted via http://www.ruby-forum.com/.
>


require "net/smtp"

class Email
   class Error < ::StandardError; end
   USER = ENV["USER"] || ENV["USERNAME"] || ENV["LOGNAME"]

   attr_accessor "user"
   attr_accessor "from"
   attr_accessor "to"
   attr_accessor "subject"
   attr_accessor "message"
   attr_accessor "sent"
   alias_method "sent?", "sent"

   def initialize *a, &b
     options, messages = a.partition{|x| Hash === x}
     opts = options.inject({}){|h,o| h.update o}
     @user = opts["user"] || opts[:user] || USER
     @to = opts["to"] || opts[:to] || "#{ @user }@localhost.localdomain"
     @from = opts["from"] || opts[:from] || "#{ @user } 
@localhost.localdomain"
     @subject = opts["subject"] || opts[:subject] || "[RUBY EMAIL]"
     @sent = false
     @message =
       if messages.empty?
         opts["message"] || opts[:message]
       else
         messages.join
       end
     @message = b.call(self) if b
     email if @message
   end

   def email
     raise Error, "already sent!" if @sent
     msg = "To: %s\nFrom: %s\nSubject: %s\n\n%s" % [@to, @from,  
@subject, @message]
     Net::SMTP.start("localhost"){|smtp| smtp.send_message msg, @to,  
@from }
     @sent = true
     self
   end
   alias_method "email!", "email"
end

EMail = Email

def EMail *a, &b
   EMail::new *a, &b
end
def Email *a, &b
   Email::new *a, &b
end
def email *a, &b
   Email::new *a, &b
end

if $0 == __FILE__
   p(EMail("test 1 @ #{ Time::now }", "to" =>  
"ara.t.howard / noaa.gov", "from" => "ara.t.howard / noaa.gov"))
   p(EMail("to" => "ara.t.howard / noaa.gov", "from" =>  
"ara.t.howard / noaa.gov"){ "test 2 @ #{ Time::now }" })
   p(EMail("to" => "ara.t.howard / noaa.gov"){ "test 3 @ # 
{ Time::now }" })
end


a @ http://codeforpeople.com/
--
it is not enough to be compassionate.  you must act.
h.h. the 14th dalai lama