Email statuses

While viewing statistics, setting up webhooks, and processing delivery results you will encounter various email delivery statuses. This article provides a detailed specification of such statuses and how they should be processed.

Standard statuses

At the most basic level, there are eight standard email statuses. These statuses are returned via webhooks or downloaded using the event-dump/* methods. The status field can have one of the following values:

  • sent — the email has been successfully checked and put in the queue for sending. At this stage we do not know yet whether it was delivered or not.
  • delivered — the email has been successfully accepted by the recipient’s mail server. Later this status may change to “opened”, “clicked”, “unsubscribed”, or “spam”.
  • opened — the email has been delivered and read by the recipient. The status may still change to “clicked”, “unsubscribed”, or “spam”. To enable read tracking, you must specify track_read=1 while sending.
  • clicked — the email has been delivered and read, and the recipient has clicked on one of the links in the message. The status may change to “unsubscribed” or “spam”. To enable click tracking, you must specify track_links=1 in the email/send parameters.
  • unsubscribed — the email has been delivered and read, and the recipient has opted to unsubscribe using the unsubscribe link included in the message or specified in the List-Unsubscribe email header. This status is final.
  • soft_bounced — a transient error has occurred while trying to deliver the message. UniOne will take additional delivery attempts for a period of 24 hours, starting from the first attempt. In case of success, the status will be changed to “delivered”, otherwise it will be “hard_bounced”.
  • hard_bounced - delivery attempts failed, there will be no further attempts to deliver the particular message. The status is final. This may occur due to different reasons; extended status information is provided in delivery_info.delivery_status, described below. The full SMTP server response is also available for analysis as delivery_info.destination_response value. A few common reasons are: the target address is not available; the message has been rejected as spam; the destination mailbox has no free space left.
  • spam — the message has been successfully delivered and manually marked as spam by the addressee. This status is final. The information is only available for domains supporting FBL technology, e.g. msn.com, outlook.com, hotmail.com, live.com, ukr.net, yahoo.com, aol.com.

Extended statuses

If you set the value of delivery_info to 1 while creating a webhook, an extended delivery status will be added to the event data. The extended status is also available in the CSV data obtained with event-dump/* methods. We use these extended statuses to provide detailed delivery information in the statistical reports

Extended statuses are determined by analyzing the SMTP server responses. Oftentimes the error code or even the full error message is not sufficient here, because different servers and mailbox providers tend to use them somewhat inconsistently. Also, as mailbox providers evolve, existing messages may take on different meanings and new ones may be added. Therefore we do not provide an exhaustive list of extended statuses, and we cannot guarantee that the list will not be changed in the future; however, the semantics of existing statuses will remain unchanged.

Extended statuses are not available for all events. If the value is missing, you are best advised to be guided by the standard statuses described above.

Below is a list of extended statuses, grouped by alleged system action.

Success

ok_sent

The message has been sent (an intermediate status before delivery or non-delivery).

ok_delivered

The message has been delivered.

ok_read

The message has been delivered and opened by the recipient.

ok_link_visited

The message has been delivered and opened; the recipient has clicked on one of the link.

Complaint or unsubscription – the address is added to the list of complainers or unsubscribed addresses. The subsequent mailings to this address will be blocked, unless the address is removed from the blocking list using suppression/delete.

ok_spam_folder

The message has been delivered and placed into the Spam folder by the receiving server.

ok_fbl

The message has been delivered and manually tagged as Spam by the recipient.

ok_unsubscribed

The message has been delivered, and the addressee canceled the subscription using the unsubscribe link.

Temporary failure – a “soft bounce”, additional delivery attempts will be made.

err_will_retry

One or more delivery attempts were unsuccessful, the system will retry. The status is not final.

Non-existent – the receiving SMTP server says the address does not exist. UniOne blocks any attempts to send email to such addresses for a long period of time (6 months for most mailbox providers). After that the address will be reactivated, because the mailbox may eventually be restored or registered anew.

err_user_unknown

Address does not exist (and could never have existed).

err_user_inactive

A previously active address is no longer used, delivery has failed.

err_mailbox_discarded

The mailbox has been deleted.

Rejected as spam – the receiving SMTP server has clearly stated that the message will be rejected as spam. This does not always imply that the next message from the same sender will be also declined.

err_spam_rejected

The message has been rejected as spam.

err_spam_skipped

The message was not sent because other messages from the same task were previously rejected by the recipient’s server as spam.

err_spam_removed

The message was not sent because other messages from the same task were previously rejected by the recipient’s server as spam (same as previous, but at later stages of mailing).

Long-term unreachable – numerous failed attempts in the past have led to the address being tagged as unreachable for a long period of time (6 months for most mailbox providers). Emails to such addresses are blocked by the system.

err_unreachable

Address tagged as unreachable due to multiple delivery errors.

skip_dup_unreachable

Sending canceled because the address has been previously tagged as unreachable.

Short-term unreachable – delivery attempts failed, but the address will be tagged as unreachable for a few days only, or will be immediately available for further mailing. 

err_mailbox_full

Mailbox is full.

skip_dup_mailbox_full

Sending canceled because recent attempts resulted in “mailbox full” response.

err_too_large

The receiving server says the message is too large.

err_unsubscribed

The addressee has unsubscribed from your messages.

err_blacklisted

The message has been rejected because the sender domain or IP was found on a blacklist.

err_skip_letter

Sending canceled because the target address is temporarily unreachable.

err_domain_inactive

The target domain does not exist or does not accept mail.

err_destination_misconfigured

The target domain does not accept mail due to a solvable issue (e.g. SMTP service temporarily down).

skip_dup_temp_unreachable

Sending canceled because the target address is temporarily unreachable.

err_lost

The email has not been sent due to the inconsistency of its structure, or has been lost as a result of an internal error. The user should re-send the letter.

err_internal

An internal error has occurred. The user should re-send the letter.

err_delivery_failed

Delivery failed due to unspecified reasons.

 

Reasons to block sending

In certain cases, UniOne does not allow a particular email to be sent (for example, an addressee has unsubscribed from your messages). The email/send call will return the reason for blocking. The reason may also be obtained using the API methods for suppressed addresses, suppression/get and suppression/list.

A reason for blocking is not the same thing as a delivery status, but as they are logically interconnected, we find it convenient to give a description here.

The reasons for blocking may be as follows:

unsubscribed

The addressee has unsubscribed by following the link in the email body or List-Unsubscribe header, or was added to the list with suppression/set API call.

temporary_unavailable

One or more previous attempts for this address were unsuccessful, and the address has been tagged as “temporarily unavailable”. In a few days, the status will be removed and the address will be made available for further mailings. The reasons for this (e.g. mailbox is full or a spam block is in effect) are described above in the extended statuses table.

permanent_unavailable

Address is permanently unavailable, as verified by multiple sending attempts. Strictly speaking, the status is not quite “permanent”, usually it is in effect for about half a year.

complained

The addressee has tagged one of the previous letters as spam, issued a complaint in some other form or added to the list using suppression/set API call.

blocked

The address is blocked by the system. There is a small number of such addresses; most of them are either spam traps or addresses like [email protected] which definitely does not belong to a person.

invalid

The target address is invalid (for example, the @ sign is missing).

duplicate

The address has been included in the same email/send call more than once.