simple mail with Ruby

P

Peter Bailey

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
 
A

ara.t.howard

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

Peter Bailey

Wow! I need to look closely at this. This looks incredibly complicated
to me. How come you literally had to go in and create your own class?
Isn't there anything already available?

I'll dive in. Thanks a lot,
Peter
 
A

ara.t.howard

Wow! I need to look closely at this. This looks incredibly complicated
to me. How come you literally had to go in and create your own class?
Isn't there anything already available?

I'll dive in. Thanks a lot,
Peter

sure.

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 }

you'll need to encode you attachments by hand though. the class i
posted is just a wrapper on doing the above by hand each time.
mailfactory is really nice for building the actual email body too.
as far as built in is concerned though - net/smtp is as high level as
it gets.

regards.

a @ http://drawohara.com/
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,773
Messages
2,569,594
Members
45,120
Latest member
ShelaWalli
Top