sisimai 5.1.0 → 5.2.0

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: ruby
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
  name: bundler
@@ -100,15 +100,11 @@ files:
100
100
  - lib/sisimai/fact.rb
101
101
  - lib/sisimai/fact/json.rb
102
102
  - lib/sisimai/fact/yaml.rb
103
+ - lib/sisimai/lda.rb
103
104
  - lib/sisimai/lhost.rb
104
105
  - lib/sisimai/lhost/activehunter.rb
105
- - lib/sisimai/lhost/amavis.rb
106
106
  - lib/sisimai/lhost/amazonses.rb
107
- - lib/sisimai/lhost/amazonworkmail.rb
108
- - lib/sisimai/lhost/aol.rb
109
107
  - lib/sisimai/lhost/apachejames.rb
110
- - lib/sisimai/lhost/barracuda.rb
111
- - lib/sisimai/lhost/bigfoot.rb
112
108
  - lib/sisimai/lhost/biglobe.rb
113
109
  - lib/sisimai/lhost/courier.rb
114
110
  - lib/sisimai/lhost/domino.rb
@@ -118,51 +114,35 @@ files:
118
114
  - lib/sisimai/lhost/exchange2007.rb
119
115
  - lib/sisimai/lhost/exim.rb
120
116
  - lib/sisimai/lhost/ezweb.rb
121
- - lib/sisimai/lhost/facebook.rb
122
117
  - lib/sisimai/lhost/fml.rb
123
118
  - lib/sisimai/lhost/gmail.rb
124
119
  - lib/sisimai/lhost/gmx.rb
125
120
  - lib/sisimai/lhost/googlegroups.rb
126
- - lib/sisimai/lhost/gsuite.rb
121
+ - lib/sisimai/lhost/googleworkspace.rb
127
122
  - lib/sisimai/lhost/imailserver.rb
128
123
  - lib/sisimai/lhost/interscanmss.rb
129
124
  - lib/sisimai/lhost/kddi.rb
130
125
  - lib/sisimai/lhost/mailfoundry.rb
131
126
  - lib/sisimai/lhost/mailmarshalsmtp.rb
132
- - lib/sisimai/lhost/mailru.rb
133
- - lib/sisimai/lhost/mcafee.rb
134
- - lib/sisimai/lhost/messagelabs.rb
135
127
  - lib/sisimai/lhost/messagingserver.rb
136
128
  - lib/sisimai/lhost/mfilter.rb
137
- - lib/sisimai/lhost/mxlogic.rb
138
129
  - lib/sisimai/lhost/notes.rb
139
- - lib/sisimai/lhost/office365.rb
140
130
  - lib/sisimai/lhost/opensmtpd.rb
141
- - lib/sisimai/lhost/outlook.rb
142
131
  - lib/sisimai/lhost/postfix.rb
143
- - lib/sisimai/lhost/powermta.rb
144
132
  - lib/sisimai/lhost/qmail.rb
145
- - lib/sisimai/lhost/receivingses.rb
146
- - lib/sisimai/lhost/sendgrid.rb
147
133
  - lib/sisimai/lhost/sendmail.rb
148
- - lib/sisimai/lhost/surfcontrol.rb
149
134
  - lib/sisimai/lhost/v5sendmail.rb
150
135
  - lib/sisimai/lhost/verizon.rb
151
136
  - lib/sisimai/lhost/x1.rb
152
137
  - lib/sisimai/lhost/x2.rb
153
138
  - lib/sisimai/lhost/x3.rb
154
- - lib/sisimai/lhost/x4.rb
155
- - lib/sisimai/lhost/x5.rb
156
139
  - lib/sisimai/lhost/x6.rb
157
- - lib/sisimai/lhost/yahoo.rb
158
- - lib/sisimai/lhost/yandex.rb
159
140
  - lib/sisimai/lhost/zoho.rb
160
141
  - lib/sisimai/mail.rb
161
142
  - lib/sisimai/mail/maildir.rb
162
143
  - lib/sisimai/mail/mbox.rb
163
144
  - lib/sisimai/mail/memory.rb
164
145
  - lib/sisimai/mail/stdin.rb
165
- - lib/sisimai/mda.rb
166
146
  - lib/sisimai/message.rb
167
147
  - lib/sisimai/order.rb
168
148
  - lib/sisimai/reason.rb
@@ -173,6 +153,7 @@ files:
173
153
  - lib/sisimai/reason/delivered.rb
174
154
  - lib/sisimai/reason/exceedlimit.rb
175
155
  - lib/sisimai/reason/expired.rb
156
+ - lib/sisimai/reason/failedstarttls.rb
176
157
  - lib/sisimai/reason/feedback.rb
177
158
  - lib/sisimai/reason/filtered.rb
178
159
  - lib/sisimai/reason/hasmoved.rb
@@ -191,6 +172,7 @@ files:
191
172
  - lib/sisimai/reason/securityerror.rb
192
173
  - lib/sisimai/reason/spamdetected.rb
193
174
  - lib/sisimai/reason/speeding.rb
175
+ - lib/sisimai/reason/suppressed.rb
194
176
  - lib/sisimai/reason/suspend.rb
195
177
  - lib/sisimai/reason/syntaxerror.rb
196
178
  - lib/sisimai/reason/systemerror.rb
@@ -200,29 +182,37 @@ files:
200
182
  - lib/sisimai/reason/userunknown.rb
201
183
  - lib/sisimai/reason/vacation.rb
202
184
  - lib/sisimai/reason/virusdetected.rb
185
+ - lib/sisimai/rfc1123.rb
203
186
  - lib/sisimai/rfc1894.rb
204
187
  - lib/sisimai/rfc2045.rb
205
188
  - lib/sisimai/rfc3464.rb
189
+ - lib/sisimai/rfc3464/thirdparty.rb
206
190
  - lib/sisimai/rfc3834.rb
207
191
  - lib/sisimai/rfc5322.rb
208
192
  - lib/sisimai/rfc5965.rb
193
+ - lib/sisimai/rfc791.rb
209
194
  - lib/sisimai/rhost.rb
195
+ - lib/sisimai/rhost/aol.rb
210
196
  - lib/sisimai/rhost/apple.rb
211
197
  - lib/sisimai/rhost/cox.rb
198
+ - lib/sisimai/rhost/facebook.rb
212
199
  - lib/sisimai/rhost/franceptt.rb
213
200
  - lib/sisimai/rhost/godaddy.rb
214
201
  - lib/sisimai/rhost/google.rb
202
+ - lib/sisimai/rhost/gsuite.rb
215
203
  - lib/sisimai/rhost/iua.rb
216
204
  - lib/sisimai/rhost/kddi.rb
205
+ - lib/sisimai/rhost/messagelabs.rb
217
206
  - lib/sisimai/rhost/microsoft.rb
218
207
  - lib/sisimai/rhost/mimecast.rb
219
208
  - lib/sisimai/rhost/nttdocomo.rb
209
+ - lib/sisimai/rhost/outlook.rb
220
210
  - lib/sisimai/rhost/spectrum.rb
221
211
  - lib/sisimai/rhost/tencent.rb
222
212
  - lib/sisimai/rhost/yahooinc.rb
223
213
  - lib/sisimai/smtp.rb
224
214
  - lib/sisimai/smtp/command.rb
225
- - lib/sisimai/smtp/error.rb
215
+ - lib/sisimai/smtp/failure.rb
226
216
  - lib/sisimai/smtp/reply.rb
227
217
  - lib/sisimai/smtp/status.rb
228
218
  - lib/sisimai/smtp/transcript.rb
@@ -281,12 +271,6 @@ files:
281
271
  - set-of-emails/maildir/bsd/lhost-amazonworkmail-05.eml
282
272
  - set-of-emails/maildir/bsd/lhost-amazonworkmail-07.eml
283
273
  - set-of-emails/maildir/bsd/lhost-amazonworkmail-08.eml
284
- - set-of-emails/maildir/bsd/lhost-aol-01.eml
285
- - set-of-emails/maildir/bsd/lhost-aol-02.eml
286
- - set-of-emails/maildir/bsd/lhost-aol-03.eml
287
- - set-of-emails/maildir/bsd/lhost-aol-04.eml
288
- - set-of-emails/maildir/bsd/lhost-aol-05.eml
289
- - set-of-emails/maildir/bsd/lhost-aol-06.eml
290
274
  - set-of-emails/maildir/bsd/lhost-apachejames-01.eml
291
275
  - set-of-emails/maildir/bsd/lhost-barracuda-01.eml
292
276
  - set-of-emails/maildir/bsd/lhost-barracuda-02.eml
@@ -392,8 +376,6 @@ files:
392
376
  - set-of-emails/maildir/bsd/lhost-ezweb-05.eml
393
377
  - set-of-emails/maildir/bsd/lhost-ezweb-07.eml
394
378
  - set-of-emails/maildir/bsd/lhost-ezweb-08.eml
395
- - set-of-emails/maildir/bsd/lhost-facebook-03.eml
396
- - set-of-emails/maildir/bsd/lhost-facebook-04.eml
397
379
  - set-of-emails/maildir/bsd/lhost-fml-02.eml
398
380
  - set-of-emails/maildir/bsd/lhost-fml-03.eml
399
381
  - set-of-emails/maildir/bsd/lhost-gmail-01.eml
@@ -429,22 +411,7 @@ files:
429
411
  - set-of-emails/maildir/bsd/lhost-googlegroups-12.eml
430
412
  - set-of-emails/maildir/bsd/lhost-googlegroups-13.eml
431
413
  - set-of-emails/maildir/bsd/lhost-googlegroups-14.eml
432
- - set-of-emails/maildir/bsd/lhost-googlegroups-15.eml
433
- - set-of-emails/maildir/bsd/lhost-gsuite-01.eml
434
- - set-of-emails/maildir/bsd/lhost-gsuite-02.eml
435
- - set-of-emails/maildir/bsd/lhost-gsuite-03.eml
436
- - set-of-emails/maildir/bsd/lhost-gsuite-04.eml
437
- - set-of-emails/maildir/bsd/lhost-gsuite-05.eml
438
- - set-of-emails/maildir/bsd/lhost-gsuite-06.eml
439
- - set-of-emails/maildir/bsd/lhost-gsuite-07.eml
440
- - set-of-emails/maildir/bsd/lhost-gsuite-08.eml
441
- - set-of-emails/maildir/bsd/lhost-gsuite-09.eml
442
- - set-of-emails/maildir/bsd/lhost-gsuite-10.eml
443
- - set-of-emails/maildir/bsd/lhost-gsuite-11.eml
444
- - set-of-emails/maildir/bsd/lhost-gsuite-12.eml
445
- - set-of-emails/maildir/bsd/lhost-gsuite-13.eml
446
- - set-of-emails/maildir/bsd/lhost-gsuite-14.eml
447
- - set-of-emails/maildir/bsd/lhost-gsuite-15.eml
414
+ - set-of-emails/maildir/bsd/lhost-googleworkspace-01.eml
448
415
  - set-of-emails/maildir/bsd/lhost-imailserver-01.eml
449
416
  - set-of-emails/maildir/bsd/lhost-imailserver-02.eml
450
417
  - set-of-emails/maildir/bsd/lhost-imailserver-03.eml
@@ -474,9 +441,6 @@ files:
474
441
  - set-of-emails/maildir/bsd/lhost-mcafee-03.eml
475
442
  - set-of-emails/maildir/bsd/lhost-mcafee-04.eml
476
443
  - set-of-emails/maildir/bsd/lhost-mcafee-05.eml
477
- - set-of-emails/maildir/bsd/lhost-messagelabs-01.eml
478
- - set-of-emails/maildir/bsd/lhost-messagelabs-02.eml
479
- - set-of-emails/maildir/bsd/lhost-messagelabs-03.eml
480
444
  - set-of-emails/maildir/bsd/lhost-messagingserver-01.eml
481
445
  - set-of-emails/maildir/bsd/lhost-messagingserver-02.eml
482
446
  - set-of-emails/maildir/bsd/lhost-messagingserver-03.eml
@@ -718,13 +682,13 @@ files:
718
682
  - set-of-emails/maildir/bsd/lhost-x2-03.eml
719
683
  - set-of-emails/maildir/bsd/lhost-x2-04.eml
720
684
  - set-of-emails/maildir/bsd/lhost-x2-05.eml
685
+ - set-of-emails/maildir/bsd/lhost-x2-06.eml
721
686
  - set-of-emails/maildir/bsd/lhost-x3-01.eml
722
687
  - set-of-emails/maildir/bsd/lhost-x3-02.eml
723
688
  - set-of-emails/maildir/bsd/lhost-x3-03.eml
724
689
  - set-of-emails/maildir/bsd/lhost-x3-05.eml
725
690
  - set-of-emails/maildir/bsd/lhost-x3-06.eml
726
691
  - set-of-emails/maildir/bsd/lhost-x4-01.eml
727
- - set-of-emails/maildir/bsd/lhost-x4-08.eml
728
692
  - set-of-emails/maildir/bsd/lhost-x5-01.eml
729
693
  - set-of-emails/maildir/bsd/lhost-x6-01.eml
730
694
  - set-of-emails/maildir/bsd/lhost-x6-02.eml
@@ -764,22 +728,42 @@ files:
764
728
  - set-of-emails/maildir/bsd/rfc3464-34.eml
765
729
  - set-of-emails/maildir/bsd/rfc3464-35.eml
766
730
  - set-of-emails/maildir/bsd/rfc3464-36.eml
767
- - set-of-emails/maildir/bsd/rfc3464-37.eml
768
- - set-of-emails/maildir/bsd/rfc3464-38.eml
769
- - set-of-emails/maildir/bsd/rfc3464-39.eml
770
731
  - set-of-emails/maildir/bsd/rfc3464-40.eml
771
732
  - set-of-emails/maildir/bsd/rfc3464-42.eml
772
733
  - set-of-emails/maildir/bsd/rfc3464-43.eml
734
+ - set-of-emails/maildir/bsd/rfc3464-51.eml
735
+ - set-of-emails/maildir/bsd/rfc3464-52.eml
736
+ - set-of-emails/maildir/bsd/rfc3464-53.eml
737
+ - set-of-emails/maildir/bsd/rfc3464-54.eml
738
+ - set-of-emails/maildir/bsd/rfc3464-55.eml
739
+ - set-of-emails/maildir/bsd/rfc3464-56.eml
740
+ - set-of-emails/maildir/bsd/rfc3464-57.eml
741
+ - set-of-emails/maildir/bsd/rfc3464-58.eml
742
+ - set-of-emails/maildir/bsd/rfc3464-59.eml
743
+ - set-of-emails/maildir/bsd/rfc3464-60.eml
744
+ - set-of-emails/maildir/bsd/rfc3464-61.eml
745
+ - set-of-emails/maildir/bsd/rfc3464-62.eml
746
+ - set-of-emails/maildir/bsd/rfc3464-63.eml
747
+ - set-of-emails/maildir/bsd/rfc3464-64.eml
748
+ - set-of-emails/maildir/bsd/rfc3464-65.eml
773
749
  - set-of-emails/maildir/bsd/rfc3834-01.eml
774
750
  - set-of-emails/maildir/bsd/rfc3834-02.eml
775
751
  - set-of-emails/maildir/bsd/rfc3834-03.eml
776
752
  - set-of-emails/maildir/bsd/rfc3834-04.eml
777
753
  - set-of-emails/maildir/bsd/rfc3834-05.eml
754
+ - set-of-emails/maildir/bsd/rhost-aol-01.eml
755
+ - set-of-emails/maildir/bsd/rhost-aol-02.eml
756
+ - set-of-emails/maildir/bsd/rhost-aol-03.eml
757
+ - set-of-emails/maildir/bsd/rhost-aol-04.eml
758
+ - set-of-emails/maildir/bsd/rhost-aol-05.eml
759
+ - set-of-emails/maildir/bsd/rhost-aol-06.eml
778
760
  - set-of-emails/maildir/bsd/rhost-apple-01.eml
779
761
  - set-of-emails/maildir/bsd/rhost-apple-02.eml
780
762
  - set-of-emails/maildir/bsd/rhost-apple-03.eml
781
763
  - set-of-emails/maildir/bsd/rhost-apple-04.eml
782
764
  - set-of-emails/maildir/bsd/rhost-cox-01.eml
765
+ - set-of-emails/maildir/bsd/rhost-facebook-03.eml
766
+ - set-of-emails/maildir/bsd/rhost-facebook-04.eml
783
767
  - set-of-emails/maildir/bsd/rhost-franceptt-01.eml
784
768
  - set-of-emails/maildir/bsd/rhost-franceptt-02.eml
785
769
  - set-of-emails/maildir/bsd/rhost-franceptt-03.eml
@@ -801,9 +785,27 @@ files:
801
785
  - set-of-emails/maildir/bsd/rhost-google-06.eml
802
786
  - set-of-emails/maildir/bsd/rhost-google-07.eml
803
787
  - set-of-emails/maildir/bsd/rhost-google-08.eml
788
+ - set-of-emails/maildir/bsd/rhost-gsuite-01.eml
789
+ - set-of-emails/maildir/bsd/rhost-gsuite-02.eml
790
+ - set-of-emails/maildir/bsd/rhost-gsuite-03.eml
791
+ - set-of-emails/maildir/bsd/rhost-gsuite-04.eml
792
+ - set-of-emails/maildir/bsd/rhost-gsuite-05.eml
793
+ - set-of-emails/maildir/bsd/rhost-gsuite-06.eml
794
+ - set-of-emails/maildir/bsd/rhost-gsuite-07.eml
795
+ - set-of-emails/maildir/bsd/rhost-gsuite-08.eml
796
+ - set-of-emails/maildir/bsd/rhost-gsuite-09.eml
797
+ - set-of-emails/maildir/bsd/rhost-gsuite-10.eml
798
+ - set-of-emails/maildir/bsd/rhost-gsuite-11.eml
799
+ - set-of-emails/maildir/bsd/rhost-gsuite-12.eml
800
+ - set-of-emails/maildir/bsd/rhost-gsuite-13.eml
801
+ - set-of-emails/maildir/bsd/rhost-gsuite-14.eml
802
+ - set-of-emails/maildir/bsd/rhost-gsuite-15.eml
804
803
  - set-of-emails/maildir/bsd/rhost-iua-01.eml
805
804
  - set-of-emails/maildir/bsd/rhost-kddi-01.eml
806
805
  - set-of-emails/maildir/bsd/rhost-kddi-02.eml
806
+ - set-of-emails/maildir/bsd/rhost-messagelabs-01.eml
807
+ - set-of-emails/maildir/bsd/rhost-messagelabs-02.eml
808
+ - set-of-emails/maildir/bsd/rhost-messagelabs-03.eml
807
809
  - set-of-emails/maildir/bsd/rhost-microsoft-01.eml
808
810
  - set-of-emails/maildir/bsd/rhost-microsoft-02.eml
809
811
  - set-of-emails/maildir/bsd/rhost-microsoft-03.eml
@@ -814,6 +816,14 @@ files:
814
816
  - set-of-emails/maildir/bsd/rhost-nttdocomo-01.eml
815
817
  - set-of-emails/maildir/bsd/rhost-nttdocomo-02.eml
816
818
  - set-of-emails/maildir/bsd/rhost-nttdocomo-03.eml
819
+ - set-of-emails/maildir/bsd/rhost-outlook-01.eml
820
+ - set-of-emails/maildir/bsd/rhost-outlook-02.eml
821
+ - set-of-emails/maildir/bsd/rhost-outlook-03.eml
822
+ - set-of-emails/maildir/bsd/rhost-outlook-04.eml
823
+ - set-of-emails/maildir/bsd/rhost-outlook-06.eml
824
+ - set-of-emails/maildir/bsd/rhost-outlook-07.eml
825
+ - set-of-emails/maildir/bsd/rhost-outlook-08.eml
826
+ - set-of-emails/maildir/bsd/rhost-outlook-09.eml
817
827
  - set-of-emails/maildir/bsd/rhost-spectrum-01.eml
818
828
  - set-of-emails/maildir/bsd/rhost-tencent-01.eml
819
829
  - set-of-emails/maildir/bsd/rhost-tencent-02.eml
@@ -988,6 +998,13 @@ files:
988
998
  - set-of-emails/maildir/mac/rhost-tencentqq-01.eml
989
999
  - set-of-emails/maildir/not/is-not-bounce-01.eml
990
1000
  - set-of-emails/maildir/not/is-not-bounce-02.eml
1001
+ - set-of-emails/maildir/tmp/arf-22.eml
1002
+ - set-of-emails/maildir/tmp/arf-23.eml
1003
+ - set-of-emails/maildir/tmp/arf-24.eml
1004
+ - set-of-emails/maildir/tmp/lhost-exim-07.eml
1005
+ - set-of-emails/maildir/tmp/rfc3464-37.eml
1006
+ - set-of-emails/maildir/tmp/rfc3464-38.eml
1007
+ - set-of-emails/maildir/tmp/rfc3464-39.eml
991
1008
  - set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-01.eml
992
1009
  - set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-02.eml
993
1010
  - 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
-