sisimai 5.1.0-java → 5.2.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake-test.yml +1 -1
  3. data/ChangeLog.md +102 -0
  4. data/Makefile +4 -2
  5. data/README-JA.md +23 -16
  6. data/README.md +22 -15
  7. data/lib/sisimai/arf.rb +121 -210
  8. data/lib/sisimai/fact.rb +208 -158
  9. data/lib/sisimai/lda.rb +98 -0
  10. data/lib/sisimai/lhost/activehunter.rb +1 -1
  11. data/lib/sisimai/lhost/amazonses.rb +185 -301
  12. data/lib/sisimai/lhost/apachejames.rb +48 -51
  13. data/lib/sisimai/lhost/biglobe.rb +1 -2
  14. data/lib/sisimai/lhost/courier.rb +10 -8
  15. data/lib/sisimai/lhost/domino.rb +25 -25
  16. data/lib/sisimai/lhost/dragonfly.rb +3 -4
  17. data/lib/sisimai/lhost/einsundeins.rb +3 -4
  18. data/lib/sisimai/lhost/exchange2003.rb +6 -8
  19. data/lib/sisimai/lhost/exchange2007.rb +111 -101
  20. data/lib/sisimai/lhost/exim.rb +232 -242
  21. data/lib/sisimai/lhost/ezweb.rb +43 -51
  22. data/lib/sisimai/lhost/fml.rb +2 -3
  23. data/lib/sisimai/lhost/gmail.rb +32 -28
  24. data/lib/sisimai/lhost/gmx.rb +4 -16
  25. data/lib/sisimai/lhost/googlegroups.rb +9 -8
  26. data/lib/sisimai/lhost/googleworkspace.rb +94 -0
  27. data/lib/sisimai/lhost/imailserver.rb +7 -16
  28. data/lib/sisimai/lhost/interscanmss.rb +1 -1
  29. data/lib/sisimai/lhost/kddi.rb +3 -4
  30. data/lib/sisimai/lhost/mailfoundry.rb +2 -5
  31. data/lib/sisimai/lhost/mailmarshalsmtp.rb +1 -2
  32. data/lib/sisimai/lhost/messagingserver.rb +14 -13
  33. data/lib/sisimai/lhost/mfilter.rb +4 -3
  34. data/lib/sisimai/lhost/notes.rb +2 -4
  35. data/lib/sisimai/lhost/opensmtpd.rb +2 -2
  36. data/lib/sisimai/lhost/postfix.rb +25 -27
  37. data/lib/sisimai/lhost/qmail.rb +130 -106
  38. data/lib/sisimai/lhost/sendmail.rb +19 -18
  39. data/lib/sisimai/lhost/v5sendmail.rb +88 -60
  40. data/lib/sisimai/lhost/verizon.rb +2 -2
  41. data/lib/sisimai/lhost/x1.rb +1 -1
  42. data/lib/sisimai/lhost/x2.rb +1 -2
  43. data/lib/sisimai/lhost/x3.rb +2 -2
  44. data/lib/sisimai/lhost/x6.rb +1 -1
  45. data/lib/sisimai/lhost/zoho.rb +2 -2
  46. data/lib/sisimai/lhost.rb +18 -21
  47. data/lib/sisimai/message.rb +93 -146
  48. data/lib/sisimai/order.rb +21 -77
  49. data/lib/sisimai/reason/authfailure.rb +1 -4
  50. data/lib/sisimai/reason/badreputation.rb +2 -2
  51. data/lib/sisimai/reason/blocked.rb +7 -10
  52. data/lib/sisimai/reason/contenterror.rb +7 -1
  53. data/lib/sisimai/reason/exceedlimit.rb +1 -4
  54. data/lib/sisimai/reason/failedstarttls.rb +42 -0
  55. data/lib/sisimai/reason/filtered.rb +5 -4
  56. data/lib/sisimai/reason/hasmoved.rb +1 -2
  57. data/lib/sisimai/reason/hostunknown.rb +3 -3
  58. data/lib/sisimai/reason/mailboxfull.rb +2 -4
  59. data/lib/sisimai/reason/mailererror.rb +1 -2
  60. data/lib/sisimai/reason/mesgtoobig.rb +2 -4
  61. data/lib/sisimai/reason/norelaying.rb +2 -3
  62. data/lib/sisimai/reason/notaccept.rb +2 -3
  63. data/lib/sisimai/reason/notcompliantrfc.rb +10 -4
  64. data/lib/sisimai/reason/rejected.rb +1 -1
  65. data/lib/sisimai/reason/requireptr.rb +2 -2
  66. data/lib/sisimai/reason/securityerror.rb +1 -3
  67. data/lib/sisimai/reason/spamdetected.rb +6 -8
  68. data/lib/sisimai/reason/speeding.rb +1 -2
  69. data/lib/sisimai/reason/suppressed.rb +36 -0
  70. data/lib/sisimai/reason/suspend.rb +1 -3
  71. data/lib/sisimai/reason/systemerror.rb +5 -0
  72. data/lib/sisimai/reason/toomanyconn.rb +1 -2
  73. data/lib/sisimai/reason/userunknown.rb +1 -1
  74. data/lib/sisimai/reason/virusdetected.rb +5 -6
  75. data/lib/sisimai/reason.rb +77 -73
  76. data/lib/sisimai/rfc1123.rb +152 -0
  77. data/lib/sisimai/rfc1894.rb +102 -62
  78. data/lib/sisimai/rfc2045.rb +2 -1
  79. data/lib/sisimai/rfc3464/thirdparty.rb +102 -0
  80. data/lib/sisimai/rfc3464.rb +222 -343
  81. data/lib/sisimai/rfc3834.rb +1 -1
  82. data/lib/sisimai/rfc5322.rb +7 -17
  83. data/lib/sisimai/rfc791.rb +69 -0
  84. data/lib/sisimai/rhost/aol.rb +36 -0
  85. data/lib/sisimai/rhost/apple.rb +5 -2
  86. data/lib/sisimai/rhost/cox.rb +3 -2
  87. data/lib/sisimai/rhost/facebook.rb +100 -0
  88. data/lib/sisimai/rhost/franceptt.rb +3 -2
  89. data/lib/sisimai/rhost/godaddy.rb +3 -2
  90. data/lib/sisimai/rhost/google.rb +19 -17
  91. data/lib/sisimai/rhost/gsuite.rb +42 -0
  92. data/lib/sisimai/rhost/iua.rb +3 -3
  93. data/lib/sisimai/rhost/kddi.rb +3 -2
  94. data/lib/sisimai/rhost/messagelabs.rb +37 -0
  95. data/lib/sisimai/rhost/microsoft.rb +56 -49
  96. data/lib/sisimai/rhost/mimecast.rb +29 -27
  97. data/lib/sisimai/rhost/nttdocomo.rb +4 -3
  98. data/lib/sisimai/rhost/outlook.rb +36 -0
  99. data/lib/sisimai/rhost/spectrum.rb +3 -2
  100. data/lib/sisimai/rhost/tencent.rb +3 -2
  101. data/lib/sisimai/rhost/yahooinc.rb +4 -3
  102. data/lib/sisimai/rhost.rb +69 -39
  103. data/lib/sisimai/smtp/command.rb +31 -21
  104. data/lib/sisimai/smtp/failure.rb +103 -0
  105. data/lib/sisimai/smtp/reply.rb +29 -25
  106. data/lib/sisimai/smtp/status.rb +36 -19
  107. data/lib/sisimai/smtp/transcript.rb +15 -15
  108. data/lib/sisimai/string.rb +0 -46
  109. data/lib/sisimai/version.rb +1 -1
  110. data/set-of-emails/maildir/bsd/lhost-postfix-30.eml +81 -81
  111. data/set-of-emails/maildir/bsd/{lhost-aol-03.eml → rhost-aol-03.eml} +1264 -1264
  112. data/set-of-emails/maildir/bsd/{lhost-aol-04.eml → rhost-aol-04.eml} +1260 -1260
  113. data/set-of-emails/maildir/bsd/{lhost-aol-05.eml → rhost-aol-05.eml} +105 -105
  114. data/set-of-emails/maildir/bsd/{lhost-aol-06.eml → rhost-aol-06.eml} +105 -105
  115. data/set-of-emails/maildir/bsd/rhost-gsuite-01.eml +189 -0
  116. data/set-of-emails/maildir/bsd/rhost-gsuite-02.eml +180 -0
  117. data/set-of-emails/maildir/bsd/rhost-gsuite-03.eml +251 -0
  118. data/set-of-emails/maildir/bsd/rhost-gsuite-04.eml +211 -0
  119. data/set-of-emails/maildir/bsd/rhost-gsuite-05.eml +226 -0
  120. data/set-of-emails/maildir/bsd/rhost-gsuite-06.eml +257 -0
  121. data/set-of-emails/maildir/bsd/rhost-gsuite-07.eml +289 -0
  122. data/set-of-emails/maildir/bsd/rhost-gsuite-08.eml +231 -0
  123. data/set-of-emails/maildir/bsd/rhost-gsuite-09.eml +231 -0
  124. data/set-of-emails/maildir/bsd/rhost-gsuite-10.eml +254 -0
  125. data/set-of-emails/maildir/bsd/rhost-gsuite-11.eml +228 -0
  126. data/set-of-emails/maildir/bsd/rhost-gsuite-12.eml +271 -0
  127. data/set-of-emails/maildir/bsd/rhost-gsuite-13.eml +261 -0
  128. data/set-of-emails/maildir/bsd/rhost-gsuite-14.eml +273 -0
  129. data/set-of-emails/maildir/bsd/rhost-gsuite-15.eml +229 -0
  130. data/set-of-emails/maildir/bsd/{lhost-messagelabs-01.eml → rhost-messagelabs-01.eml} +93 -93
  131. data/set-of-emails/maildir/bsd/rhost-outlook-01.eml +72 -0
  132. data/set-of-emails/maildir/bsd/rhost-outlook-02.eml +72 -0
  133. data/set-of-emails/maildir/bsd/rhost-outlook-03.eml +72 -0
  134. data/set-of-emails/maildir/bsd/rhost-outlook-04.eml +79 -0
  135. data/set-of-emails/maildir/bsd/rhost-outlook-06.eml +75 -0
  136. data/set-of-emails/maildir/bsd/rhost-outlook-07.eml +70 -0
  137. data/set-of-emails/maildir/bsd/rhost-outlook-08.eml +70 -0
  138. data/set-of-emails/maildir/bsd/rhost-outlook-09.eml +56 -0
  139. data/set-of-emails/maildir/tmp/arf-22.eml +49 -0
  140. data/set-of-emails/maildir/tmp/arf-23.eml +49 -0
  141. data/set-of-emails/maildir/tmp/arf-24.eml +50 -0
  142. data/set-of-emails/maildir/tmp/lhost-exim-07.eml +28 -0
  143. metadata +73 -56
  144. data/lib/sisimai/lhost/amavis.rb +0 -163
  145. data/lib/sisimai/lhost/amazonworkmail.rb +0 -127
  146. data/lib/sisimai/lhost/aol.rb +0 -125
  147. data/lib/sisimai/lhost/barracuda.rb +0 -92
  148. data/lib/sisimai/lhost/bigfoot.rb +0 -125
  149. data/lib/sisimai/lhost/facebook.rb +0 -188
  150. data/lib/sisimai/lhost/gsuite.rb +0 -194
  151. data/lib/sisimai/lhost/mailru.rb +0 -214
  152. data/lib/sisimai/lhost/mcafee.rb +0 -109
  153. data/lib/sisimai/lhost/messagelabs.rb +0 -120
  154. data/lib/sisimai/lhost/mxlogic.rb +0 -198
  155. data/lib/sisimai/lhost/office365.rb +0 -252
  156. data/lib/sisimai/lhost/outlook.rb +0 -129
  157. data/lib/sisimai/lhost/powermta.rb +0 -118
  158. data/lib/sisimai/lhost/receivingses.rb +0 -126
  159. data/lib/sisimai/lhost/sendgrid.rb +0 -150
  160. data/lib/sisimai/lhost/surfcontrol.rb +0 -105
  161. data/lib/sisimai/lhost/x4.rb +0 -269
  162. data/lib/sisimai/lhost/x5.rb +0 -112
  163. data/lib/sisimai/lhost/yahoo.rb +0 -102
  164. data/lib/sisimai/lhost/yandex.rb +0 -118
  165. data/lib/sisimai/mda.rb +0 -121
  166. data/lib/sisimai/smtp/error.rb +0 -119
  167. /data/set-of-emails/maildir/bsd/{lhost-googlegroups-15.eml → lhost-googleworkspace-01.eml} +0 -0
  168. /data/set-of-emails/maildir/bsd/{lhost-x4-08.eml → lhost-x2-06.eml} +0 -0
  169. /data/set-of-emails/maildir/bsd/{lhost-gsuite-01.eml → rfc3464-51.eml} +0 -0
  170. /data/set-of-emails/maildir/bsd/{lhost-gsuite-03.eml → rfc3464-52.eml} +0 -0
  171. /data/set-of-emails/maildir/bsd/{lhost-gsuite-04.eml → rfc3464-53.eml} +0 -0
  172. /data/set-of-emails/maildir/bsd/{lhost-gsuite-05.eml → rfc3464-54.eml} +0 -0
  173. /data/set-of-emails/maildir/bsd/{lhost-gsuite-06.eml → rfc3464-55.eml} +0 -0
  174. /data/set-of-emails/maildir/bsd/{lhost-gsuite-07.eml → rfc3464-56.eml} +0 -0
  175. /data/set-of-emails/maildir/bsd/{lhost-gsuite-08.eml → rfc3464-57.eml} +0 -0
  176. /data/set-of-emails/maildir/bsd/{lhost-gsuite-09.eml → rfc3464-58.eml} +0 -0
  177. /data/set-of-emails/maildir/bsd/{lhost-gsuite-10.eml → rfc3464-59.eml} +0 -0
  178. /data/set-of-emails/maildir/bsd/{lhost-gsuite-11.eml → rfc3464-60.eml} +0 -0
  179. /data/set-of-emails/maildir/bsd/{lhost-gsuite-12.eml → rfc3464-61.eml} +0 -0
  180. /data/set-of-emails/maildir/bsd/{lhost-gsuite-13.eml → rfc3464-62.eml} +0 -0
  181. /data/set-of-emails/maildir/bsd/{lhost-gsuite-14.eml → rfc3464-63.eml} +0 -0
  182. /data/set-of-emails/maildir/bsd/{lhost-gsuite-15.eml → rfc3464-64.eml} +0 -0
  183. /data/set-of-emails/maildir/bsd/{lhost-gsuite-02.eml → rfc3464-65.eml} +0 -0
  184. /data/set-of-emails/maildir/bsd/{lhost-aol-01.eml → rhost-aol-01.eml} +0 -0
  185. /data/set-of-emails/maildir/bsd/{lhost-aol-02.eml → rhost-aol-02.eml} +0 -0
  186. /data/set-of-emails/maildir/bsd/{lhost-facebook-03.eml → rhost-facebook-03.eml} +0 -0
  187. /data/set-of-emails/maildir/bsd/{lhost-facebook-04.eml → rhost-facebook-04.eml} +0 -0
  188. /data/set-of-emails/maildir/bsd/{lhost-messagelabs-02.eml → rhost-messagelabs-02.eml} +0 -0
  189. /data/set-of-emails/maildir/bsd/{lhost-messagelabs-03.eml → rhost-messagelabs-03.eml} +0 -0
  190. /data/set-of-emails/maildir/{bsd → tmp}/rfc3464-37.eml +0 -0
  191. /data/set-of-emails/maildir/{bsd → tmp}/rfc3464-38.eml +0 -0
  192. /data/set-of-emails/maildir/{bsd → tmp}/rfc3464-39.eml +0 -0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sisimai
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.2.0
5
5
  platform: java
6
6
  authors:
7
7
  - azumakuniyuki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-01 00:00:00.000000000 Z
11
+ date: 2025-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -106,15 +106,11 @@ files:
106
106
  - lib/sisimai/fact.rb
107
107
  - lib/sisimai/fact/json.rb
108
108
  - lib/sisimai/fact/yaml.rb
109
+ - lib/sisimai/lda.rb
109
110
  - lib/sisimai/lhost.rb
110
111
  - lib/sisimai/lhost/activehunter.rb
111
- - lib/sisimai/lhost/amavis.rb
112
112
  - lib/sisimai/lhost/amazonses.rb
113
- - lib/sisimai/lhost/amazonworkmail.rb
114
- - lib/sisimai/lhost/aol.rb
115
113
  - lib/sisimai/lhost/apachejames.rb
116
- - lib/sisimai/lhost/barracuda.rb
117
- - lib/sisimai/lhost/bigfoot.rb
118
114
  - lib/sisimai/lhost/biglobe.rb
119
115
  - lib/sisimai/lhost/courier.rb
120
116
  - lib/sisimai/lhost/domino.rb
@@ -124,51 +120,35 @@ files:
124
120
  - lib/sisimai/lhost/exchange2007.rb
125
121
  - lib/sisimai/lhost/exim.rb
126
122
  - lib/sisimai/lhost/ezweb.rb
127
- - lib/sisimai/lhost/facebook.rb
128
123
  - lib/sisimai/lhost/fml.rb
129
124
  - lib/sisimai/lhost/gmail.rb
130
125
  - lib/sisimai/lhost/gmx.rb
131
126
  - lib/sisimai/lhost/googlegroups.rb
132
- - lib/sisimai/lhost/gsuite.rb
127
+ - lib/sisimai/lhost/googleworkspace.rb
133
128
  - lib/sisimai/lhost/imailserver.rb
134
129
  - lib/sisimai/lhost/interscanmss.rb
135
130
  - lib/sisimai/lhost/kddi.rb
136
131
  - lib/sisimai/lhost/mailfoundry.rb
137
132
  - lib/sisimai/lhost/mailmarshalsmtp.rb
138
- - lib/sisimai/lhost/mailru.rb
139
- - lib/sisimai/lhost/mcafee.rb
140
- - lib/sisimai/lhost/messagelabs.rb
141
133
  - lib/sisimai/lhost/messagingserver.rb
142
134
  - lib/sisimai/lhost/mfilter.rb
143
- - lib/sisimai/lhost/mxlogic.rb
144
135
  - lib/sisimai/lhost/notes.rb
145
- - lib/sisimai/lhost/office365.rb
146
136
  - lib/sisimai/lhost/opensmtpd.rb
147
- - lib/sisimai/lhost/outlook.rb
148
137
  - lib/sisimai/lhost/postfix.rb
149
- - lib/sisimai/lhost/powermta.rb
150
138
  - lib/sisimai/lhost/qmail.rb
151
- - lib/sisimai/lhost/receivingses.rb
152
- - lib/sisimai/lhost/sendgrid.rb
153
139
  - lib/sisimai/lhost/sendmail.rb
154
- - lib/sisimai/lhost/surfcontrol.rb
155
140
  - lib/sisimai/lhost/v5sendmail.rb
156
141
  - lib/sisimai/lhost/verizon.rb
157
142
  - lib/sisimai/lhost/x1.rb
158
143
  - lib/sisimai/lhost/x2.rb
159
144
  - lib/sisimai/lhost/x3.rb
160
- - lib/sisimai/lhost/x4.rb
161
- - lib/sisimai/lhost/x5.rb
162
145
  - lib/sisimai/lhost/x6.rb
163
- - lib/sisimai/lhost/yahoo.rb
164
- - lib/sisimai/lhost/yandex.rb
165
146
  - lib/sisimai/lhost/zoho.rb
166
147
  - lib/sisimai/mail.rb
167
148
  - lib/sisimai/mail/maildir.rb
168
149
  - lib/sisimai/mail/mbox.rb
169
150
  - lib/sisimai/mail/memory.rb
170
151
  - lib/sisimai/mail/stdin.rb
171
- - lib/sisimai/mda.rb
172
152
  - lib/sisimai/message.rb
173
153
  - lib/sisimai/order.rb
174
154
  - lib/sisimai/reason.rb
@@ -179,6 +159,7 @@ files:
179
159
  - lib/sisimai/reason/delivered.rb
180
160
  - lib/sisimai/reason/exceedlimit.rb
181
161
  - lib/sisimai/reason/expired.rb
162
+ - lib/sisimai/reason/failedstarttls.rb
182
163
  - lib/sisimai/reason/feedback.rb
183
164
  - lib/sisimai/reason/filtered.rb
184
165
  - lib/sisimai/reason/hasmoved.rb
@@ -197,6 +178,7 @@ files:
197
178
  - lib/sisimai/reason/securityerror.rb
198
179
  - lib/sisimai/reason/spamdetected.rb
199
180
  - lib/sisimai/reason/speeding.rb
181
+ - lib/sisimai/reason/suppressed.rb
200
182
  - lib/sisimai/reason/suspend.rb
201
183
  - lib/sisimai/reason/syntaxerror.rb
202
184
  - lib/sisimai/reason/systemerror.rb
@@ -206,29 +188,37 @@ files:
206
188
  - lib/sisimai/reason/userunknown.rb
207
189
  - lib/sisimai/reason/vacation.rb
208
190
  - lib/sisimai/reason/virusdetected.rb
191
+ - lib/sisimai/rfc1123.rb
209
192
  - lib/sisimai/rfc1894.rb
210
193
  - lib/sisimai/rfc2045.rb
211
194
  - lib/sisimai/rfc3464.rb
195
+ - lib/sisimai/rfc3464/thirdparty.rb
212
196
  - lib/sisimai/rfc3834.rb
213
197
  - lib/sisimai/rfc5322.rb
214
198
  - lib/sisimai/rfc5965.rb
199
+ - lib/sisimai/rfc791.rb
215
200
  - lib/sisimai/rhost.rb
201
+ - lib/sisimai/rhost/aol.rb
216
202
  - lib/sisimai/rhost/apple.rb
217
203
  - lib/sisimai/rhost/cox.rb
204
+ - lib/sisimai/rhost/facebook.rb
218
205
  - lib/sisimai/rhost/franceptt.rb
219
206
  - lib/sisimai/rhost/godaddy.rb
220
207
  - lib/sisimai/rhost/google.rb
208
+ - lib/sisimai/rhost/gsuite.rb
221
209
  - lib/sisimai/rhost/iua.rb
222
210
  - lib/sisimai/rhost/kddi.rb
211
+ - lib/sisimai/rhost/messagelabs.rb
223
212
  - lib/sisimai/rhost/microsoft.rb
224
213
  - lib/sisimai/rhost/mimecast.rb
225
214
  - lib/sisimai/rhost/nttdocomo.rb
215
+ - lib/sisimai/rhost/outlook.rb
226
216
  - lib/sisimai/rhost/spectrum.rb
227
217
  - lib/sisimai/rhost/tencent.rb
228
218
  - lib/sisimai/rhost/yahooinc.rb
229
219
  - lib/sisimai/smtp.rb
230
220
  - lib/sisimai/smtp/command.rb
231
- - lib/sisimai/smtp/error.rb
221
+ - lib/sisimai/smtp/failure.rb
232
222
  - lib/sisimai/smtp/reply.rb
233
223
  - lib/sisimai/smtp/status.rb
234
224
  - lib/sisimai/smtp/transcript.rb
@@ -287,12 +277,6 @@ files:
287
277
  - set-of-emails/maildir/bsd/lhost-amazonworkmail-05.eml
288
278
  - set-of-emails/maildir/bsd/lhost-amazonworkmail-07.eml
289
279
  - set-of-emails/maildir/bsd/lhost-amazonworkmail-08.eml
290
- - set-of-emails/maildir/bsd/lhost-aol-01.eml
291
- - set-of-emails/maildir/bsd/lhost-aol-02.eml
292
- - set-of-emails/maildir/bsd/lhost-aol-03.eml
293
- - set-of-emails/maildir/bsd/lhost-aol-04.eml
294
- - set-of-emails/maildir/bsd/lhost-aol-05.eml
295
- - set-of-emails/maildir/bsd/lhost-aol-06.eml
296
280
  - set-of-emails/maildir/bsd/lhost-apachejames-01.eml
297
281
  - set-of-emails/maildir/bsd/lhost-barracuda-01.eml
298
282
  - set-of-emails/maildir/bsd/lhost-barracuda-02.eml
@@ -398,8 +382,6 @@ files:
398
382
  - set-of-emails/maildir/bsd/lhost-ezweb-05.eml
399
383
  - set-of-emails/maildir/bsd/lhost-ezweb-07.eml
400
384
  - set-of-emails/maildir/bsd/lhost-ezweb-08.eml
401
- - set-of-emails/maildir/bsd/lhost-facebook-03.eml
402
- - set-of-emails/maildir/bsd/lhost-facebook-04.eml
403
385
  - set-of-emails/maildir/bsd/lhost-fml-02.eml
404
386
  - set-of-emails/maildir/bsd/lhost-fml-03.eml
405
387
  - set-of-emails/maildir/bsd/lhost-gmail-01.eml
@@ -435,22 +417,7 @@ files:
435
417
  - set-of-emails/maildir/bsd/lhost-googlegroups-12.eml
436
418
  - set-of-emails/maildir/bsd/lhost-googlegroups-13.eml
437
419
  - set-of-emails/maildir/bsd/lhost-googlegroups-14.eml
438
- - set-of-emails/maildir/bsd/lhost-googlegroups-15.eml
439
- - set-of-emails/maildir/bsd/lhost-gsuite-01.eml
440
- - set-of-emails/maildir/bsd/lhost-gsuite-02.eml
441
- - set-of-emails/maildir/bsd/lhost-gsuite-03.eml
442
- - set-of-emails/maildir/bsd/lhost-gsuite-04.eml
443
- - set-of-emails/maildir/bsd/lhost-gsuite-05.eml
444
- - set-of-emails/maildir/bsd/lhost-gsuite-06.eml
445
- - set-of-emails/maildir/bsd/lhost-gsuite-07.eml
446
- - set-of-emails/maildir/bsd/lhost-gsuite-08.eml
447
- - set-of-emails/maildir/bsd/lhost-gsuite-09.eml
448
- - set-of-emails/maildir/bsd/lhost-gsuite-10.eml
449
- - set-of-emails/maildir/bsd/lhost-gsuite-11.eml
450
- - set-of-emails/maildir/bsd/lhost-gsuite-12.eml
451
- - set-of-emails/maildir/bsd/lhost-gsuite-13.eml
452
- - set-of-emails/maildir/bsd/lhost-gsuite-14.eml
453
- - set-of-emails/maildir/bsd/lhost-gsuite-15.eml
420
+ - set-of-emails/maildir/bsd/lhost-googleworkspace-01.eml
454
421
  - set-of-emails/maildir/bsd/lhost-imailserver-01.eml
455
422
  - set-of-emails/maildir/bsd/lhost-imailserver-02.eml
456
423
  - set-of-emails/maildir/bsd/lhost-imailserver-03.eml
@@ -480,9 +447,6 @@ files:
480
447
  - set-of-emails/maildir/bsd/lhost-mcafee-03.eml
481
448
  - set-of-emails/maildir/bsd/lhost-mcafee-04.eml
482
449
  - set-of-emails/maildir/bsd/lhost-mcafee-05.eml
483
- - set-of-emails/maildir/bsd/lhost-messagelabs-01.eml
484
- - set-of-emails/maildir/bsd/lhost-messagelabs-02.eml
485
- - set-of-emails/maildir/bsd/lhost-messagelabs-03.eml
486
450
  - set-of-emails/maildir/bsd/lhost-messagingserver-01.eml
487
451
  - set-of-emails/maildir/bsd/lhost-messagingserver-02.eml
488
452
  - set-of-emails/maildir/bsd/lhost-messagingserver-03.eml
@@ -724,13 +688,13 @@ files:
724
688
  - set-of-emails/maildir/bsd/lhost-x2-03.eml
725
689
  - set-of-emails/maildir/bsd/lhost-x2-04.eml
726
690
  - set-of-emails/maildir/bsd/lhost-x2-05.eml
691
+ - set-of-emails/maildir/bsd/lhost-x2-06.eml
727
692
  - set-of-emails/maildir/bsd/lhost-x3-01.eml
728
693
  - set-of-emails/maildir/bsd/lhost-x3-02.eml
729
694
  - set-of-emails/maildir/bsd/lhost-x3-03.eml
730
695
  - set-of-emails/maildir/bsd/lhost-x3-05.eml
731
696
  - set-of-emails/maildir/bsd/lhost-x3-06.eml
732
697
  - set-of-emails/maildir/bsd/lhost-x4-01.eml
733
- - set-of-emails/maildir/bsd/lhost-x4-08.eml
734
698
  - set-of-emails/maildir/bsd/lhost-x5-01.eml
735
699
  - set-of-emails/maildir/bsd/lhost-x6-01.eml
736
700
  - set-of-emails/maildir/bsd/lhost-x6-02.eml
@@ -770,22 +734,42 @@ files:
770
734
  - set-of-emails/maildir/bsd/rfc3464-34.eml
771
735
  - set-of-emails/maildir/bsd/rfc3464-35.eml
772
736
  - set-of-emails/maildir/bsd/rfc3464-36.eml
773
- - set-of-emails/maildir/bsd/rfc3464-37.eml
774
- - set-of-emails/maildir/bsd/rfc3464-38.eml
775
- - set-of-emails/maildir/bsd/rfc3464-39.eml
776
737
  - set-of-emails/maildir/bsd/rfc3464-40.eml
777
738
  - set-of-emails/maildir/bsd/rfc3464-42.eml
778
739
  - set-of-emails/maildir/bsd/rfc3464-43.eml
740
+ - set-of-emails/maildir/bsd/rfc3464-51.eml
741
+ - set-of-emails/maildir/bsd/rfc3464-52.eml
742
+ - set-of-emails/maildir/bsd/rfc3464-53.eml
743
+ - set-of-emails/maildir/bsd/rfc3464-54.eml
744
+ - set-of-emails/maildir/bsd/rfc3464-55.eml
745
+ - set-of-emails/maildir/bsd/rfc3464-56.eml
746
+ - set-of-emails/maildir/bsd/rfc3464-57.eml
747
+ - set-of-emails/maildir/bsd/rfc3464-58.eml
748
+ - set-of-emails/maildir/bsd/rfc3464-59.eml
749
+ - set-of-emails/maildir/bsd/rfc3464-60.eml
750
+ - set-of-emails/maildir/bsd/rfc3464-61.eml
751
+ - set-of-emails/maildir/bsd/rfc3464-62.eml
752
+ - set-of-emails/maildir/bsd/rfc3464-63.eml
753
+ - set-of-emails/maildir/bsd/rfc3464-64.eml
754
+ - set-of-emails/maildir/bsd/rfc3464-65.eml
779
755
  - set-of-emails/maildir/bsd/rfc3834-01.eml
780
756
  - set-of-emails/maildir/bsd/rfc3834-02.eml
781
757
  - set-of-emails/maildir/bsd/rfc3834-03.eml
782
758
  - set-of-emails/maildir/bsd/rfc3834-04.eml
783
759
  - set-of-emails/maildir/bsd/rfc3834-05.eml
760
+ - set-of-emails/maildir/bsd/rhost-aol-01.eml
761
+ - set-of-emails/maildir/bsd/rhost-aol-02.eml
762
+ - set-of-emails/maildir/bsd/rhost-aol-03.eml
763
+ - set-of-emails/maildir/bsd/rhost-aol-04.eml
764
+ - set-of-emails/maildir/bsd/rhost-aol-05.eml
765
+ - set-of-emails/maildir/bsd/rhost-aol-06.eml
784
766
  - set-of-emails/maildir/bsd/rhost-apple-01.eml
785
767
  - set-of-emails/maildir/bsd/rhost-apple-02.eml
786
768
  - set-of-emails/maildir/bsd/rhost-apple-03.eml
787
769
  - set-of-emails/maildir/bsd/rhost-apple-04.eml
788
770
  - set-of-emails/maildir/bsd/rhost-cox-01.eml
771
+ - set-of-emails/maildir/bsd/rhost-facebook-03.eml
772
+ - set-of-emails/maildir/bsd/rhost-facebook-04.eml
789
773
  - set-of-emails/maildir/bsd/rhost-franceptt-01.eml
790
774
  - set-of-emails/maildir/bsd/rhost-franceptt-02.eml
791
775
  - set-of-emails/maildir/bsd/rhost-franceptt-03.eml
@@ -807,9 +791,27 @@ files:
807
791
  - set-of-emails/maildir/bsd/rhost-google-06.eml
808
792
  - set-of-emails/maildir/bsd/rhost-google-07.eml
809
793
  - set-of-emails/maildir/bsd/rhost-google-08.eml
794
+ - set-of-emails/maildir/bsd/rhost-gsuite-01.eml
795
+ - set-of-emails/maildir/bsd/rhost-gsuite-02.eml
796
+ - set-of-emails/maildir/bsd/rhost-gsuite-03.eml
797
+ - set-of-emails/maildir/bsd/rhost-gsuite-04.eml
798
+ - set-of-emails/maildir/bsd/rhost-gsuite-05.eml
799
+ - set-of-emails/maildir/bsd/rhost-gsuite-06.eml
800
+ - set-of-emails/maildir/bsd/rhost-gsuite-07.eml
801
+ - set-of-emails/maildir/bsd/rhost-gsuite-08.eml
802
+ - set-of-emails/maildir/bsd/rhost-gsuite-09.eml
803
+ - set-of-emails/maildir/bsd/rhost-gsuite-10.eml
804
+ - set-of-emails/maildir/bsd/rhost-gsuite-11.eml
805
+ - set-of-emails/maildir/bsd/rhost-gsuite-12.eml
806
+ - set-of-emails/maildir/bsd/rhost-gsuite-13.eml
807
+ - set-of-emails/maildir/bsd/rhost-gsuite-14.eml
808
+ - set-of-emails/maildir/bsd/rhost-gsuite-15.eml
810
809
  - set-of-emails/maildir/bsd/rhost-iua-01.eml
811
810
  - set-of-emails/maildir/bsd/rhost-kddi-01.eml
812
811
  - set-of-emails/maildir/bsd/rhost-kddi-02.eml
812
+ - set-of-emails/maildir/bsd/rhost-messagelabs-01.eml
813
+ - set-of-emails/maildir/bsd/rhost-messagelabs-02.eml
814
+ - set-of-emails/maildir/bsd/rhost-messagelabs-03.eml
813
815
  - set-of-emails/maildir/bsd/rhost-microsoft-01.eml
814
816
  - set-of-emails/maildir/bsd/rhost-microsoft-02.eml
815
817
  - set-of-emails/maildir/bsd/rhost-microsoft-03.eml
@@ -820,6 +822,14 @@ files:
820
822
  - set-of-emails/maildir/bsd/rhost-nttdocomo-01.eml
821
823
  - set-of-emails/maildir/bsd/rhost-nttdocomo-02.eml
822
824
  - set-of-emails/maildir/bsd/rhost-nttdocomo-03.eml
825
+ - set-of-emails/maildir/bsd/rhost-outlook-01.eml
826
+ - set-of-emails/maildir/bsd/rhost-outlook-02.eml
827
+ - set-of-emails/maildir/bsd/rhost-outlook-03.eml
828
+ - set-of-emails/maildir/bsd/rhost-outlook-04.eml
829
+ - set-of-emails/maildir/bsd/rhost-outlook-06.eml
830
+ - set-of-emails/maildir/bsd/rhost-outlook-07.eml
831
+ - set-of-emails/maildir/bsd/rhost-outlook-08.eml
832
+ - set-of-emails/maildir/bsd/rhost-outlook-09.eml
823
833
  - set-of-emails/maildir/bsd/rhost-spectrum-01.eml
824
834
  - set-of-emails/maildir/bsd/rhost-tencent-01.eml
825
835
  - set-of-emails/maildir/bsd/rhost-tencent-02.eml
@@ -994,6 +1004,13 @@ files:
994
1004
  - set-of-emails/maildir/mac/rhost-tencentqq-01.eml
995
1005
  - set-of-emails/maildir/not/is-not-bounce-01.eml
996
1006
  - set-of-emails/maildir/not/is-not-bounce-02.eml
1007
+ - set-of-emails/maildir/tmp/arf-22.eml
1008
+ - set-of-emails/maildir/tmp/arf-23.eml
1009
+ - set-of-emails/maildir/tmp/arf-24.eml
1010
+ - set-of-emails/maildir/tmp/lhost-exim-07.eml
1011
+ - set-of-emails/maildir/tmp/rfc3464-37.eml
1012
+ - set-of-emails/maildir/tmp/rfc3464-38.eml
1013
+ - set-of-emails/maildir/tmp/rfc3464-39.eml
997
1014
  - set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-01.eml
998
1015
  - set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-02.eml
999
1016
  - set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-03.eml
@@ -1,163 +0,0 @@
1
- module Sisimai::Lhost
2
- # Sisimai::Lhost::Amavis decodes a bounce email which created by amavsid-new.
3
- # Methods in the module are called from only Sisimai::Message.
4
- module Amavis
5
- class << self
6
- require 'sisimai/lhost'
7
-
8
- Indicators = Sisimai::Lhost.INDICATORS
9
- Boundaries = ['Content-Type: text/rfc822-headers'].freeze
10
- StartingOf = { message: ['The message '] }.freeze
11
- MessagesOf = {
12
- # amavisd-new-2.11.1/amavisd:1840|%smtp_reason_by_ccat = (
13
- # amavisd-new-2.11.1/amavisd:1840| # currently only used for blocked messages only, status 5xx
14
- # amavisd-new-2.11.1/amavisd:1840| # a multiline message will produce a valid multiline SMTP response
15
- # amavisd-new-2.11.1/amavisd:1840| CC_VIRUS, 'id=%n - INFECTED: %V',
16
- # amavisd-new-2.11.1/amavisd:1840| CC_BANNED, 'id=%n - BANNED: %F',
17
- # amavisd-new-2.11.1/amavisd:1840| CC_UNCHECKED.',1', 'id=%n - UNCHECKED: encrypted',
18
- # amavisd-new-2.11.1/amavisd:1840| CC_UNCHECKED.',2', 'id=%n - UNCHECKED: over limits',
19
- # amavisd-new-2.11.1/amavisd:1840| CC_UNCHECKED, 'id=%n - UNCHECKED',
20
- # amavisd-new-2.11.1/amavisd:1840| CC_SPAM, 'id=%n - spam',
21
- # amavisd-new-2.11.1/amavisd:1840| CC_SPAMMY.',1', 'id=%n - spammy (tag3)',
22
- # amavisd-new-2.11.1/amavisd:1840| CC_SPAMMY, 'id=%n - spammy',
23
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH.',1', 'id=%n - BAD HEADER: MIME error',
24
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH.',2', 'id=%n - BAD HEADER: nonencoded 8-bit character',
25
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH.',3', 'id=%n - BAD HEADER: contains invalid control character',
26
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH.',4', 'id=%n - BAD HEADER: line made up entirely of whitespace',
27
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH.',5', 'id=%n - BAD HEADER: line longer than RFC 5322 limit',
28
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH.',6', 'id=%n - BAD HEADER: syntax error',
29
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH.',7', 'id=%n - BAD HEADER: missing required header field',
30
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH.',8', 'id=%n - BAD HEADER: duplicate header field',
31
- # amavisd-new-2.11.1/amavisd:1840| CC_BADH, 'id=%n - BAD HEADER',
32
- # amavisd-new-2.11.1/amavisd:1840| CC_OVERSIZED, 'id=%n - Message size exceeds recipient\'s size limit',
33
- # amavisd-new-2.11.1/amavisd:1840| CC_MTA.',1', 'id=%n - Temporary MTA failure on relaying',
34
- # amavisd-new-2.11.1/amavisd:1840| CC_MTA.',2', 'id=%n - Rejected by next-hop MTA on relaying',
35
- # amavisd-new-2.11.1/amavisd:1840| CC_MTA, 'id=%n - Unable to relay message back to MTA',
36
- # amavisd-new-2.11.1/amavisd:1840| CC_CLEAN, 'id=%n - CLEAN',
37
- # amavisd-new-2.11.1/amavisd:1840| CC_CATCHALL, 'id=%n - OTHER', # should not happen
38
- # ...
39
- # amavisd-new-2.11.1/amavisd:15289|my $status = setting_by_given_contents_category(
40
- # amavisd-new-2.11.1/amavisd:15289| $blocking_ccat,
41
- # amavisd-new-2.11.1/amavisd:15289| { CC_VIRUS, "554 5.7.0",
42
- # amavisd-new-2.11.1/amavisd:15289| CC_BANNED, "554 5.7.0",
43
- # amavisd-new-2.11.1/amavisd:15289| CC_UNCHECKED, "554 5.7.0",
44
- # amavisd-new-2.11.1/amavisd:15289| CC_SPAM, "554 5.7.0",
45
- # amavisd-new-2.11.1/amavisd:15289| CC_SPAMMY, "554 5.7.0",
46
- # amavisd-new-2.11.1/amavisd:15289| CC_BADH.",2", "554 5.6.3", # nonencoded 8-bit character
47
- # amavisd-new-2.11.1/amavisd:15289| CC_BADH, "554 5.6.0",
48
- # amavisd-new-2.11.1/amavisd:15289| CC_OVERSIZED, "552 5.3.4",
49
- # amavisd-new-2.11.1/amavisd:15289| CC_MTA, "550 5.3.5",
50
- # amavisd-new-2.11.1/amavisd:15289| CC_CATCHALL, "554 5.7.0",
51
- # amavisd-new-2.11.1/amavisd:15289| });
52
- # ...
53
- # amavisd-new-2.11.1/amavisd:15332|my $response = sprintf("%s %s%s%s", $status,
54
- # amavisd-new-2.11.1/amavisd:15333| ($final_destiny == D_PASS ? "Ok" :
55
- # amavisd-new-2.11.1/amavisd:15334| $final_destiny == D_DISCARD ? "Ok, discarded" :
56
- # amavisd-new-2.11.1/amavisd:15335| $final_destiny == D_REJECT ? "Reject" :
57
- # amavisd-new-2.11.1/amavisd:15336| $final_destiny == D_BOUNCE ? "Bounce" :
58
- # amavisd-new-2.11.1/amavisd:15337| $final_destiny == D_TEMPFAIL ? "Temporary failure" :
59
- # amavisd-new-2.11.1/amavisd:15338| "Not ok ($final_destiny)" ),
60
- 'spamdetected' => [' - spam'],
61
- 'virusdetected' => [' - infected'],
62
- 'contenterror' => [' - bad header:'],
63
- 'exceedlimit' => [' - message size exceeds recipient'],
64
- 'systemerror' => [
65
- ' - temporary mta failure on relaying',
66
- ' - rejected by next-hop mta on relaying',
67
- ' - unable to relay message back to mta',
68
- ],
69
- }.freeze
70
-
71
- # @abstract Decodes the bounce message from amavisd-new
72
- # @param [Hash] mhead Message headers of a bounce email
73
- # @param [String] mbody Message body of a bounce email
74
- # @return [Hash] Bounce data list and message/rfc822 part
75
- # @return [Nil] it failed to decode or the arguments are missing
76
- # @since v4.25.0
77
- def inquire(mhead, mbody)
78
- # From: "Content-filter at neko1.example.jp" <postmaster@neko1.example.jp>
79
- # Subject: Undeliverable mail, MTA-BLOCKED
80
- return nil unless mhead['from'].to_s.start_with?('"Content-filter at ')
81
-
82
- fieldtable = Sisimai::RFC1894.FIELDTABLE
83
- permessage = {} # (Hash) Store values of each Per-Message field
84
-
85
- dscontents = [Sisimai::Lhost.DELIVERYSTATUS]
86
- emailparts = Sisimai::RFC5322.part(mbody, Boundaries)
87
- bodyslices = emailparts[0].split("\n")
88
- readcursor = 0 # (Integer) Points the current cursor position
89
- recipients = 0 # (Integer) The number of 'Final-Recipient' header
90
- v = nil
91
-
92
- while e = bodyslices.shift do
93
- # Read error messages and delivery status lines from the head of the email to the previous
94
- # line of the beginning of the original message.
95
-
96
- if readcursor == 0
97
- # Beginning of the bounce message or message/delivery-status part
98
- readcursor |= Indicators[:deliverystatus] if e.start_with?(StartingOf[:message][0])
99
- next
100
- end
101
- next if (readcursor & Indicators[:deliverystatus]) == 0
102
- next if e.empty?
103
- next unless f = Sisimai::RFC1894.match(e)
104
-
105
- # "e" matched with any field defined in RFC3464
106
- next unless o = Sisimai::RFC1894.field(e)
107
- v = dscontents[-1]
108
-
109
- if o[-1] == 'addr'
110
- # Final-Recipient: rfc822; kijitora@example.jp
111
- # X-Actual-Recipient: rfc822; kijitora@example.co.jp
112
- if o[0] == 'final-recipient'
113
- # Final-Recipient: rfc822; kijitora@example.jp
114
- if v['recipient']
115
- # There are multiple recipient addresses in the message body.
116
- dscontents << Sisimai::Lhost.DELIVERYSTATUS
117
- v = dscontents[-1]
118
- end
119
- v['recipient'] = o[2]
120
- recipients += 1
121
- else
122
- # X-Actual-Recipient: rfc822; kijitora@example.co.jp
123
- v['alias'] = o[2]
124
- end
125
- elsif o[-1] == 'code'
126
- # Diagnostic-Code: SMTP; 550 5.1.1 <userunknown@example.jp>... User Unknown
127
- v['spec'] = o[1]
128
- v['diagnosis'] = o[2]
129
- else
130
- # Other DSN fields defined in RFC3464
131
- next unless fieldtable[o[0]]
132
- v[fieldtable[o[0]]] = o[2]
133
-
134
- next unless f
135
- permessage[fieldtable[o[0]]] = o[2]
136
- end
137
- end
138
- return nil unless recipients > 0
139
-
140
- dscontents.each do |e|
141
- # Set default values if each value is empty.
142
- permessage.each_key { |a| e[a] ||= permessage[a] || '' }
143
- e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'].to_s.tr("\n", ' '))
144
- q = e['diagnosis'].downcase
145
- catch :DETECT_REASON do
146
- MessagesOf.each_key do |p|
147
- # Try to detect an error reason
148
- MessagesOf[p].each do |r|
149
- # Try to find an error message including lower-cased string defined in MessagesOf constant
150
- next unless q.include?(r)
151
- e['reason'] = p
152
- throw :DETECT_REASON
153
- end
154
- end
155
- end
156
- end
157
- return { 'ds' => dscontents, 'rfc822' => emailparts[1] }
158
- end
159
- def description; return 'amavisd-new: https://www.amavis.org/'; end
160
- end
161
- end
162
- end
163
-
@@ -1,127 +0,0 @@
1
- module Sisimai::Lhost
2
- # Sisimai::Lhost::AmazonWorkMail decodes a bounce email which created by Amazon WorkMail https://aws.amazon.com/workmail/.
3
- # Methods in the module are called from only Sisimai::Message.
4
- module AmazonWorkMail
5
- class << self
6
- require 'sisimai/lhost'
7
-
8
- # https://aws.amazon.com/workmail/
9
- Indicators = Sisimai::Lhost.INDICATORS
10
- Boundaries = ['Content-Type: message/rfc822'].freeze
11
- StartingOf = { message: ['Technical report:'] }.freeze
12
-
13
- # @abstract Decodes the bounce message from Amazon WorkMail
14
- # @param [Hash] mhead Message headers of a bounce email
15
- # @param [String] mbody Message body of a bounce email
16
- # @return [Hash] Bounce data list and message/rfc822 part
17
- # @return [Nil] it failed to decode or the arguments are missing
18
- def inquire(mhead, mbody)
19
- # X-Mailer: Amazon WorkMail
20
- # X-Original-Mailer: Amazon WorkMail
21
- # X-Ses-Outgoing: 2016.01.14-54.240.27.159
22
- match = 0
23
- xmail = mhead['x-original-mailer'] || mhead['x-mailer'] || ''
24
-
25
- match += 1 if mhead['x-ses-outgoing']
26
- unless xmail.empty?
27
- # X-Mailer: Amazon WorkMail
28
- # X-Original-Mailer: Amazon WorkMail
29
- match += 1 if xmail == 'Amazon WorkMail'
30
- end
31
- return nil if match < 2
32
-
33
- require 'sisimai/rfc1894'
34
- fieldtable = Sisimai::RFC1894.FIELDTABLE
35
- permessage = {} # (Hash) Store values of each Per-Message field
36
-
37
- dscontents = [Sisimai::Lhost.DELIVERYSTATUS]
38
- emailparts = Sisimai::RFC5322.part(mbody, Boundaries)
39
- bodyslices = emailparts[0].split("\n")
40
- readcursor = 0 # (Integer) Points the current cursor position
41
- recipients = 0 # (Integer) The number of 'Final-Recipient' header
42
- v = nil
43
-
44
- while e = bodyslices.shift do
45
- # Read error messages and delivery status lines from the head of the email to the previous
46
- # line of the beginning of the original message.
47
-
48
- if readcursor == 0
49
- # Beginning of the bounce message or message/delivery-status part
50
- readcursor |= Indicators[:deliverystatus] if e == StartingOf[:message][0]
51
- next
52
- end
53
- next if (readcursor & Indicators[:deliverystatus]) == 0
54
- next if e.empty?
55
-
56
- if f = Sisimai::RFC1894.match(e)
57
- # "e" matched with any field defined in RFC3464
58
- o = Sisimai::RFC1894.field(e) || next
59
- v = dscontents[-1]
60
-
61
- if o[-1] == 'addr'
62
- # Final-Recipient: rfc822; kijitora@example.jp
63
- # X-Actual-Recipient: rfc822; kijitora@example.co.jp
64
- if o[0] == 'final-recipient'
65
- # Final-Recipient: rfc822; kijitora@example.jp
66
- if v['recipient']
67
- # There are multiple recipient addresses in the message body.
68
- dscontents << Sisimai::Lhost.DELIVERYSTATUS
69
- v = dscontents[-1]
70
- end
71
- v['recipient'] = o[2]
72
- recipients += 1
73
- else
74
- # X-Actual-Recipient: rfc822; kijitora@example.co.jp
75
- v['alias'] = o[2]
76
- end
77
- elsif o[-1] == 'code'
78
- # Diagnostic-Code: SMTP; 550 5.1.1 <userunknown@example.jp>... User Unknown
79
- v['spec'] = o[1]
80
- v['diagnosis'] = o[2]
81
- else
82
- # Other DSN fields defined in RFC3464
83
- next unless fieldtable[o[0]]
84
- v[fieldtable[o[0]]] = o[2]
85
-
86
- next unless f
87
- permessage[fieldtable[o[0]]] = o[2]
88
- end
89
- end
90
-
91
- # <!DOCTYPE HTML><html>
92
- # <head>
93
- # <meta name="Generator" content="Amazon WorkMail v3.0-2023.77">
94
- # <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
95
- break if e.start_with?('<!DOCTYPE HTML><html>')
96
- end
97
- return nil unless recipients > 0
98
-
99
- dscontents.each do |e|
100
- # Set default values if each value is empty.
101
- permessage.each_key { |a| e[a] ||= permessage[a] || '' }
102
-
103
- e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
104
- if e['status'].to_s.end_with?('.0.0', '.1.0')
105
- # Get other D.S.N. value from the error message
106
- errormessage = e['diagnosis']
107
-
108
- if cv = e['diagnosis'].match(/["'](\d[.]\d[.]\d.+)['"]/)
109
- # 5.1.0 - Unknown address error 550-'5.7.1 ...
110
- errormessage = cv[1]
111
- end
112
- e['status'] = Sisimai::SMTP::Status.find(errormessage) || e['status']
113
- end
114
-
115
- # 554 4.4.7 Message expired: unable to deliver in 840 minutes.
116
- # <421 4.4.2 Connection timed out>
117
- e['replycode'] = Sisimai::SMTP::Reply.find(e['diagnosis']) || ''
118
- e['reason'] ||= Sisimai::SMTP::Status.name(e['status']) || ''
119
- end
120
-
121
- return { 'ds' => dscontents, 'rfc822' => emailparts[1] }
122
- end
123
- def description; return 'Amazon WorkMail: https://aws.amazon.com/workmail/'; end
124
- end
125
- end
126
- end
127
-