Cameo now classifies messages returned to sender (bounces) to try to make a bit more sense out of the otherwise cryptic message it receives.


When an email bounces, the message received back can be cryptic. For example, a long screed of technical information may contain the words “unroutable address”. That’s arcane language for “the email address does not exist”. There are several possible reasons for that, for example:

  • it never existed, the email address in the membership record is simply wrong
  • the account (the bit before the @ sign) has been closed or deleted by the provider
  • the domain (the bit after the @ sign) is no longer in service

In the end, this doesn’t matter: the important thing is that that email address is no longer usable. But I have found about fifteen different ways of saying this, sent by different email systems, mostly using unhelpful language and burying the important part in long-winded paragraphs.

Cameo now attempts to interpret what the message actually means. Previously, a notification about bounces from a mailshot grouped:

  • new problems
  • old problems (emails addresses were quarantined), and
  • out-of-office replies.

Now it divides up the new problems into categories according to what went wrong.

Bounce categories

Despite the plethora of different bounce messages, they boil down to only a small number of different reasons for rejection. So Cameo now splits up the new problems. It now classifies them like this:

  • Non-existent email address – never existed or account has been closed
  • Probably rejected as spam
  • Their mailbox is full – maybe try later
  • Incorrect email address – check for odd characters, especially at start and end
  • Their email system is broken – e.g. infinite forwarding
  • Unidentified problem
  • Not sent – already quarantined because of previous problems
  • Probably out-of-office replies

A notification for failures arising from a mailshot groups failed email addresses under these headings. These still include an excerpt of the raw reason given, but it is de-emphasised.

Similarly, quarantined email addresses shown in communications → sent email show these deduced reasons for rejection.

Presentation of sent email

The layout of communications → sent email has changed a little.

Both sent email and the table of quarantined email addresses now also show:

  • The reason we deduced that they failed, as above
  • A button to download the complete raw bounce message (in some cases only for bounces received after this change). This content is extremely technical. But should you pursue it with the recipient’s provider, they need this file to diagnose the problem.

Failed sent email includes the full rejection text in the preview.

Work in progress

Cameo uses the same technique to classify bounce messages as it already does to detect out-of-office replies. It looks for key words and phrases in the bounce message that we know are common to that kind of message. For example, out-of-office replies often say please or thank you. Automated messages never do that! Similarly, a bounce that includes quota exceeded almost certainly indicates the recipient’s mailbox is full.

The out-of-office detector now catches pretty much all messages accurately. It’s a long time since I have seen a false positive or negative. Categorising failures will need fine-tuning of the trigger phrases to reach the same kind of accuracy. If we don’t correctly categorise the message, we label it unidentified problem. I will look at these to refine the categorisation.