Sha256: 6473dd8ca8de58757e549d23a466ed75a8c844bc4a665b2427bf9cffe10c9fa5

Contents?: true

Size: 1.82 KB

Versions: 35

Compression:

Stored size: 1.82 KB

Contents

=begin rdoc

= Attachment handling file

=end

require 'kconv'
require 'stringio'

module TMail
  class Attachment < StringIO
    attr_accessor :original_filename, :content_type
    alias quoted_filename original_filename
  end

  class Mail
    def has_attachments?
      attachment?(self) || multipart? && parts.any? { |part| attachment?(part) }
    end

    # Returns true if this part's content main type is text, else returns false.
    # By main type is meant "text/plain" is text.  "text/html" is text
    def text_content_type?
      self.header['content-type'] && (self.header['content-type'].main_type == 'text')
    end
  
    def inline_attachment?(part)
      part['content-id'] || (part['content-disposition'] && part['content-disposition'].disposition == 'inline' && !part.text_content_type?)
    end
  
    def attachment?(part)
      part.disposition_is_attachment? || (!part.content_type.nil? && !part.text_content_type?) unless part.multipart?
    end
  
    def attachments
      if multipart?
        parts.collect { |part| attachment(part) }.flatten.compact
      elsif attachment?(self)
        [attachment(self)]
      end
    end
  
    private
  
    def attachment(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') ||
                    'noname'

        return if content.blank?

        attachment = TMail::Attachment.new(content)
        attachment.original_filename = file_name.strip unless file_name.blank?
        attachment.content_type = part.content_type
        attachment
      end
    end

  end
end

Version data entries

35 entries across 35 versions & 10 rubygems

Version Path
tmail_es-1.2.7.3 lib/tmail/attachments.rb
tmail_es-1.2.7.2 lib/tmail/attachments.rb
actionmailer-2.3.18 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-2.3.17-rack-upgrade-2.3.17 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-2.3.17 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-2.3.16 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-rack-upgrade-2-2.3.16 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-rack-upgrade-2-2.3.15 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-2.3.15 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-rack-upgrade-2.3.17 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-rack-upgrade-2.3.16 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-rack-upgrade-2.3.15 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-rack-upgrade-2.3.14.1 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
radiant-1.0.0 ruby-debug/ruby/1.8/gems/actionmailer-2.3.14/lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
vanity-1.7.1 vendor/ruby/1.9.1/gems/actionmailer-2.3.12/lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-2.3.14 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
kajam-1.0.3.rc2 vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
actionmailer-2.3.12 lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
radiant-1.0.0.rc2 vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb
radiant-1.0.0.rc1 vendor/rails/actionmailer/lib/action_mailer/vendor/tmail-1.2.7/tmail/attachments.rb