Class: DocomoWebMailer::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/docomo_web_mailer.rb

Overview

SMTPサーバに送信するためのメールテキストを作成する。 他のメールソフト・メールライブラリで扱うための中間形式としても。

Instance Method Summary collapse

Constructor Details

#initialize(mailer) ⇒ Builder

Returns a new instance of Builder.



130
131
132
# File 'lib/docomo_web_mailer.rb', line 130

def initialize(mailer)
  @mailer = mailer
end

Instance Method Details

#build(uid) ⇒ Object

uid からメールテキストを作成する 引数 uid には to_uid が適用される。



135
136
137
# File 'lib/docomo_web_mailer.rb', line 135

def build(uid)
  build_from @mailer.mail_get_headers(uid), @mailer.mail_get_parts(uid) 
end

#build_from(headers, parts) ⇒ Object

header と parts からメールテキストを作成する



139
140
141
# File 'lib/docomo_web_mailer.rb', line 139

def build_from(headers,parts)
  headers.multipart? ? make_mail_to_smtp_multipart( headers, parts ) : make_mail_to_smtp_singlepart( headers, parts.parts[0] )
end

#make_mail_to_smtp_multipart(headers, parts) ⇒ Object

AllMailHeaders と Mailparts からメールのSMTP送信用テキストを作る(マルチパート)



148
149
150
151
152
153
154
155
156
# File 'lib/docomo_web_mailer.rb', line 148

def make_mail_to_smtp_multipart(headers,parts)
  raise "unknown type header #{text}" unless headers.content_type =~ /boundary=(.*)$/
  boundary = $1.dup.strip.gsub(/^"(.*)"$/,'\1').gsub(/^'(.*)'$/,'\1')
  
  headers.to_s +
  "\n\n--#{boundary}\n" +
  parts.parts.map{|part| part_to_mail(part).join("\n")}.join("\n--#{boundary}\n") +
  "\n--#{boundary}--\n"
end

#make_mail_to_smtp_singlepart(headers, part) ⇒ Object

AllMailHeaders と Mimepart からメールのSMTP送信用テキストを作る(シングル)



144
145
146
# File 'lib/docomo_web_mailer.rb', line 144

def make_mail_to_smtp_singlepart(headers,part)
  headers.to_s + "\n\n" + @mailer.attachment( part )
end

#part_to_mail(part) ⇒ Object

Mimepart をsmtp bodyに



158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/docomo_web_mailer.rb', line 158

def part_to_mail(part)
  body = @mailer.attachment( part )
  content_type = part.content_type
  is_text = content_type =~ /^text\//
  mail = []
  mail << "Content-Type: #{content_type}"
  mail << "Content-Transfer-Encoding: #{is_text ? '8bit' : 'base64' }"
  mail << "Content-ID: #{part.contentid}" if part.contentid
  mail << "Content-Disposition: #{part.disposition_with_filename}" if part.disposition
  mail << ""
  mail << ( is_text ? body : Base64.encode64(body) )
  mail
end