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. |