Class: DocomoWebMailer
- Inherits:
-
Object
- Object
- DocomoWebMailer
- Defined in:
- lib/docomo_web_mailer.rb,
lib/docomo_web_mailer/convert_mail.rb
Defined Under Namespace
Classes: AllMailHeaders, Builder, MailLabel, MailLabelList, MailListItem, Mailheaders, Maillist, Mailparts, Mailsummary, Mimepart, Mimepartspec, Parser, RHash, TArray
Constant Summary collapse
- MAX_SIZE =
メールボックスの最大値?
10000
Instance Method Summary collapse
-
#A(str) ⇒ Object
:nodoc:.
-
#append_client_flag(uid, flag = "flagged") ⇒ Object
uid で指定したメールにclient_flagをたてる。 uid は to_uid によって変換される.
-
#attachment(mimepart) ⇒ Object
そのパートの添付ファイルを得る。String型のバイナリデータ。 mimepart は Mimepart型.
- #convert_mail(header) ⇒ Object
-
#initialize ⇒ DocomoWebMailer
constructor
コンストラクタ.
-
#login(id, password) ⇒ Object
ログインする。失敗するとexception.
-
#mail_get_headers(maillistitem) ⇒ Object
uid で指定したメールのヘッダ(AllMailHeaders)を得る。 uid は to_uid によって変換される.
-
#mail_get_parts(uid) ⇒ Object
uid で指定したメールの全パート情報を得る。Mailpartsを返す。 uid は to_uid によって変換される.
-
#mail_label_list ⇒ Object
ラベル(フォルダ)の一覧 MailLabelList を得る。.
-
#mail_list_get(maillist, start, limit) ⇒ Object
Maillistの続きのメールを得る。uid順。startからlimit個。新しいMaillistを返す。.
-
#mail_list_start(maillabel, limit) ⇒ Object
MailLabel のメールを得る。uid順。limit個。Maillistを返す。 maillabel の値がSymbolならサーバフォルダ、文字列ならユーザフォルダ。.
-
#make_mail_to_smtp(uid) ⇒ Object
uid で指定したメールのSMTP送信用テキストを作る uid は to_uid によって変換される.
-
#rcp(method, params) ⇒ Object
rcp 1.0 にパラメータを投げる.
-
#remove_client_flag(uid, flag = "flagged") ⇒ Object
uid で指定したメールからclient_flagを外す。 uid は to_uid によって変換される.
-
#T(*array) ⇒ Object
:nodoc:.
-
#to_uid(maillistitem) ⇒ Object
maillistitem を uid にする。文字列なら数値化、数値以外ならuidプロパティーの値を返す.
Constructor Details
#initialize ⇒ DocomoWebMailer
コンストラクタ
29 30 31 32 33 |
# File 'lib/docomo_web_mailer.rb', line 29 def initialize() @agent = Mechanize.new @id = 0 @agent.user_agent_alias = 'Mac Safari' end |
Instance Method Details
#A(str) ⇒ Object
:nodoc:
119 120 121 |
# File 'lib/docomo_web_mailer.rb', line 119 def A(str) # :nodoc: {'$A'=>str.to_s} end |
#append_client_flag(uid, flag = "flagged") ⇒ Object
uid で指定したメールにclient_flagをたてる。 uid は to_uid によって変換される
104 105 106 |
# File 'lib/docomo_web_mailer.rb', line 104 def append_client_flag(uid,flag="flagged") rcp( "mail_label", [ [ T( A(:append), T( A(:client_flag), A(flag) ), null, [ to_uid(uid) ] ) ], 10000 ] ) end |
#attachment(mimepart) ⇒ Object
そのパートの添付ファイルを得る。String型のバイナリデータ。 mimepart は Mimepart型
79 80 81 82 83 |
# File 'lib/docomo_web_mailer.rb', line 79 def (mimepart) url = "/pc/attachment.php?url=#{u(mimepart.attache_info)}" url += "&df=#{u(mimepart.filename.to_s)}" if mimepart.filename @agent.get_file(url) end |
#convert_mail(header) ⇒ Object
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/docomo_web_mailer/convert_mail.rb', line 2 def convert_mail(header) text = headers.to_s text += "\n\n" if parts.parts.size == 1 data = mail_get_attache( parts.parts[0] ) text +="#{data}" else h = nil raise "unknown type header #{text}" unless headers.find{|k,v| k == "content-type" and v =~ /boundary=(.*)$/} boundary = $1.dup.strip.gsub(/^"(.*)"$/,'\1').gsub(/^'(.*)'$/,'\1') for part in parts.parts body = mail_get_attache( part ) header = [] header << "--#{boundary}" content_type = part.content_type if part.inline_head and part.inline_head.find{|n,v| n == 'content-type'} content_type = part.inline_head.find{|n,v| n == 'content-type'}[1] end puts "content_type=#{content_type}" header << "Content-Type: #{content_type}" is_text = content_type =~ /^text\// if is_text header << "Content-Transfer-Encoding: 8bit" else header << "Content-Transfer-Encoding: base64" end header << "Content-ID: #{part.contentid}" if part.contentid if part.disposition if part.filename header << "Content-Disposition: #{part.disposition}; filename=#{part.filename}" else header << "Content-Disposition: #{part.disposition}" end end header << "" if is_text header << body else header << Base64.encode64(body) end header << "" text += header.join("\n") end text +="--#{boundary}--\n" end text end |
#login(id, password) ⇒ Object
ログインする。失敗するとexception
35 36 37 38 39 40 41 42 43 |
# File 'lib/docomo_web_mailer.rb', line 35 def login(id,password) page = @agent.get("http://dwmail.jp/") form = page.form_with(:name => "f1") raise "login error: cant find login form" unless form form.field_with(:name => "uname").value = id form.field_with(:name => "pass").value = password res = @agent.submit(form) raise "login error (id/pass illegal) " if res.form_with(:name => "f1") end |
#mail_get_headers(maillistitem) ⇒ Object
uid で指定したメールのヘッダ(AllMailHeaders)を得る。 uid は to_uid によって変換される
94 95 96 |
# File 'lib/docomo_web_mailer.rb', line 94 def mail_get_headers(maillistitem) AllMailHeaders.new *rcp( "mail_get_headers", [ to_uid(maillistitem), A(:infinity) ] ) end |
#mail_get_parts(uid) ⇒ Object
uid で指定したメールの全パート情報を得る。Mailpartsを返す。 uid は to_uid によって変換される
74 75 76 |
# File 'lib/docomo_web_mailer.rb', line 74 def mail_get_parts(uid) Mailparts.new *rcp("mail_get_parts", [ to_uid(uid), [ T( A(:bodypref), [ "*/*" ] ), T( A(:bodyparse), A(:off) ) ], MAX_SIZE ]) end |
#mail_label_list ⇒ Object
ラベル(フォルダ)の一覧 MailLabelList を得る。
85 86 87 88 89 90 91 |
# File 'lib/docomo_web_mailer.rb', line 85 def mail_label_list MailLabelList.new( *rcp( "mail_label", [ [ T( A(:list), [ A(:server_folder) ], A(:ascending) ), T( A(:list), [ A(:user_folder) ], A(:ascending) ), T( A(:list), [ A(:user_flag) ], A(:ascending) ) ], 10000 ] ) ) end |
#mail_list_get(maillist, start, limit) ⇒ Object
Maillistの続きのメールを得る。uid順。startからlimit個。新しいMaillistを返す。
69 70 71 |
# File 'lib/docomo_web_mailer.rb', line 69 def mail_list_get(maillist, start,limit ) Maillist.new( *rcp( "mail_list_get", [ maillist.sign, T( T( A(:plain), A(:uid) ), A(:descending), start, limit ), MAX_SIZE ] ) ) end |
#mail_list_start(maillabel, limit) ⇒ Object
MailLabel のメールを得る。uid順。limit個。Maillistを返す。 maillabel の値がSymbolならサーバフォルダ、文字列ならユーザフォルダ。
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/docomo_web_mailer.rb', line 46 def mail_list_start(maillabel,limit) place = [ A(:server_folder), A(maillabel) ] if maillabel.is_a? MailLabel place = [ A(maillabel.place), A(maillabel.index) ] elsif maillabel.is_a? String place[0]['$A']="user_folder" end Maillist.new( *rcp("mail_list_start",[ 1, T( nil, T( # 得たいフォルダの場所 [ T(*place) ], # 不明 [ ], # 不明 [ T( A(:client_flag), A(:recent) ) ], # 得たい付加情報? [ A(:server_flag), A(:client_flag), A(:server_folder), A(:user_folder), A(:user_flag) ] ) ), # 並び順と数? T( T( A(:plain), A(:uid) ), A(:descending), nil, limit ), # 不明 nil, MAX_SIZE, MAX_SIZE ]) ) end |
#make_mail_to_smtp(uid) ⇒ Object
uid で指定したメールのSMTP送信用テキストを作る uid は to_uid によって変換される
99 100 101 |
# File 'lib/docomo_web_mailer.rb', line 99 def make_mail_to_smtp(uid) Builder.new(self).build( uid ) end |
#rcp(method, params) ⇒ Object
rcp 1.0 にパラメータを投げる
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/docomo_web_mailer.rb', line 173 def rcp( method,params ) @id += 1 result = Parser.rcp_to_ruby(JSON.parse(@agent.post("http://pc.dwmail.jp/api/base/rpc/1.0", { :id => @id.to_s, :method => method.to_s, :params => params, :version=>"1.1" }.to_json ).body)) unless result["error"] return result["result"] else require 'pp' pp result['error'] pp params raise "error ! #{result['error']}" end end |
#remove_client_flag(uid, flag = "flagged") ⇒ Object
uid で指定したメールからclient_flagを外す。 uid は to_uid によって変換される
109 110 111 |
# File 'lib/docomo_web_mailer.rb', line 109 def remove_client_flag(uid,flag="flagged") rcp( "mail_label", [ [ T( A(:remove), T( A(:client_flag), A(flag) ), null, [ to_uid(uid) ] ) ], 10000 ] ) end |
#T(*array) ⇒ Object
:nodoc:
122 123 124 |
# File 'lib/docomo_web_mailer.rb', line 122 def T(*array) # :nodoc: {'$T'=>array} end |
#to_uid(maillistitem) ⇒ Object
maillistitem を uid にする。文字列なら数値化、数値以外ならuidプロパティーの値を返す
113 114 115 116 117 |
# File 'lib/docomo_web_mailer.rb', line 113 def to_uid( maillistitem ) maillistitem = maillistitem.to_i if maillistitem.is_a? String maillistitem = maillistitem.uid unless maillistitem.is_a? Numeric maillistitem end |