Rubyでメールの作成、送信、解析

rubygemのMailを使う。

インストール

RVMを使って、Ruby 1.9.3をインストールしている。

環境確認(特にgemsetに注意。gemsetごとにrubygemsライブラリがインストールされるので。)

% rvm use ruby-1.9.3-head
% ruby -v
ruby 1.9.3p5 (2011-11-30 revision 33907) [i686-linux]
% rvm gemset list
rvm gemset list
gemsets for ruby-1.9.3-head (found in /usr/local/rvm/gems/ruby-1.9.3-head)
   global
=> rails3
% rvm gemset use rails3

Twitter gemのインストール

% rvmsudo gem install mail
% gem list | grep mail
actionmailer (3.2.1, 3.1.3, 3.1.1)
mail (2.4.1, 2.3.0)

SMTPサーバーを使ってメール送信

25番ポートから認証なしでメールをうけつけてくれるSMTPサーバーが192.168.11.1 にある場合。日本語メールをUTFー8で送るならば以下のようにする。

# -*- coding: utf-8 -*-
require 'rubygems'
require 'mail'

 options = { 
    :address              => "192.168.11.1",
    :port                 => 25
  }

  Mail.defaults do
    delivery_method :smtp, options
  end

 mail = Mail.new do
      from  'hogehoge@hohoge.jp' 
      to    'noronoro@noronoro.jp'
    end
    mail.charset ='utf-8'
    mail.subject = '日本語タイトル' 
    mail.body  = '日本語本文'

    mail.deliver

JISで送る方法をためしたけど、どうしてもうまくいかなかった。

読む場合

~/Mailにメールが [0-9]* という形式のファイル名で格納されているとき、From欄を抜きだす。

require 'rubygems'
require 'mail'

begin
  if ARGV.length != 1
    puts "error: please input directory path\n"
    exit
  end

  path = ARGV[0]
  files = Dir.glob("#{path}/[0-9]*")

  
  files.each do |filename|
    mail= Mail.read(filename)
    puts "#{filename} #{mail.sender}"
  end
  
rescue => ex
  puts ex.message
end

使う。

% ruby tmp.rb ~/Mail

Ruby 1.9.3 + Twitter gem 2.1.0

Twitter APIを使って、ハッシュタグを取得する。の内容も古くなった。

インストール

RVMを使って、Ruby 1.9.3をインストールしている。

環境確認(特にgemsetに注意。gemsetごとにrubygemsライブラリがインストールされるので。)

% rvm use ruby-1.9.3-head
% ruby -v
ruby 1.9.3p5 (2011-11-30 revision 33907) [i686-linux]
% rvm gemset list
rvm gemset list
gemsets for ruby-1.9.3-head (found in /usr/local/rvm/gems/ruby-1.9.3-head)
   global
=> rails3
% rvm gemset use rails3

Twitter gemのインストール

% rvmsudo gem install twitter
% gem list | grep twitter
twitter (2.1.0)

使う(認証なし)

公開されているものをただとってくるだけなれば認証は不要。

ハッシュタグ #f_o_s の最新3件の発言をとってくる。

require 'rubygems'
require 'twitter'

Twitter.search("#f_o_s", :rpp => 3, :result_type => "recent").map do |status|
  puts "#{status.from_user}: #{status.text}"
end

実行する。

% ruby twitter.rb            
yokodon001: #f_o_s RT @enodon: 平成23年度第4次補正予算(科学技術関係予算)について 平成24年2月23日 内閣府 http://t.co/IYtiYGnY
yokodon001: @enodon #f_o_s これ読んで、そろそろ科学技術政策問題で活動さぼっていたのを再開しようと思ったなり。 RT [そこそこの科学者の叫び] http://t.co/BzlhNtVy
enodon: 平成23年度第4次補正予算(科学技術関係予算)について
平成2 4年2月2 3日
内 閣 府 http://t.co/htMAjUiJ #f_o_s

使う(認証あり)

Twitter APIで申請して、アプリケーション用アクセスキーを入手する。入手したものを使ってアクセス。