facade.rb
| NOSEND_FIELDS | = | %w( received bcc ) | ||
| ALLOW_MULTIPLE | = | { 'received' => true, 'resent-date' => true, 'resent-from' => true, 'resent-sender' => true, 'resent-to' => true, 'resent-cc' => true, 'resent-bcc' => true, 'resent-message-id' => true, 'comments' => true, 'keywords' => true | header | |
| USE_ARRAY | = | ALLOW_MULTIPLE | ||
| FIELD_ORDER | = | %w( return-path received resent-date resent-from resent-sender resent-to resent-cc resent-bcc resent-message-id date from sender reply-to to cc bcc message-id in-reply-to references subject comments keywords mime-version content-type content-transfer-encoding content-disposition content-description ) |
| key? | -> | include? |
| key? | -> | has_key? |
| from_addrs= | -> | from_address= |
| message_id | -> | msgid |
| message_id= | -> | msgid= |
| each_destination | -> | each_dest |
| load | -> | load_from |
| load | -> | loadfrom |
| port | [R] |
# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 127 def Mail.boundary ::TMail.new_boundary end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 46 def load( fname ) new(FilePort.new(fname)) end
# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 131 def Mail.msgid ::TMail.new_message_id end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 58 def initialize( port = nil, conf = DEFAULT_CONFIG ) @port = port || StringPort.new @config = Config.to_config(conf) @header = {} @body_port = nil @body_parsed = false @epilogue = '' @parts = [] @port.ropen {|f| parse_header f parse_body f unless @port.reproducible? } end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 53 def parse( str ) new(StringPort.new(str)) end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 163 def []( key ) @header[key.downcase] end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 173 def []=( key, val ) dkey = key.downcase if val.nil? @header.delete dkey return nil end case val when String header = new_hf(key, val) when HeaderField ; when Array ALLOW_MULTIPLE.include? dkey or raise ArgumentError, "#{key}: Header must not be multiple" @header[dkey] = val return val else header = new_hf(key, val.to_s) end if ALLOW_MULTIPLE.include? dkey (@header[dkey] ||= []).push header else @header[dkey] = header end val end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 93 def accept( strategy ) with_multipart_encoding(strategy) { ordered_each do |name, field| next if field.empty? strategy.header_name canonical(name) field.accept strategy strategy.puts end strategy.puts body_port().ropen {|r| strategy.write r.read } } end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 86 def add_date self.date = Time.now end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 82 def add_message_id( fqdn = nil ) self.message_id = ::TMail::new_message_id(fqdn) end
# File actionmailer/lib/action_mailer/vendor/tmail/attachments.rb, line 13 def attachment?(part) (part['content-disposition'] && part['content-disposition'].disposition == "attachment") || part.header['content-type'].main_type != "text" end
# File actionmailer/lib/action_mailer/vendor/tmail/attachments.rb, line 18 def attachments if multipart? parts.collect { |part| if part.multipart? part.attachments elsif attachment?(part) content = part.body # unquoted automatically by TMail#body file_name = (part['content-location'] && part['content-location'].body) || part.sub_header("content-type", "name") || part.sub_header("content-disposition", "filename") next if file_name.blank? || content.blank? attachment = Attachment.new(content) attachment.original_filename = file_name.strip attachment.content_type = part.content_type attachment end }.flatten.compact end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 502 def base64_decode if /base64/i === self.transfer_encoding('') store 'Content-Transfer-Encoding', '8bit' self.body = Base64.decode(self.body, @config.strict_base64decode?) end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 497 def base64_encode store 'Content-Transfer-Encoding', 'Base64' self.body = Base64.folding_encode(self.body) end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 173 def bcc( default = nil ) addrs2specs(bcc_addrs(nil)) || default end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 185 def bcc=( *strs ) set_string_array_attr 'Bcc', strs end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 145 def bcc_addrs( default = nil ) if h = @header['bcc'] h.addrs else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 161 def bcc_addrs=( arg ) set_addrfield 'bcc', arg end
# File actionmailer/lib/action_mailer/vendor/tmail/quoting.rb, line 25 def body(to_charset = 'utf-8', &block) attachment_presenter = block || Proc.new { |file_name| "Attachment: #{file_name}\n" } if multipart? parts.collect { |part| header = part["content-type"] if part.multipart? part.body(to_charset, &attachment_presenter) elsif header.nil? "" elsif !attachment?(part) part.unquoted_body(to_charset) else attachment_presenter.call(header["name"] || "(unnamed)") end }.join else unquoted_body(to_charset) end end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 357 def body=( str ) parse_body @body_port.wopen {|f| f.write str } str end
body
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 341 def body_port parse_body @body_port end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 169 def cc( default = nil ) addrs2specs(cc_addrs(nil)) || default end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 181 def cc=( *strs ) set_string_array_attr 'Cc', strs end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 137 def cc_addrs( default = nil ) if h = @header['cc'] h.addrs else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 157 def cc_addrs=( arg ) set_addrfield 'cc', arg end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 411 def charset( default = nil ) if h = @header['content-type'] h['charset'] or default else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 419 def charset=( str ) if str if h = @header[ 'content-type' ] h['charset'] = str else store 'Content-Type', "text/plain; charset=#{str}" end end str end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 358 def content_type( default = nil ) if h = @header['content-type'] h.content_type || default else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 130 def create_empty_mail self.class.new(StringPort.new(''), @config) end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 153 def create_forward setup_forward create_empty_mail() end
utils
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 486 def create_reply mail = TMail::Mail.parse('') mail.subject = 'Re: ' + subject('').sub(/\A(?:\[[^\]]+\])?(?:\s*Re:)*\s*/i, '') mail.to_addrs = reply_addresses([]) mail.in_reply_to = [message_id(nil)].compact mail.references = references([]) + [message_id(nil)].compact mail.mime_version = '1.0' mail end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 134 def create_reply setup_reply create_empty_mail() end
date time
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 99 def date( default = nil ) if h = @header['date'] h.date else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 107 def date=( time ) if time store 'Date', time2str(time) else @header.delete 'date' end time end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 252 def delete( key ) @header.delete key.downcase end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 256 def delete_if @header.delete_if do |key,val| if Array === val val.delete_if {|v| yield key, v } val.empty? else yield key, val end end end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 75 def delete_no_send_fields NOSEND_FIELDS.each do |nm| delete nm end delete_if {|n,v| v.empty? } end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 510 def destinations( default = nil ) ret = [] %w( to cc bcc ).each do |nm| if h = @header[nm] h.addrs.each {|i| ret.push i.address } end end ret.empty? ? default : ret end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 449 def disposition( default = nil ) if h = @header['content-disposition'] h.disposition || default else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 474 def disposition_param( name, default = nil ) if h = @header['content-disposition'] h[name] || default else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 346 def each( &block ) body_port().ropen {|f| f.each(&block) } end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 520 def each_destination( &block ) destinations([]).each do |i| if Address === i yield i else i.each(&block) end end end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 219 def each_field( &block ) @header.values.flatten.each(&block) end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 205 def each_header @header.each do |key, val| [val].flatten.each {|v| yield key, v } end end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 213 def each_header_name( &block ) @header.each_key(&block) end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 382 def each_part( &block ) parts().each(&block) end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 366 def epilogue parse_body @epilogue.dup end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 371 def epilogue=( str ) parse_body @epilogue = str str end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 537 def error_reply_addresses( default = nil ) if s = sender(nil) [s] else from_addrs(default) end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 214 def friendly_from( default = nil ) h = @header['from'] a, = h.addrs return default unless a return a.phrase if a.phrase return h.comments.join(' ') unless h.comments.empty? a.spec end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 206 def from( default = nil ) addrs2specs(from_addrs(nil)) || default end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 210 def from=( *strs ) set_string_array_attr 'From', strs end
# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 55 def from_addr( default = nil ) addr, = from_addrs(nil) addr || default end
# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 60 def from_address( default = nil ) if a = from_addr(nil) a.spec else default end end
originator
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 194 def from_addrs( default = nil ) if h = @header['from'] h.addrs else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 202 def from_addrs=( arg ) set_addrfield 'from', arg end
# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 70 def from_phrase( default = nil ) if a = from_addr(nil) a.phrase else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/attachments.rb, line 9 def has_attachments? multipart? && parts.any? { |part| attachment?(part) } end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 37 def header_string( name, default = nil ) h = @header[name.downcase] or return default h.to_s end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 306 def in_reply_to( default = nil ) if h = @header['in-reply-to'] h.ids else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 314 def in_reply_to=( *idstrs ) set_string_array_attr 'In-Reply-To', idstrs end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 76 def inspect "\#<#{self.class} port=#{@port.inspect} bodyport=#{@body_port.inspect}>" end
# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 271 def key?( key ) @header.key? key.downcase end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 366 def main_type( default = nil ) if h = @header['content-type'] h.main_type || default else default end end
identity & threading
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 294 def message_id( default = nil ) if h = @header['message-id'] h.id || default else default end end
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 302 def message_id=( str ) set_string_attr 'Message-Id', str end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 90 def mime_encode if parts.empty? mime_encode_singlepart else mime_encode_multipart true end end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 114 def mime_encode_binary( body ) self.body = [body].pack('m') self.set_content_type 'application', 'octet-stream' self.encoding = 'Base64' end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 120 def mime_encode_multipart( top = true ) self.mime_version = '1.0' if top self.set_content_type 'multipart', 'mixed' e = encoding(nil) if e and not /\A(?:7bit|8bit|binary)\z/i === e raise ArgumentError, 'using C.T.Encoding with multipart mail is not permitted' end end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 98 def mime_encode_singlepart self.mime_version = '1.0' b = body if NKF.guess(b) != NKF::BINARY mime_encode_text b else mime_encode_binary b end end
# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 108 def mime_encode_text( body ) self.body = NKF.nkf('-j -m0', body) self.set_content_type 'text', 'plain', {'charset' => 'iso-2022-jp'} self.encoding = '7bit' end
MIME headers
# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 335 def mime_version( default = nil ) if h = @header['mime-version'] h.version || default else default end end