グーグル携帯 HT-03A を買ったので、iモードのメールを自動転送 (追記あり)

買ってしまった。
文字入力のスピードがまだまだ上がらないけど、概ね満足している。


目下の難点が、Gmail から 友人の携帯へ送るメールが、迷惑メール対策で撥ねられてしまう点だろう。
アドレス変わりましたメールを送って、撥ねられた相手には iモードから送り直したが、安心は出来ない。
iモード契約を残して(315円/月)、imode.net も契約したので(210円/月)、読み書きは出来るのだが(スマートフォン向けページを使えば Firefox からも利用可能)、いちいちアクセスするのは面倒だ。
自動転送機能くらい付けてください>DoCoMo


そこで、自前で自動転送することにした。
以下のスクリプトを cron で実行する。
Cookie を取得しながら URL 転送を繰り返す。ああ面倒くさい。Mechanize とか使うといいのかな。
最後は、iモード.net の転送機能は使わず、メール本文のページを HTML のまま送信している。
メール送信周りはさくら仕様。


(7/24追記)
imode.net だが、ログイン通知メールとかいうのが毎回飛ぶ。
それが imode.net には表示されないので、消せない。
実機で受信しないといけない。普通のメールも含めて、imode.net はメールサーバ上にあるんじゃなくてただのクライアントであり、ケータイで受信して初めてサーバから消える。
そしてメールが溜まるとログインできなくなる。
このスクリプトが起動する度にログイン通知メールが蓄積されるので、頻繁にチェックしていると使い物にならない。


ログインをキープする 新着i の使用を推奨します。

#!/usr/local/bin/ruby

require 'cgi'
require 'net/https'
require 'nkf'
require 'net/smtp'

docomoid="xxxxxxxx"
docomopass="xxxxxxxx"
forwarding_address="xxxxxxxx@gmail.com"

def send_mail(mailto,mailbody)

  mailserver="xxxx.sakura.ne.jp"
  maildomain="xxxx.sakura.ne.jp"
  mailid="xxxx@xxxx.sakura.ne.jp"
  mailpass="xxxxxxxx"
  mailfrom="xxxx@xxxx.sakura.ne.jp"

  Net::SMTP.start( mailserver, 25, maildomain, mailid, mailpass, :login ) {|smtp|
    smtp.send_mail <<EOM, mailfrom, mailto
From: #{mailfrom}
To: #{mailto}
Subject: Forwarding from imode
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: Quoted-printable

#{mailbody}
EOM

  }

end


response=""
https = Net::HTTP.new('imode.net', 443)
https.use_ssl = true
#https.ca_file = 'base64.cer'
#https.verify_mode = OpenSSL::SSL::VERIFY_PEER
#https.verify_depth = 5
https.start {

  param="HIDEURL="+CGI.escape("?WM_AK=https%3a%2f%2fimode.net%2fag&path=%2fimail%2fm%2fsmarttopimobile&query=")
  param << "&LOGIN=WM_LOGIN"
  param << "&WM_KEY=0"
  param << "&MDCM_UID="+docomoid
  param << "&MDCM_PWD="+docomopass

  response=https.post( "/dcm/dfw", param )
}

cookie=response['Set-Cookie'].split(',').join(';')
/WM_IW_INFO_PA=([^;]+);/=~response['Set-Cookie']
wm_iw_info_pa=$1
#p wm_iw_info_pa
loc=response['Location'].gsub(/^https:\/\/imode\.net/,'')

https.start{
  response=https.get( loc, "Cookie"=>cookie) #ag
}

cookie=response['Set-Cookie'].split(',').join(';')
/WM_IW_INFO=([^;]+);/=~response['Set-Cookie']
wm_iw_info=$1
#p wm_iw_info
loc=response['Location'].gsub(/^https:\/\/imode\.net/,'')

https.start{
  response=https.get( loc, "Cookie"=>cookie) #smarttopimobile
}

loc=response['Location'].gsub(/^https:\/\/imode\.net/,'')

https.start{
  response=https.get( loc, "Cookie"=>cookie) #smart
}

cookie=response['Set-Cookie'].split(',').join(';')
/pwsp=([^;]+);/=~response['Set-Cookie']
pwsp=$1
#p pwsp
loc=response['Location'].gsub(/^https:\/\/imode\.net/,'')

https.start{
  response=https.get( loc, "Cookie"=>"pwsp="+pwsp+"; WM_IW_INFO="+wm_iw_info+"; WM_IW_INFO_PA="+wm_iw_info_pa) #smart?func
}

response.body.split("\n").each{|line|
  if /<td><span class="unread"><a href="\.\/([^"]+)">[^<]*<\/a><\/span><\/td>/=~line
    loc=$1.gsub('&amp;','&')
    https.start{
      response=https.get( "/imail/m/imobile/acgi/"+loc, "Cookie"=>"pwsp="+pwsp+"; WM_IW_INFO="+wm_iw_info+"; WM_IW_INFO_PA="+wm_iw_info_pa) 
    }

    send_mail(forwarding_address, response.body)
  end
}