2.2.3.7.1.3 Processing the Status Field
MIME readers process the Status field using the following process:
The portion of the value of the Status field that corresponds to the status-code ABNF rule is split into three separate integer values: Kind, Subject, and Detail. The number before the first period ('.') becomes the Kind value, the number after the first period and before the second period becomes the Subject value, and the number after the second period becomes the Detail value. For example, if the value of the Status field is "5.7.0", the resulting values are: Kind = 5, Subject = 7, Detail = 0.
If the values for Subject or Detail are less than 0 or more than 9, the values are set to 0.
The value of the PidTagNonDeliveryReportStatusCode property ([MS-OXOMSG] section 2.2.2.32) on the recipient is set to (Kind * 100) + (Subject * 10) + Detail.
Two temporary values are created: DiagnosticCode and ReasonCode. DiagnosticCode is initialized to -1, and ReasonCode is initialized to 0.
The values of DiagnosticCode and ReasonCode are modified as specified in the table that follows.
The value of the PidTagNonDeliveryReportDiagCode property ([MS-OXOMSG] section 2.2.2.30) on the recipient is set to the value of DiagnosticCode.
The value of the PidTagNonDeliveryReportReasonCode property ([MS-OXOMSG] section 2.2.2.31) on the recipient is set to the value of ReasonCode.
The following table specifies the modifications made to the values of DiagnosticCode and ReasonCode based on the values of Subject and Detail. For more information about possible values of the Status field, see [RFC3463].
Value of Subject |
Value of Detail |
Action taken |
---|---|---|
1 |
1 |
DiagnosticCode = 35 ReasonCode = 1 |
1 |
2 |
DiagnosticCode = 48 |
1 |
3 |
DiagnosticCode = 32 |
1 |
4 |
DiagnosticCode = 1 |
1 |
6 |
DiagnosticCode = 40 |
1 |
Any other value |
DiagnosticCode = 0 |
2 |
1 |
DiagnosticCode = 38 |
2 |
2 |
DiagnosticCode = 13 |
2 |
3 |
DiagnosticCode = 13 |
2 |
4 |
DiagnosticCode = 30 |
2 |
Any other value |
DiagnosticCode = 38 |
3 |
1 |
DiagnosticCode = 38 |
3 |
2 |
No action taken |
3 |
3 |
DiagnosticCode = 18 |
3 |
4 |
DiagnosticCode = 13 |
3 |
5 |
DiagnosticCode = 18 |
3 |
Any other value |
DiagnosticCode = 38 |
4 |
0 |
No action taken |
4 |
3 |
ReasonCode = 6 |
4 |
4 |
No action taken |
4 |
6 |
DiagnosticCode = 3 |
4 |
7 |
DiagnosticCode = 5 |
4 |
8 |
DiagnosticCode = 3 |
4 |
Any other value |
DiagnosticCode = 2 |
5 |
3 |
DiagnosticCode = 16 |
5 |
4 |
DiagnosticCode = 11 |
5 |
Any other value |
DiagnosticCode = 17 |
6 |
2 |
DiagnosticCode = 9 |
6 |
3 |
DiagnosticCode = 8 |
6 |
4 |
DiagnosticCode = 25 |
6 |
5 |
ReasonCode = 2 |
6 |
Any other value |
DiagnosticCode = 15 |
7 |
1 |
DiagnosticCode = 29 |
7 |
2 |
DiagnosticCode = 28 |
7 |
3 |
DiagnosticCode = 26 |
7 |
Any other value |
DiagnosticCode = 46 |