decoupling the address from the service

I’ve been using gmail since it was an invite only beta. My email address has accumulated so much garbage over the years and finding important emails has become almost as difficult as determining important calls.

I recently switched to Protonmail due to privacy concerns with Google’s monopoly on data. I had hoped I could use this transition to slowly shift important emails to a new address. This just made things worse. I also didn’t want to rely on another company- because like all things in technology there are’s no way to know how long before I need to switch to another service.

So what I’ve done is attempt to decouple my email address from a specific service. I bought a custom domain and will be forwarding mail from that to whatever email service I am using. Here’s the steps I took:

  • Enumerate all the accounts I’ve used my (several) gmail accounts with
  • Buy a custom domain and set up email forwarding records to my Protonmail account.
  • Create a tier system for emails

    • Tier 1: An email address I give to people- These are the emails I want to see.
    • Tier 2: An email address I use for services I care about- newsletters, github, bank accounts, etc.
    • Tier 3: An email address I give to services I don’t care about and that are likely going to spam me.
  • Log in / Recover any accounts tied to this email and either delete them or move them to a new email address.
  • Create forwarding rules for things that still come through old emails.

I’m also considering paying for a higher tier of Protonmail to I can use catch all email addresses to attempt to catch and shame the services that sell / “lose” my email address. This might be overkill.

The first thing I need to do is figure out WHICH services I’ve signed up for. To do that I’m going to request my emails in MBOX format from Google’s Takeout service.

  • Enumerating Websites For this I’m using python.
import mailbox
import re
import dateutil.parser



domain_re = re.compile("@([A-Za-z\.]*)>")
mailboxes = []
mailboxes.append(mailbox.mbox("All mail Including Spam and Trash-001.mbox"))
mailboxes.append(mailbox.mbox("All mail Including Spam and Trash-001-2.mbox"))
results = {}
failures = []

for mailb in mailboxes:
    for message in mailb:
	try:
	    domain = domain_re.findall(message['from'])[0]
	except:
	    failures.append(message)
	    continue
	to = message['To']
	try:
	    date = dateutil.parser.parse(message['date']).replace(tzinfo=None)
	except:
	    print(message['date'])
	    date = datetime(2000, 12, 6, 15, 29, 43, 0000).replace(tzinfo=None)
	if domain in results.keys():
	    if date > results[domain]['date']:
		results[domain]['date'] = date
	    results[domain]['count'] += 1
	    if to not in results[domain]['to']:
		results[domain]['to'].append(to)
	else:
	    results[domain] = {"date": date, "count": 1, "to": [to]}


def cs(string):
    """Replaces any string org mode wouldn't like"""
    # string = string.strip("\'")
    string = string.replace("\r","")
    string = string.replace("\n","")
    string = string.replace("|", "")
    return string

with open("domains.org", "w") as f:
    f.write("#+STARTUP: align\n\n")
    f.write("|Domain|To|Date|Count|Unsubscribed|Deleted|Ignored|Other|\n")
    f.write("||<15>|||||||\n")
    f.write("|-\n")
    for key in results.keys():
        f.write("|{}|{}|{}|{}|||||\n".format(key, cs(str(results[key]['to'])), results[key]['date'], results[key]['count']))

This script will iterate through every email in the mbox format, pull out the domain it came from, the number of emails I’ve recieved from it, and the last time I got an email. It will put this into an org-mode table to I can keep track of which services I need to contact.

The output of this shows that I’m dealing with 1.4k domains. Big oof.

It took me roughly ~15 hours to go through this giant list of emails.

I have couple of key takeaways from this:

  • Most websited have a “delete account” button.
  • Most support agents are actually really quick to delete your account for you. There are two notable exceptions to this. EA has ~20 questions they have to ask you before they will close your account. Hotels.com support staff are useless and instead of closing your account may sign you up for their rewards program.
  • This sucks
  • Use burner emails and fake accounts unless you need to be on a mailing list. Some services will never let your remove your account
  • Unsubscribe as soon as your register
  • Never need to change your email
  • The TLD .company is not accepted eveywhere as a valid email address. I really should have considered this before buying a domain.
  • I’ve given google so much ML data

It’s still a little eerie I can log into a decade+ year old account and have it work. We should really have expiration dates on these.