So, here’s what I’m trying to do. I’d like to read my email from two machines. I will leave all of my email on gmail’s server and I’ll just track the emails that I’ve downloaded locally on each machine, so I guarantee that I have a copy on each client machine.

This shouldn’t be a problem using normal POP3 protocol, but gmail thinks that it’s smarter than everyone else and ‘fixes’ the broken (inefficient) protocol by just remembering which emails are downloaded - even if they’re not marked as ‘read’ on gmail’s web interface.

I download an email on one machine. The email comes over, and doesn’t get deleted or marked as ‘read’ on gmail’s web interface. I try to fetch it from my second machine and it says that there are no new emails. Even if I specify “download everything, I don’t care what it’s status is” gmail says, “no, you already grabbed a copy of all of your emails, I’m not sending you any more copies of it”. You can reset Big-G’s counter by resetting it for all of your emails in the POP3 settings, but this resets it across the board. I could download the whole shebang to my second machine, but any future messages will have the same “one copy only” problem.

I know why Google does this. They do it to save on bandwidth and to make pop3 faster. The way POP3 works is the client will ask for a list of ids on the server if the client wants all messages - Google doesn’t give all ids, it just gives un-fetched ids. This is not standards-compliant and should be fixed. They want to remove the possibility of someone using the “never delete anything” option, so when the client says “give me a list of all of the ids on the server”, it doesn’t do a full table-scan of the user’s spool every 30 seconds that a client checks in.

What google should do is to allow a limited id range - like the last 7 days worth or so. Keep all of the ids in a key/value pair, so a full table scan doesn’t have to be done, and the request will take an atomic amount of time. Either that, or implement the full POP3 protocol and optimize the I/O on their side to be more efficient.

Not really evil, but not great, Google.

Tweet
submit to reddit