Unfortunately, up to date Google doesn't allow purchasing additional storage capacity for your GMail Google Apps Business account. 

While you can buy additional storage for Google Docs/Sites and even purchase more capacity for your private GMail account - it remains unclear to me why Google doesn't allow purchasing more capacity to your business accounts...

At the beginning I wasn't thinking about it as a serious issue, as 25GB mailbox is a really big (my own mailbox is consuming only 12% of my capacity - after almost 3 years of use), but recently I encountered into some customers who have employees with 90% and even more used capacity and are unwilling (or unable, - keep reading) to delete old/unnecessary emails.

How this can be solved? Personally, I have used several approaches which can be used separately or as a combination:

Approach 1 - Use Google Archiving & Discovery (GMD, former Postini)
Google offers additional product which works integrated with your Google Apps and allows you to store every incoming and outgoing emails in a personal archive (this is not related to 'Archive" button which you have in your GMail UI'). That archive isn't limited by storage rather by retention period which can be 1 year or 10 years.

That essentially mean that every of your email will be stored for a long period of time even if you delete it from your mailbox. Given the low cost of this solution ($33 per user per year for 10 years retention) makes this almost perfect solution.

Why almost? Well, it has few drawbacks:
  • The archive only starts to collect data from the moment you activated (purchased & configured) the service
  • Your users will need to use separate user interface to retrieve archived messages
While Google is actively working to merge Archiving functionality into Google Apps UI (should happen later this year) to provide it's clients with consistent UI across all Google products, and the ability to re-inject historical emails into archives - eventually this approach will become a best one as per my opinion.

Approach 2 - Additional Mailbox with Delegated Access
This approach seems to be a most simple and effective. You'll need to add (buy) additional mailbox and add it as a delegated mailbox to the primary one.

For example, let's imagine we have John Smith (jsmith@ourdomain.com) which is now screaming for more storage as his mailbox rapidly approaching towards 99% of the 25GB.

We'll need to create additional mailbox (let's name it as jsmith-arch@ourdomain.com) and add a delegated access from jsmith-arch@ to jsmith@).

Now, we have two mailboxes - jsmith@ (with almost no space left) and jsmith-arch@ as empty one. We'll need to migrate (move) some of the history from primary mailbox to the additional one to free-up some space. How do we do that?

Well, surprisingly I found that the most efficient way to do that is by using Outlook (!) While you can migrate emails via Google Apps Migration for Microsoft Exchange (GAMME) and additional tools, Outlook is the most efficient and fastest way to achieve this.

Install Outlook (versions 2003-2010), then install Google Apps Sync for Outlook. It has to be at least version 2.4.129.704 as it the first version to support "email copy between different message stores".

When you configure Google Apps Sync for Outlook, configure it for your primary account, i.e. jsmith@. Then, add a secondary account by launching "Add Delegated Access" from your Start/Programs menu under Google Apps Sync and specify a secondary address (jsmith-arch@).

Switch your Outlook view to "Folder List" and you'll see both accounts under the same outlook profile. Now, you can move old/large emails from primary account to the secondary account and the user still will have access to both of them. All new emails will continue to arrive to the primary account and the secondary account will act as a personal archive repository. 

If you need even more storage, you can create additional accounts and add them as delegated mailboxes as well, going up to 250GB of space in total.

Approach 3 - Find and delete emails with large attachments
While it's not a direct resolution for the problem, you still can find it useful with some accounts. While Google doesn't provide "sort by size" functionality via GMail (you can still do it thru Outlook), there is a simple way to find large messages in your mailbox.

You can use this simple script which will run and add a label to your messages (in addition to existing labels which you might already have) which have attachments of 1, 5, 10, 20 or 50MB. Off course you can customize the script to allow additional/different capacities.

********************************************************
var sizes = [1, 5, 10, 20, 50];

// The number of threads to process in a single pass
var MAX_RECORDS = 250;

function getAttachmentsSize(attachments) {
// Get the size of all attachments of the message
    var byteCount = 0;

    for (var i = 0; i < attachments.length; ++i) {
        byteCount += attachments[i].getBytes().length;
    }

    return byteCount;
}

function getThreadSize(thread) {
// Get the size of the bodies and all attachments for the thread
    var byteCount = 0;
    var msgs = thread.getMessages();

    for (var i = 0; i < msgs.length; ++i) {
        byteCount += msgs[i].getBody().length + getAttachmentsSize(msgs[i].getAttachments());
    }
    return byteCount;
}

function getLabel(labelName) {
// Get the label if exist and create it if it does not
    var label = GmailApp.getUserLabelByName(labelName);
    if (!label)
        label = GmailApp.createLabel(labelName);

    return label;
}

function getSearchString() {
// Build the search string
  var searchString = "has:attachment -label:Attach";
    for (var i = 0; i < sizes.length; ++i) {
        searchString += " -label:Attach-" + sizes[i] + "MB";
    }

    return searchString;
}

function labelAttachments() {

    // Search for all threads with attachments that are not yet labeled
    var searchThreads = GmailApp.search(getSearchString(), 0, MAX_RECORDS);
    
    for (var i = 0; i < searchThreads.length; ++i) {
        var threadSizeMB = getThreadSize(searchThreads[i]) / 1048576.0;
      
        if (threadSizeMB < sizes[0])
            searchThreads[i].addLabel(getLabel("Attach"));
        else {
            for (var j = sizes.length - 1; j >= 0; --j) {
                if (threadSizeMB >= sizes[j]) {
                    searchThreads[i].addLabel(getLabel("Attach/" + sizes[j] + "MB"));
                    break;
                }
            }
        }
    }
}

********************************************************

To install the script, copy/paste it (don't, however,  copy asterisks in the beginning and the end of the script) to Script Editor in Google Spreadsheet (I named mine as TagBySize) and run function "labelAttachments". The script will run and tag your emails according to sizes allowing you easy access to them and making appropriate action (such as delete..)

Summary
Ideally, Google could provide us with the ability to purchase additional capacity for Google Apps Business customers. While I do believe this functionality will be available one day (as it happened with Docs/Sites capacities earlier this year) you can use the above workarounds until Google will provide the upgrade.

Do you have additional ways to overcome 25GB limitation? I'd love to know how you resolved this!
Posted
AuthorVadim Solovey