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