Class TMail::Mail
In: actionmailer/lib/action_mailer/vendor/tmail/net.rb
actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb
actionmailer/lib/action_mailer/vendor/tmail/facade.rb
actionmailer/lib/action_mailer/vendor/tmail/quoting.rb
actionmailer/lib/action_mailer/vendor/tmail/mail.rb
actionmailer/lib/action_mailer/vendor/tmail/attachments.rb
Parent: Object

facade.rb

Methods

[]   []=   accept   add_date   add_hf   add_message_id   addrs2specs   attachment?   attachments   base64_decode   base64_encode   bcc   bcc=   bcc_addrs   bcc_addrs=   body   body=   body_port   boundary   canonical   cc   cc=   cc_addrs   cc_addrs=   charset   charset=   clear   content_disposition   content_disposition=   content_transfer_encoding   content_transfer_encoding=   content_type   content_type=   create_empty_mail   create_forward   create_reply   create_reply   date   date=   delete   delete_if   delete_no_send_fields   destinations   disposition   disposition=   disposition_param   do_send_to   each   each_dest   each_destination   each_field   each_header   each_header_name   each_key   each_pair   each_part   each_value   encoding   encoding=   epilogue   epilogue=   error_reply_addresses   fetch   friendly_from   from   from=   from_addr   from_address   from_addrs   from_addrs=   from_phrase   has_attachments?   has_value?   header   header_string   in_reply_to   in_reply_to=   indexes   indices   inspect   key?   keys   load   main_type   message_id   message_id=   mime_encode   mime_encode_binary   mime_encode_multipart   mime_encode_singlepart   mime_encode_text   mime_version   mime_version=   msgid   multipart?   new   new_hf   ordered_each   parse   parse_body   parse_body_0   parse_header   parts   preamble   preamble=   quoted_body   quoted_subject   read_multipart   ready_to_send   references   references=   reply_addresses   reply_to   reply_to=   reply_to_addrs   reply_to_addrs=   send_text_to   send_to   send_to_0   sender   sender=   sender_addr   sender_addr=   set_addrfield   set_content_disposition   set_content_type   set_disposition   set_string_array_attr   set_string_attr   setup_forward   setup_reply   skip_header   store   strftime   sub_header   sub_type   subject   subject   subject=   to   to=   to_addrs   to_addrs=   transfer_encoding   transfer_encoding=   type_param   unquoted_body   value?   values   values_at   with_multipart_encoding   write_back  

Included Modules

TextUtils StrategyInterface

Constants

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 )

External Aliases

key? -> include?
key? -> has_key?
from_addrs= -> from_address=
message_id -> msgid
message_id= -> msgid=
each_destination -> each_dest
load -> load_from
load -> loadfrom

Attributes

port  [R] 

Public Class methods

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 127
  def Mail.boundary
    ::TMail.new_boundary
  end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 46
      def load( fname )
        new(FilePort.new(fname))
      end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 131
  def Mail.msgid
    ::TMail.new_message_id
  end

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 53
      def parse( str )
        new(StringPort.new(str))
      end

Public Instance methods

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 163
    def []( key )
      @header[key.downcase]
    end

[Source]

# 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

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 86
    def add_date
      self.date = Time.now
    end

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 173
    def bcc( default = nil )
      addrs2specs(bcc_addrs(nil)) || default
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 185
    def bcc=( *strs )
      set_string_array_attr 'Bcc', strs
    end

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 161
    def bcc_addrs=( arg )
      set_addrfield 'bcc', arg
    end

[Source]

# 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

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 341
    def body_port
      parse_body
      @body_port
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 169
    def cc( default = nil )
      addrs2specs(cc_addrs(nil)) || default
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 181
    def cc=( *strs )
      set_string_array_attr 'Cc', strs
    end

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 157
    def cc_addrs=( arg )
      set_addrfield 'cc', arg
    end

[Source]

# 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

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 248
    def clear
      @header.clear
    end
content_disposition( default = nil )

Alias for disposition

content_disposition=( str, params = nil )

Alias for set_disposition

content_transfer_encoding( default = nil )

Alias for transfer_encoding

content_transfer_encoding=( str )

Alias for transfer_encoding=

[Source]

# 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
content_type=( str, sub = nil, param = nil )

Alias for set_content_type

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 130
    def create_empty_mail
      self.class.new(StringPort.new(''), @config)
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 153
    def create_forward
      setup_forward create_empty_mail()
    end

utils

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 134
    def create_reply
      setup_reply create_empty_mail()
    end

date time

[Source]

# 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

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 252
    def delete( key )
      @header.delete key.downcase
    end

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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
disposition=( str, params = nil )

Alias for set_disposition

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 346
    def each( &block )
      body_port().ropen {|f| f.each(&block) }
    end
each_dest( &block )

Alias for each_destination

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 219
    def each_field( &block )
      @header.values.flatten.each(&block)
    end

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 213
    def each_header_name( &block )
      @header.each_key(&block)
    end
each_key( &block )

Alias for each_header_name

each_pair()

Alias for each_header

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 382
    def each_part( &block )
      parts().each(&block)
    end
each_value( &block )

Alias for each_field

encoding( default = nil )

Alias for transfer_encoding

encoding=( str )

Alias for transfer_encoding=

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 366
    def epilogue
      parse_body
      @epilogue.dup
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 371
    def epilogue=( str )
      parse_body
      @epilogue = str
      str
    end

[Source]

# 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
fetch( key )

Alias for #[]

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 206
    def from( default = nil )
      addrs2specs(from_addrs(nil)) || default
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 210
    def from=( *strs )
      set_string_array_attr 'From', strs
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 55
    def from_addr( default = nil )
      addr, = from_addrs(nil)
      addr || default
    end

[Source]

# 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

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 202
    def from_addrs=( arg )
      set_addrfield 'from', arg
    end

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/attachments.rb, line 9
    def has_attachments?
      multipart? && parts.any? { |part| attachment?(part) }
    end
has_value?( val )

Alias for value?

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 159
    def header
      @header.dup
    end

[Source]

# 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

[Source]

# 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

[Source]

# 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
indexes( *args )

Alias for values_at

indices( *args )

Alias for values_at

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 76
    def inspect
      "\#<#{self.class} port=#{@port.inspect} bodyport=#{@body_port.inspect}>"
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 271
    def key?( key )
      @header.key? key.downcase
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 267
    def keys
      @header.keys
    end

[Source]

# 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

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 302
    def message_id=( str )
      set_string_attr 'Message-Id', str
    end

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 343
    def mime_version=( m, opt = nil )
      if opt
        if h = @header['mime-version']
          h.major = m
          h.minor = opt
        else
          store 'Mime-Version', "#{m}.#{opt}"
        end
      else
        store 'Mime-Version', m
      end
      m
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 546
    def multipart?
      main_type('').downcase == 'multipart'
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 236
    def ordered_each
      list = @header.keys
      FIELD_ORDER.each do |name|
        if list.delete(name)
          [@header[name]].flatten.each {|v| yield name, v }
        end
      end
      list.each do |name|
        [@header[name]].flatten.each {|v| yield name, v }
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 377
    def parts
      parse_body
      @parts
    end
preamble(to_charset = 'utf-8', &block)

Alias for body

preamble=( str )

Alias for body=

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 350
    def quoted_body
      parse_body
      @body_port.ropen {|f|
          return f.read
      }
    end
quoted_subject( default = nil )

Alias for subject

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 64
    def ready_to_send
      delete_no_send_fields
      add_message_id
      add_date
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 318
    def references( default = nil )
      if h = @header['references']
        h.refs
      else
        default
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 326
    def references=( *strs )
      set_string_array_attr 'References', strs
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 533
    def reply_addresses( default = nil )
      reply_to_addrs(nil) or from_addrs(nil) or default
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 236
    def reply_to( default = nil )
      addrs2specs(reply_to_addrs(nil)) || default
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 240
    def reply_to=( *strs )
      set_string_array_attr 'Reply-To', strs
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 224
    def reply_to_addrs( default = nil )
      if h = @header['reply-to']
        h.addrs
      else
        default
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 232
    def reply_to_addrs=( arg )
      set_addrfield 'reply-to', arg
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 43
    def send_text_to( smtp )
      do_send_to(smtp) do
        ready_to_send
        mime_encode
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 37
    def send_to( smtp )
      do_send_to(smtp) do
        ready_to_send
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 58
    def send_to_0( smtp, from, to )
      smtp.ready(from, to) do |f|
        encoded "\r\n", 'j', f, ''
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 261
    def sender( default )
      f = @header['sender'] or return default
      a = f.addr            or return default
      a.spec
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 267
    def sender=( str )
      set_string_attr 'Sender', str
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 245
    def sender_addr( default = nil )
      f = @header['sender'] or return default
      f.addr                or return default
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 250
    def sender_addr=( addr )
      if addr
        h = HeaderField.internal_new('sender', @config)
        h.addr = addr
        @header['sender'] = h
      else
        @header.delete 'sender'
      end
      addr
    end
set_content_disposition( str, params = nil )

Alias for set_disposition

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 382
    def set_content_type( str, sub = nil, param = nil )
      if sub
        main, sub = str, sub
      else
        main, sub = str.split(%r</>, 2)
        raise ArgumentError, "sub type missing: #{str.inspect}" unless sub
      end
      if h = @header['content-type']
        h.main_type = main
        h.sub_type  = sub
        h.params.clear
      else
        store 'Content-Type', "#{main}/#{sub}"
      end
      @header['content-type'].params.replace param if param

      str
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 459
    def set_disposition( str, params = nil )
      if h = @header['content-disposition']
        h.disposition = str
        h.params.clear
      else
        store('Content-Disposition', str)
        h = @header['content-disposition']
      end
      h.params.replace params if params
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 157
    def setup_forward( mail )
      m = Mail.new(StringPort.new(''))
      m.body = decoded
      m.set_content_type 'message', 'rfc822'
      m.encoding = encoding('7bit')
      mail.parts.push m
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 138
    def setup_reply( m )
      if tmp = reply_addresses(nil)
        m.to_addrs = tmp
      end

      mid = message_id(nil)
      tmp = references(nil) || []
      tmp.push mid if mid
      m.in_reply_to = [mid] if mid
      m.references = tmp unless tmp.empty?
      m.subject = 'Re: ' + subject('').sub(/\A(?:\s*re:)+/i, '')

      m
    end
store( key, val )

Alias for #[]=

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 116
    def strftime( fmt, default = nil )
      if t = date
        t.strftime(fmt)
      else
        default
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 167
    def sub_header(key, param)
      (hdr = self[key]) ? hdr[param] : nil
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 374
    def sub_type( default = nil )
      if h = @header['content-type']
        h.sub_type || default
      else
        default
      end
    end

subject

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 276
    def subject( default = nil )
      if h = @header['subject']
        h.body
      else
        default
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/quoting.rb, line 3
    def subject(to_charset = 'utf-8')
      Unquoter.unquote_and_convert_to(quoted_subject, to_charset)
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 285
    def subject=( str )
      set_string_attr 'Subject', str
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 165
    def to( default = nil )
      addrs2specs(to_addrs(nil)) || default
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 177
    def to=( *strs )
      set_string_array_attr 'To', strs
    end

destination

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 129
    def to_addrs( default = nil )
      if h = @header['to']
        h.addrs
      else
        default
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 153
    def to_addrs=( arg )
      set_addrfield 'to', arg
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 431
    def transfer_encoding( default = nil )
      if h = @header['content-transfer-encoding']
        h.encoding || default
      else
        default
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 439
    def transfer_encoding=( str )
      set_string_attr 'Content-Transfer-Encoding', str
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 403
    def type_param( name, default = nil )
      if h = @header['content-type']
        h[name] || default
      else
        default
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/quoting.rb, line 7
    def unquoted_body(to_charset = 'utf-8')
      from_charset = sub_header("content-type", "charset")
      case (content_transfer_encoding || "7bit").downcase
        when "quoted-printable"
          Unquoter.unquote_quoted_printable_and_convert_to(quoted_body,
            to_charset, from_charset, true)
        when "base64"
          Unquoter.unquote_base64_and_convert_to(quoted_body, to_charset,
            from_charset)
        when "7bit", "8bit"
          Unquoter.convert_to(quoted_body, to_charset, from_charset)
        when "binary"
          quoted_body
        else
          quoted_body
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 43
    def value?( val )
      HeaderField === val or return false

      [ @header[val.name.downcase] ].flatten.include? val
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb, line 37
    def values
      ret = []
      each_field {|v| ret.push v }
      ret
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 275
    def values_at( *args )
      args.map {|k| @header[k.downcase] }.flatten
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 88
    def write_back( eol = "\n", charset = 'e' )
      parse_body
      @port.wopen {|stream| encoded eol, charset, stream }
    end

Private Instance methods

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 320
    def add_hf( name, field )
      key = name.downcase
      field = new_hf(name, field)

      if ALLOW_MULTIPLE.include? key
        (@header[key] ||= []).push field
      else
        @header[key] = field
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 81
    def addrs2specs( addrs )
      return nil unless addrs
      list = addrs.map {|addr|
          if addr.address_group?
          then addr.map {|a| a.spec }
          else addr.spec
          end
      }.flatten
      return nil if list.empty?
      list
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 110
    def canonical( name )
      name.split(/-/).map {|s| s.capitalize }.join('-')
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/net.rb, line 50
    def do_send_to( smtp )
      from = from_address or raise ArgumentError, 'no from address'
      (dests = destinations).empty? and raise ArgumentError, 'no receipient'
      yield
      send_to_0 smtp, from, dests
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 331
    def new_hf( name, field )
      HeaderField.new(name, field, @config)
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 388
    def parse_body( f = nil )
      return if @body_parsed
      if f
        parse_body_0 f
      else
        @port.ropen {|f|
            skip_header f
            parse_body_0 f
        }
      end
      @body_parsed = true
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 407
    def parse_body_0( f )
      if multipart?
        read_multipart f
      else
        @body_port = @config.new_body_port(self)
        @body_port.wopen {|w|
            w.write f.read
        }
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 284
    def parse_header( f )
      name = field = nil
      unixfrom = nil

      while line = f.gets
        case line
        when /\A[ \t]/             # continue from prev line
          raise SyntaxError, 'mail is began by space' unless field
          field << ' ' << line.strip

        when /\A([^\: \t]+):\s*/   # new header line
          add_hf name, field if field
          name = $1
          field = $' #.strip

        when /\A\-*\s*\z/          # end of header
          add_hf name, field if field
          name = field = nil
          break

        when /\AFrom (\S+)/
          unixfrom = $1

        when /^charset=.*/
        
        else
          raise SyntaxError, "wrong mail header: '#{line.inspect}'"
        end
      end
      add_hf name, field if name

      if unixfrom
        add_hf 'Return-Path', "<#{unixfrom}>" unless @header['return-path']
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 418
    def read_multipart( src )
      bound = @header['content-type'].params['boundary']
      is_sep = /\A--#{Regexp.quote bound}(?:--)?[ \t]*(?:\n|\r\n|\r)/
      lastbound = "--#{bound}--"

      ports = [ @config.new_preamble_port(self) ]
      begin
        f = ports.last.wopen
        while line = src.gets
          if is_sep === line
            f.close
            break if line.strip == lastbound
            ports.push @config.new_part_port(self)
            f = ports.last.wopen
          else
            f << line
          end
        end
        @epilogue = (src.read || '')
      ensure
        f.close if f and not f.closed?
      end

      @body_port = ports.shift
      @parts = ports.map {|p| self.class.new(p, @config) }
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 69
    def set_addrfield( name, arg )
      if arg
        h = HeaderField.internal_new(name, @config)
        h.addrs.replace [arg].flatten
        @header[name] = h
      else
        @header.delete name
      end
      arg
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 48
    def set_string_array_attr( key, strs )
      strs.flatten!
      if strs.empty?
        @header.delete key.downcase
      else
        store key, strs.join(', ')
      end
      strs
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/facade.rb, line 59
    def set_string_attr( key, str )
      if str
        store key, str
      else
        @header.delete key.downcase
      end
      str
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 401
    def skip_header( f )
      while line = f.gets
        return if /\A[\r\n]*\z/ === line
      end
    end

[Source]

# File actionmailer/lib/action_mailer/vendor/tmail/mail.rb, line 114
    def with_multipart_encoding( strategy )
      if parts().empty?    # DO NOT USE @parts
        yield

      else
        bound = ::TMail.new_boundary
        if @header.key? 'content-type'
          @header['content-type'].params['boundary'] = bound
        else
          store 'Content-Type', %<multipart/mixed; boundary="#{bound}">
        end

        yield

        parts().each do |tm|
          strategy.puts
          strategy.puts '--' + bound
          tm.accept strategy
        end
        strategy.puts
        strategy.puts '--' + bound + '--'
        strategy.write epilogue()
      end
    end

[Validate]