class Mail::AttachmentsList

def []=(name, value)

def []=(name, value)
  encoded_name = Mail::Encodings.decode_encode name, :encode
  default_values = { :content_type => "#{set_mime_type(name)}; filename=\"#{encoded_name}\"",
                     :content_transfer_encoding => "#{guess_encoding}",
                     :content_disposition => "#{@content_disposition_type}; filename=\"#{encoded_name}\"" }
  if value.is_a?(Hash)
    if path = value.delete(:filename)
      value[:content] ||= File.open(path, 'rb') { |f| f.read }
    end
    default_values[:body] = value.delete(:content) if value[:content]
    default_values[:body] = value.delete(:data) if value[:data]
    encoding = value.delete(:transfer_encoding) || value.delete(:encoding)
    if encoding
      if Mail::Encodings.defined? encoding
        default_values[:content_transfer_encoding] = encoding
      else
        raise "Do not know how to handle Content Transfer Encoding #{encoding}, please choose either quoted-printable or base64"
      end
    end
    if value[:mime_type]
      default_values[:content_type] = value.delete(:mime_type)
      @mime_type = MiniMime.lookup_by_content_type(default_values[:content_type])
      default_values[:content_transfer_encoding] ||= guess_encoding
    end
    hash = default_values.merge(value)
  else
    default_values[:body] = value
    hash = default_values
  end
  if hash[:body].respond_to? :force_encoding and hash[:body].respond_to? :valid_encoding?
    if not hash[:body].valid_encoding? and default_values[:content_transfer_encoding].casecmp('binary').zero?
      hash[:body] = hash[:body].dup if hash[:body].frozen?
      hash[:body].force_encoding("BINARY")
    end
  end
  attachment = Part.new(hash)
  attachment.add_content_id(hash[:content_id])
  @parts_list << attachment
end