email checker snippets

Gmail checker plugin for wmii.

Tagged wmii, gmail, google mail, email checker  Languages ruby

I take no credit for this. The original URL is The reason it is here is that I don't want to lose it just in case the original site is taken down.

# gmail check plug in
# by Derek Young
# periodically read gmail's atom feed for new messages.
# if one is found, display the username and subject of
# the message.
# The applet wakes up after a configurable period to check (by default
# 3 minutes).  You can also cause it to check immediately by pressing
# the key binding for the gmail-check binding (MODKEY-g by default).
# place this file in ~/.wmii-3/plugins and
# add the following to your wmiirc-config.rb file to enable:
#  plugin_config["[email protected]:gmail"]["username"] = 'my user name'
#  plugin_config["[email protected]:gmail"]["password"] = 'my password'
#  plugin_config["[email protected]:gmail"]["interval"] = 3
#  use_bar_applet "[email protected]:gmail", 50
#  use_binding "[email protected]:gmail-check"
# atom parsing based on code from Evan Martin
# Copyright Derek Young, 2007
# Use as you wish but please give credit.

Plugin.define "[email protected]" do
  author '"Derek Young" <[email protected]>'

  def_settings "gmail/interval" do |wmii|
    wmii.plugin_config["[email protected]:gmail"]["interval"] = 3 * 60

  CERTPATH = '/etc/ssl/certs'

  # return title, email, author name of first new message
  def gmail_check(username, password)
    req = '/mail/feed/atom'
    req.basic_auth(username, password)

    http ='', 443)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER
    http.ca_path = CERTPATH

    res = http.request req

    doc = res.body
    entries = doc.root.get_elements('/feed/entry')
    return nil if entries.length == 0
    title = entries[0].elements['title'].text
    email = entries[0].elements['author/email'].text
    name = entries[0].elements['author/name'].text
    [ title, email, name ]

  bar_applet("gmail", 100) do |wmii, bar|
    require 'net/https'
    require 'rexml/document'

    interval = wmii.plugin_config["[email protected]:gmail"]["interval"]
    username = wmii.plugin_config["[email protected]:gmail"]["username"]
    password = wmii.plugin_config["[email protected]:gmail"]["password"]

    @gmail_check_thread = do
      loop do = "checking..."
        first = gmail_check(username, password)
        if first
          title, email, name = first
          user, domain = email.split('@')
 = "#{user}:#{title}"
 = 'no mail'
        sleep (interval * 60)

  binding("gmail-check", "MODKEY-g") do |wmii,| "gmail check requested" if @gmail_check_thread