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: (e-mail address removed) (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
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" =>
"(e-mail address removed)", "from" => "(e-mail address removed)"))
p(EMail("to" => "(e-mail address removed)", "from" =>
"(e-mail address removed)"){ "test 2 @ #{ Time::now }" })
p(EMail("to" => "(e-mail address removed)"){ "test 3 @ #
{ Time::now }" })
end
a @
http://codeforpeople.com/