Tuesday, December 20, 2011

Ruby: Forward new email using IMAP and SMTP

Ever wondered how to forward email in Ruby?


#!/usr/bin/env ruby
require 'net/imap'
require 'net/smtp'


# Author: Sergei Velhas, sergei@velhas.net


FORWARD_TO = ["users@example.com","mail2@example.com"]
MAILBOX_LOGIN = "user"
MAILBOX_PASSWORD = "password"
FROM = 'user@example.com'
MAILSERVER = 'mbox.example.com'


imap = Net::IMAP.new(MAILSERVER)
  imap.authenticate('LOGIN', MAILBOX_LOGIN, MAILBOX_PASSWORD)
  imap.examine('INBOX')


  imap.search(["UNSEEN"]).each do |message_id|
    envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]


    # Adjust the if clause to suit the needed automation level
    if envelope.from[0].name =~ /John Doe/ then
      puts "\n\n Going to forward the message from #{envelope.from[0].name}: \t#{envelope.subject} \n\n"


      email = <<END_OF_MESSAGE
Subject: #{envelope.subject}


#{imap.fetch(message_id, "BODY[TEXT]")[0].attr["BODY[TEXT]"]}
END_OF_MESSAGE


      Net::SMTP.start('mboxld.ericpol.int') do |smtp|
        smtp.sendmail(email, FROM,FORWARD_TO)
      end


      imap.store(message_id, "+FLAGS", [:Seen])
    end
  end

0 коммент.:

Post a Comment