sisimai 4.21.1 → 4.22.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sisimai might be problematic. Click here for more details.

Files changed (571) hide show
  1. checksums.yaml +4 -4
  2. data/ANALYTICAL-PRECISION +56 -56
  3. data/ChangeLog.md +16 -0
  4. data/Developers.mk +15 -33
  5. data/LICENSE +1 -1
  6. data/README-JA.md +11 -11
  7. data/README.md +11 -11
  8. data/fig/sisimai-architecture.png +0 -0
  9. data/lib/sisimai.rb +4 -4
  10. data/lib/sisimai/address.rb +254 -5
  11. data/lib/sisimai/arf.rb +6 -6
  12. data/lib/sisimai/bite.rb +37 -0
  13. data/lib/sisimai/bite/email.rb +53 -0
  14. data/lib/sisimai/bite/email/activehunter.rb +124 -0
  15. data/lib/sisimai/bite/email/amazonses.rb +247 -0
  16. data/lib/sisimai/bite/email/amazonworkmail.rb +192 -0
  17. data/lib/sisimai/bite/email/aol.rb +208 -0
  18. data/lib/sisimai/bite/email/apachejames.rb +169 -0
  19. data/lib/sisimai/bite/email/bigfoot.rb +207 -0
  20. data/lib/sisimai/bite/email/biglobe.rb +148 -0
  21. data/lib/sisimai/bite/email/courier.rb +265 -0
  22. data/lib/sisimai/bite/email/domino.rb +174 -0
  23. data/lib/sisimai/bite/email/einsundeins.rb +143 -0
  24. data/lib/sisimai/bite/email/exchange2003.rb +284 -0
  25. data/lib/sisimai/bite/email/exchange2007.rb +178 -0
  26. data/lib/sisimai/bite/email/exim.rb +522 -0
  27. data/lib/sisimai/bite/email/ezweb.rb +260 -0
  28. data/lib/sisimai/bite/email/facebook.rb +274 -0
  29. data/lib/sisimai/bite/email/gmx.rb +167 -0
  30. data/lib/sisimai/bite/email/google.rb +320 -0
  31. data/lib/sisimai/bite/email/gsuite.rb +273 -0
  32. data/lib/sisimai/bite/email/imailserver.rb +181 -0
  33. data/lib/sisimai/bite/email/interscanmss.rb +146 -0
  34. data/lib/sisimai/bite/email/kddi.rb +166 -0
  35. data/lib/sisimai/bite/email/mailfoundry.rb +133 -0
  36. data/lib/sisimai/bite/email/mailmarshalsmtp.rb +173 -0
  37. data/lib/sisimai/bite/email/mailru.rb +271 -0
  38. data/lib/sisimai/bite/email/mcafee.rb +169 -0
  39. data/lib/sisimai/bite/email/messagelabs.rb +213 -0
  40. data/lib/sisimai/bite/email/messagingserver.rb +206 -0
  41. data/lib/sisimai/bite/email/mfilter.rb +165 -0
  42. data/lib/sisimai/bite/email/mxlogic.rb +253 -0
  43. data/lib/sisimai/bite/email/notes.rb +181 -0
  44. data/lib/sisimai/bite/email/office365.rb +262 -0
  45. data/lib/sisimai/bite/email/opensmtpd.rb +192 -0
  46. data/lib/sisimai/bite/email/outlook.rb +207 -0
  47. data/lib/sisimai/bite/email/postfix.rb +310 -0
  48. data/lib/sisimai/bite/email/qmail.rb +304 -0
  49. data/lib/sisimai/bite/email/receivingses.rb +221 -0
  50. data/lib/sisimai/bite/email/sendgrid.rb +223 -0
  51. data/lib/sisimai/bite/email/sendmail.rb +290 -0
  52. data/lib/sisimai/bite/email/surfcontrol.rb +162 -0
  53. data/lib/sisimai/bite/email/userdefined.rb +129 -0
  54. data/lib/sisimai/bite/email/v5sendmail.rb +208 -0
  55. data/lib/sisimai/bite/email/verizon.rb +265 -0
  56. data/lib/sisimai/bite/email/x1.rb +124 -0
  57. data/lib/sisimai/bite/email/x2.rb +125 -0
  58. data/lib/sisimai/bite/email/x3.rb +141 -0
  59. data/lib/sisimai/bite/email/x4.rb +325 -0
  60. data/lib/sisimai/bite/email/x5.rb +178 -0
  61. data/lib/sisimai/bite/email/yahoo.rb +148 -0
  62. data/lib/sisimai/bite/email/yandex.rb +204 -0
  63. data/lib/sisimai/bite/email/zoho.rb +167 -0
  64. data/lib/sisimai/bite/json.rb +38 -0
  65. data/lib/sisimai/bite/json/amazonses.rb +255 -0
  66. data/lib/sisimai/bite/json/sendgrid.rb +79 -0
  67. data/lib/sisimai/ced.rb +30 -6
  68. data/lib/sisimai/data.rb +5 -5
  69. data/lib/sisimai/message.rb +6 -6
  70. data/lib/sisimai/message/email.rb +12 -11
  71. data/lib/sisimai/message/json.rb +20 -19
  72. data/lib/sisimai/msp.rb +15 -3
  73. data/lib/sisimai/mta.rb +15 -3
  74. data/lib/sisimai/order.rb +1 -1
  75. data/lib/sisimai/order/email.rb +113 -119
  76. data/lib/sisimai/order/json.rb +11 -10
  77. data/lib/sisimai/reason.rb +5 -4
  78. data/lib/sisimai/reason/policyviolation.rb +64 -0
  79. data/lib/sisimai/reason/securityerror.rb +13 -23
  80. data/lib/sisimai/reason/spamdetected.rb +1 -0
  81. data/lib/sisimai/reason/syntaxerror.rb +1 -0
  82. data/lib/sisimai/reason/virusdetected.rb +56 -0
  83. data/lib/sisimai/rfc3464.rb +8 -8
  84. data/lib/sisimai/rfc3834.rb +2 -2
  85. data/lib/sisimai/rfc5322.rb +1 -1
  86. data/lib/sisimai/skeleton.rb +1 -1
  87. data/lib/sisimai/smtp/error.rb +3 -3
  88. data/lib/sisimai/smtp/status.rb +26 -24
  89. data/lib/sisimai/version.rb +1 -1
  90. data/set-of-emails/README.md +1 -0
  91. data/set-of-emails/{jsonapi/ced-us-amazonses-01.json → jsonobj/json-amazonses-01.json} +0 -0
  92. data/set-of-emails/{jsonapi/ced-us-amazonses-02.json → jsonobj/json-amazonses-02.json} +0 -0
  93. data/set-of-emails/{jsonapi/ced-us-amazonses-03.json → jsonobj/json-amazonses-03.json} +0 -0
  94. data/set-of-emails/{jsonapi/ced-us-amazonses-04.json → jsonobj/json-amazonses-04.json} +0 -0
  95. data/set-of-emails/{jsonapi/ced-us-amazonses-05.json → jsonobj/json-amazonses-05.json} +0 -0
  96. data/set-of-emails/{jsonapi/ced-us-sendgrid-01.json → jsonobj/json-sendgrid-01.json} +0 -0
  97. data/set-of-emails/{jsonapi/ced-us-sendgrid-02.json → jsonobj/json-sendgrid-02.json} +0 -0
  98. data/set-of-emails/{jsonapi/ced-us-sendgrid-03.json → jsonobj/json-sendgrid-03.json} +0 -0
  99. data/set-of-emails/{jsonapi/ced-us-sendgrid-04.json → jsonobj/json-sendgrid-04.json} +0 -0
  100. data/set-of-emails/{jsonapi/ced-us-sendgrid-05.json → jsonobj/json-sendgrid-05.json} +0 -0
  101. data/set-of-emails/{jsonapi/ced-us-sendgrid-06.json → jsonobj/json-sendgrid-06.json} +0 -0
  102. data/set-of-emails/{jsonapi/ced-us-sendgrid-07.json → jsonobj/json-sendgrid-07.json} +0 -0
  103. data/set-of-emails/{jsonapi/ced-us-sendgrid-08.json → jsonobj/json-sendgrid-08.json} +0 -0
  104. data/set-of-emails/{jsonapi/ced-us-sendgrid-09.json → jsonobj/json-sendgrid-09.json} +0 -0
  105. data/set-of-emails/{jsonapi/ced-us-sendgrid-10.json → jsonobj/json-sendgrid-10.json} +0 -0
  106. data/set-of-emails/{jsonapi/ced-us-sendgrid-11.json → jsonobj/json-sendgrid-11.json} +0 -0
  107. data/set-of-emails/maildir/bsd/README.md +25 -17
  108. data/set-of-emails/maildir/bsd/{mta-activehunter-01.eml → email-activehunter-01.eml} +0 -0
  109. data/set-of-emails/maildir/bsd/{mta-activehunter-02.eml → email-activehunter-02.eml} +0 -0
  110. data/set-of-emails/maildir/bsd/{msp-us-amazonses-01.eml → email-amazonses-01.eml} +0 -0
  111. data/set-of-emails/maildir/bsd/{msp-us-amazonses-02.eml → email-amazonses-02.eml} +0 -0
  112. data/set-of-emails/maildir/bsd/{msp-us-amazonses-03.eml → email-amazonses-03.eml} +0 -0
  113. data/set-of-emails/maildir/bsd/{msp-us-amazonses-04.eml → email-amazonses-04.eml} +0 -0
  114. data/set-of-emails/maildir/bsd/{msp-us-amazonses-05.eml → email-amazonses-05.eml} +0 -0
  115. data/set-of-emails/maildir/bsd/{msp-us-amazonses-06.eml → email-amazonses-06.eml} +0 -0
  116. data/set-of-emails/maildir/bsd/{msp-us-amazonses-07.eml → email-amazonses-07.eml} +0 -0
  117. data/set-of-emails/maildir/bsd/{msp-us-amazonses-08.eml → email-amazonses-08.eml} +0 -0
  118. data/set-of-emails/maildir/bsd/{ced-us-amazonses-01.eml → email-amazonses-09.eml} +0 -0
  119. data/set-of-emails/maildir/bsd/{ced-us-amazonses-02.eml → email-amazonses-10.eml} +0 -0
  120. data/set-of-emails/maildir/bsd/{ced-us-amazonses-03.eml → email-amazonses-11.eml} +0 -0
  121. data/set-of-emails/maildir/bsd/{ced-us-amazonses-04.eml → email-amazonses-12.eml} +0 -0
  122. data/set-of-emails/maildir/bsd/{ced-us-amazonses-05.eml → email-amazonses-13.eml} +0 -0
  123. data/set-of-emails/maildir/bsd/{msp-us-amazonworkmail-01.eml → email-amazonworkmail-01.eml} +0 -0
  124. data/set-of-emails/maildir/bsd/{msp-us-amazonworkmail-02.eml → email-amazonworkmail-02.eml} +0 -0
  125. data/set-of-emails/maildir/bsd/{msp-us-amazonworkmail-03.eml → email-amazonworkmail-03.eml} +0 -0
  126. data/set-of-emails/maildir/bsd/{msp-us-amazonworkmail-04.eml → email-amazonworkmail-04.eml} +0 -0
  127. data/set-of-emails/maildir/bsd/{msp-us-amazonworkmail-05.eml → email-amazonworkmail-05.eml} +0 -0
  128. data/set-of-emails/maildir/bsd/{msp-us-amazonworkmail-06.eml → email-amazonworkmail-06.eml} +0 -0
  129. data/set-of-emails/maildir/bsd/{msp-us-amazonworkmail-07.eml → email-amazonworkmail-07.eml} +0 -0
  130. data/set-of-emails/maildir/bsd/{msp-us-aol-01.eml → email-aol-01.eml} +0 -0
  131. data/set-of-emails/maildir/bsd/{msp-us-aol-02.eml → email-aol-02.eml} +0 -0
  132. data/set-of-emails/maildir/bsd/{msp-us-aol-03.eml → email-aol-03.eml} +0 -0
  133. data/set-of-emails/maildir/bsd/{msp-us-aol-04.eml → email-aol-04.eml} +0 -0
  134. data/set-of-emails/maildir/bsd/{msp-us-aol-05.eml → email-aol-05.eml} +0 -0
  135. data/set-of-emails/maildir/bsd/{msp-us-aol-06.eml → email-aol-06.eml} +0 -0
  136. data/set-of-emails/maildir/bsd/{mta-apachejames-01.eml → email-apachejames-01.eml} +0 -0
  137. data/set-of-emails/maildir/bsd/{msp-us-bigfoot-01.eml → email-bigfoot-01.eml} +0 -0
  138. data/set-of-emails/maildir/bsd/{msp-jp-biglobe-01.eml → email-biglobe-01.eml} +0 -0
  139. data/set-of-emails/maildir/bsd/{mta-courier-01.eml → email-courier-01.eml} +0 -0
  140. data/set-of-emails/maildir/bsd/{mta-courier-02.eml → email-courier-02.eml} +0 -0
  141. data/set-of-emails/maildir/bsd/{mta-courier-03.eml → email-courier-03.eml} +0 -0
  142. data/set-of-emails/maildir/bsd/{mta-courier-04.eml → email-courier-04.eml} +0 -0
  143. data/set-of-emails/maildir/bsd/{mta-domino-01.eml → email-domino-01.eml} +0 -0
  144. data/set-of-emails/maildir/bsd/{mta-domino-02.eml → email-domino-02.eml} +0 -0
  145. data/set-of-emails/maildir/bsd/{msp-de-einsundeins-01.eml → email-einsundeins-01.eml} +0 -0
  146. data/set-of-emails/maildir/bsd/{mta-exchange2003-01.eml → email-exchange2003-01.eml} +0 -0
  147. data/set-of-emails/maildir/bsd/{mta-exchange2003-02.eml → email-exchange2003-02.eml} +0 -0
  148. data/set-of-emails/maildir/bsd/{mta-exchange2003-03.eml → email-exchange2003-03.eml} +0 -0
  149. data/set-of-emails/maildir/bsd/{mta-exchange2003-04.eml → email-exchange2003-04.eml} +0 -0
  150. data/set-of-emails/maildir/bsd/{mta-exchange2003-05.eml → email-exchange2003-05.eml} +0 -0
  151. data/set-of-emails/maildir/bsd/{mta-exchange2003-06.eml → email-exchange2003-06.eml} +0 -0
  152. data/set-of-emails/maildir/bsd/{mta-exchange2007-01.eml → email-exchange2007-01.eml} +0 -0
  153. data/set-of-emails/maildir/bsd/{mta-exchange2007-02.eml → email-exchange2007-02.eml} +0 -0
  154. data/set-of-emails/maildir/bsd/{mta-exchange2007-03.eml → email-exchange2007-03.eml} +0 -0
  155. data/set-of-emails/maildir/bsd/{mta-exim-01.eml → email-exim-01.eml} +0 -0
  156. data/set-of-emails/maildir/bsd/{mta-exim-02.eml → email-exim-02.eml} +0 -0
  157. data/set-of-emails/maildir/bsd/{mta-exim-03.eml → email-exim-03.eml} +0 -0
  158. data/set-of-emails/maildir/bsd/{mta-exim-04.eml → email-exim-04.eml} +0 -0
  159. data/set-of-emails/maildir/bsd/{mta-exim-05.eml → email-exim-05.eml} +0 -0
  160. data/set-of-emails/maildir/bsd/{mta-exim-06.eml → email-exim-06.eml} +0 -0
  161. data/set-of-emails/maildir/bsd/{mta-exim-07.eml → email-exim-07.eml} +0 -0
  162. data/set-of-emails/maildir/bsd/{mta-exim-08.eml → email-exim-08.eml} +0 -0
  163. data/set-of-emails/maildir/bsd/{mta-exim-09.eml → email-exim-09.eml} +0 -0
  164. data/set-of-emails/maildir/bsd/{mta-exim-10.eml → email-exim-10.eml} +0 -0
  165. data/set-of-emails/maildir/bsd/{mta-exim-11.eml → email-exim-11.eml} +0 -0
  166. data/set-of-emails/maildir/bsd/{mta-exim-12.eml → email-exim-12.eml} +0 -0
  167. data/set-of-emails/maildir/bsd/{mta-exim-13.eml → email-exim-13.eml} +0 -0
  168. data/set-of-emails/maildir/bsd/{mta-exim-14.eml → email-exim-14.eml} +0 -0
  169. data/set-of-emails/maildir/bsd/{mta-exim-15.eml → email-exim-15.eml} +0 -0
  170. data/set-of-emails/maildir/bsd/{mta-exim-16.eml → email-exim-16.eml} +0 -0
  171. data/set-of-emails/maildir/bsd/{mta-exim-17.eml → email-exim-17.eml} +0 -0
  172. data/set-of-emails/maildir/bsd/{mta-exim-18.eml → email-exim-18.eml} +0 -0
  173. data/set-of-emails/maildir/bsd/{mta-exim-19.eml → email-exim-19.eml} +0 -0
  174. data/set-of-emails/maildir/bsd/{mta-exim-20.eml → email-exim-20.eml} +0 -0
  175. data/set-of-emails/maildir/bsd/{mta-exim-21.eml → email-exim-21.eml} +0 -0
  176. data/set-of-emails/maildir/bsd/{mta-exim-22.eml → email-exim-22.eml} +0 -0
  177. data/set-of-emails/maildir/bsd/{mta-exim-23.eml → email-exim-23.eml} +0 -0
  178. data/set-of-emails/maildir/bsd/{mta-exim-24.eml → email-exim-24.eml} +0 -0
  179. data/set-of-emails/maildir/bsd/{mta-exim-25.eml → email-exim-25.eml} +0 -0
  180. data/set-of-emails/maildir/bsd/{mta-exim-26.eml → email-exim-26.eml} +0 -0
  181. data/set-of-emails/maildir/bsd/{mta-exim-27.eml → email-exim-27.eml} +0 -0
  182. data/set-of-emails/maildir/bsd/{mta-exim-28.eml → email-exim-28.eml} +0 -0
  183. data/set-of-emails/maildir/bsd/{mta-exim-29.eml → email-exim-29.eml} +0 -0
  184. data/set-of-emails/maildir/bsd/{mta-exim-30.eml → email-exim-30.eml} +0 -0
  185. data/set-of-emails/maildir/bsd/{msp-jp-ezweb-01.eml → email-ezweb-01.eml} +0 -0
  186. data/set-of-emails/maildir/bsd/{msp-jp-ezweb-02.eml → email-ezweb-02.eml} +0 -0
  187. data/set-of-emails/maildir/bsd/{msp-jp-ezweb-03.eml → email-ezweb-03.eml} +0 -0
  188. data/set-of-emails/maildir/bsd/{msp-jp-ezweb-04.eml → email-ezweb-04.eml} +0 -0
  189. data/set-of-emails/maildir/bsd/{msp-jp-ezweb-05.eml → email-ezweb-05.eml} +0 -0
  190. data/set-of-emails/maildir/bsd/{msp-jp-ezweb-06.eml → email-ezweb-06.eml} +0 -0
  191. data/set-of-emails/maildir/bsd/{msp-us-facebook-01.eml → email-facebook-01.eml} +0 -0
  192. data/set-of-emails/maildir/bsd/{msp-us-facebook-02.eml → email-facebook-02.eml} +0 -0
  193. data/set-of-emails/maildir/bsd/{msp-de-gmx-01.eml → email-gmx-01.eml} +0 -0
  194. data/set-of-emails/maildir/bsd/{msp-de-gmx-02.eml → email-gmx-02.eml} +0 -0
  195. data/set-of-emails/maildir/bsd/{msp-de-gmx-03.eml → email-gmx-03.eml} +0 -0
  196. data/set-of-emails/maildir/bsd/{msp-de-gmx-04.eml → email-gmx-04.eml} +0 -0
  197. data/set-of-emails/maildir/bsd/{msp-us-google-01.eml → email-google-01.eml} +0 -0
  198. data/set-of-emails/maildir/bsd/{msp-us-google-02.eml → email-google-02.eml} +0 -0
  199. data/set-of-emails/maildir/bsd/{msp-us-google-03.eml → email-google-03.eml} +0 -0
  200. data/set-of-emails/maildir/bsd/{msp-us-google-04.eml → email-google-04.eml} +0 -0
  201. data/set-of-emails/maildir/bsd/{msp-us-google-05.eml → email-google-05.eml} +0 -0
  202. data/set-of-emails/maildir/bsd/{msp-us-google-06.eml → email-google-06.eml} +0 -0
  203. data/set-of-emails/maildir/bsd/{msp-us-google-07.eml → email-google-07.eml} +0 -0
  204. data/set-of-emails/maildir/bsd/{msp-us-google-08.eml → email-google-08.eml} +0 -0
  205. data/set-of-emails/maildir/bsd/{msp-us-google-09.eml → email-google-09.eml} +0 -0
  206. data/set-of-emails/maildir/bsd/{msp-us-google-10.eml → email-google-10.eml} +0 -0
  207. data/set-of-emails/maildir/bsd/{msp-us-google-11.eml → email-google-11.eml} +0 -0
  208. data/set-of-emails/maildir/bsd/{msp-us-google-12.eml → email-google-12.eml} +0 -0
  209. data/set-of-emails/maildir/bsd/{msp-us-google-13.eml → email-google-13.eml} +0 -0
  210. data/set-of-emails/maildir/bsd/{msp-us-google-14.eml → email-google-14.eml} +0 -0
  211. data/set-of-emails/maildir/bsd/{msp-us-google-15.eml → email-google-15.eml} +0 -0
  212. data/set-of-emails/maildir/bsd/{msp-us-google-16.eml → email-google-16.eml} +0 -0
  213. data/set-of-emails/maildir/bsd/{msp-us-google-17.eml → email-google-17.eml} +0 -0
  214. data/set-of-emails/maildir/bsd/{msp-us-gsuite-01.eml → email-gsuite-01.eml} +0 -0
  215. data/set-of-emails/maildir/bsd/{msp-us-gsuite-02.eml → email-gsuite-02.eml} +0 -0
  216. data/set-of-emails/maildir/bsd/{msp-us-gsuite-03.eml → email-gsuite-03.eml} +0 -0
  217. data/set-of-emails/maildir/bsd/{msp-us-gsuite-04.eml → email-gsuite-04.eml} +0 -0
  218. data/set-of-emails/maildir/bsd/{msp-us-gsuite-05.eml → email-gsuite-05.eml} +0 -0
  219. data/set-of-emails/maildir/bsd/{msp-us-gsuite-06.eml → email-gsuite-06.eml} +0 -0
  220. data/set-of-emails/maildir/bsd/{msp-us-gsuite-07.eml → email-gsuite-07.eml} +0 -0
  221. data/set-of-emails/maildir/bsd/{mta-imailserver-01.eml → email-imailserver-01.eml} +0 -0
  222. data/set-of-emails/maildir/bsd/{mta-imailserver-02.eml → email-imailserver-02.eml} +0 -0
  223. data/set-of-emails/maildir/bsd/{mta-imailserver-03.eml → email-imailserver-03.eml} +0 -0
  224. data/set-of-emails/maildir/bsd/{mta-imailserver-04.eml → email-imailserver-04.eml} +0 -0
  225. data/set-of-emails/maildir/bsd/{mta-imailserver-05.eml → email-imailserver-05.eml} +0 -0
  226. data/set-of-emails/maildir/bsd/{mta-imailserver-06.eml → email-imailserver-06.eml} +0 -0
  227. data/set-of-emails/maildir/bsd/{mta-interscanmss-01.eml → email-interscanmss-01.eml} +0 -0
  228. data/set-of-emails/maildir/bsd/{mta-interscanmss-02.eml → email-interscanmss-02.eml} +0 -0
  229. data/set-of-emails/maildir/bsd/{msp-jp-kddi-01.eml → email-kddi-01.eml} +0 -0
  230. data/set-of-emails/maildir/bsd/{msp-jp-kddi-02.eml → email-kddi-02.eml} +0 -0
  231. data/set-of-emails/maildir/bsd/{msp-jp-kddi-03.eml → email-kddi-03.eml} +0 -0
  232. data/set-of-emails/maildir/bsd/{mta-mailfoundry-01.eml → email-mailfoundry-01.eml} +0 -0
  233. data/set-of-emails/maildir/bsd/{mta-mailfoundry-02.eml → email-mailfoundry-02.eml} +0 -0
  234. data/set-of-emails/maildir/bsd/{mta-mailmarshalsmtp-01.eml → email-mailmarshalsmtp-01.eml} +0 -0
  235. data/set-of-emails/maildir/bsd/{msp-ru-mailru-01.eml → email-mailru-01.eml} +0 -0
  236. data/set-of-emails/maildir/bsd/{msp-ru-mailru-02.eml → email-mailru-02.eml} +0 -0
  237. data/set-of-emails/maildir/bsd/{msp-ru-mailru-03.eml → email-mailru-03.eml} +0 -0
  238. data/set-of-emails/maildir/bsd/{msp-ru-mailru-04.eml → email-mailru-04.eml} +0 -0
  239. data/set-of-emails/maildir/bsd/{msp-ru-mailru-05.eml → email-mailru-05.eml} +0 -0
  240. data/set-of-emails/maildir/bsd/{msp-ru-mailru-06.eml → email-mailru-06.eml} +0 -0
  241. data/set-of-emails/maildir/bsd/{mta-mcafee-01.eml → email-mcafee-01.eml} +0 -0
  242. data/set-of-emails/maildir/bsd/{mta-mcafee-02.eml → email-mcafee-02.eml} +0 -0
  243. data/set-of-emails/maildir/bsd/{mta-mcafee-03.eml → email-mcafee-03.eml} +0 -0
  244. data/set-of-emails/maildir/bsd/{msp-uk-messagelabs-01.eml → email-messagelabs-01.eml} +0 -0
  245. data/set-of-emails/maildir/bsd/{mta-messagingserver-01.eml → email-messagingserver-01.eml} +0 -0
  246. data/set-of-emails/maildir/bsd/{mta-messagingserver-02.eml → email-messagingserver-02.eml} +0 -0
  247. data/set-of-emails/maildir/bsd/{mta-messagingserver-03.eml → email-messagingserver-03.eml} +0 -0
  248. data/set-of-emails/maildir/bsd/{mta-messagingserver-04.eml → email-messagingserver-04.eml} +0 -0
  249. data/set-of-emails/maildir/bsd/{mta-messagingserver-05.eml → email-messagingserver-05.eml} +0 -0
  250. data/set-of-emails/maildir/bsd/{mta-messagingserver-06.eml → email-messagingserver-06.eml} +0 -0
  251. data/set-of-emails/maildir/bsd/{mta-messagingserver-07.eml → email-messagingserver-07.eml} +0 -0
  252. data/set-of-emails/maildir/bsd/{mta-mfilter-01.eml → email-mfilter-01.eml} +0 -0
  253. data/set-of-emails/maildir/bsd/{mta-mfilter-02.eml → email-mfilter-02.eml} +0 -0
  254. data/set-of-emails/maildir/bsd/{mta-mfilter-03.eml → email-mfilter-03.eml} +0 -0
  255. data/set-of-emails/maildir/bsd/{mta-mxlogic-01.eml → email-mxlogic-01.eml} +0 -0
  256. data/set-of-emails/maildir/bsd/{mta-mxlogic-02.eml → email-mxlogic-02.eml} +0 -0
  257. data/set-of-emails/maildir/bsd/{mta-mxlogic-03.eml → email-mxlogic-03.eml} +0 -0
  258. data/set-of-emails/maildir/bsd/{mta-notes-01.eml → email-notes-01.eml} +0 -0
  259. data/set-of-emails/maildir/bsd/{mta-notes-02.eml → email-notes-02.eml} +0 -0
  260. data/set-of-emails/maildir/bsd/{mta-notes-03.eml → email-notes-03.eml} +0 -0
  261. data/set-of-emails/maildir/bsd/{mta-notes-04.eml → email-notes-04.eml} +0 -0
  262. data/set-of-emails/maildir/bsd/{msp-us-office365-01.eml → email-office365-01.eml} +0 -0
  263. data/set-of-emails/maildir/bsd/{msp-us-office365-02.eml → email-office365-02.eml} +0 -0
  264. data/set-of-emails/maildir/bsd/{mta-opensmtpd-01.eml → email-opensmtpd-01.eml} +0 -0
  265. data/set-of-emails/maildir/bsd/{mta-opensmtpd-02.eml → email-opensmtpd-02.eml} +0 -0
  266. data/set-of-emails/maildir/bsd/{mta-opensmtpd-03.eml → email-opensmtpd-03.eml} +0 -0
  267. data/set-of-emails/maildir/bsd/{mta-opensmtpd-04.eml → email-opensmtpd-04.eml} +0 -0
  268. data/set-of-emails/maildir/bsd/{mta-opensmtpd-05.eml → email-opensmtpd-05.eml} +0 -0
  269. data/set-of-emails/maildir/bsd/{mta-opensmtpd-06.eml → email-opensmtpd-06.eml} +0 -0
  270. data/set-of-emails/maildir/bsd/{msp-us-outlook-01.eml → email-outlook-01.eml} +0 -0
  271. data/set-of-emails/maildir/bsd/{msp-us-outlook-02.eml → email-outlook-02.eml} +0 -0
  272. data/set-of-emails/maildir/bsd/{msp-us-outlook-03.eml → email-outlook-03.eml} +0 -0
  273. data/set-of-emails/maildir/bsd/{msp-us-outlook-04.eml → email-outlook-04.eml} +0 -0
  274. data/set-of-emails/maildir/bsd/{msp-us-outlook-05.eml → email-outlook-05.eml} +0 -0
  275. data/set-of-emails/maildir/bsd/{msp-us-outlook-06.eml → email-outlook-06.eml} +0 -0
  276. data/set-of-emails/maildir/bsd/{msp-us-outlook-07.eml → email-outlook-07.eml} +0 -0
  277. data/set-of-emails/maildir/bsd/{mta-postfix-01.eml → email-postfix-01.eml} +0 -0
  278. data/set-of-emails/maildir/bsd/{mta-postfix-02.eml → email-postfix-02.eml} +0 -0
  279. data/set-of-emails/maildir/bsd/{mta-postfix-03.eml → email-postfix-03.eml} +0 -0
  280. data/set-of-emails/maildir/bsd/{mta-postfix-04.eml → email-postfix-04.eml} +0 -0
  281. data/set-of-emails/maildir/bsd/{mta-postfix-05.eml → email-postfix-05.eml} +0 -0
  282. data/set-of-emails/maildir/bsd/{mta-postfix-06.eml → email-postfix-06.eml} +0 -0
  283. data/set-of-emails/maildir/bsd/{mta-postfix-07.eml → email-postfix-07.eml} +0 -0
  284. data/set-of-emails/maildir/bsd/{mta-postfix-08.eml → email-postfix-08.eml} +0 -0
  285. data/set-of-emails/maildir/bsd/{mta-postfix-09.eml → email-postfix-09.eml} +0 -0
  286. data/set-of-emails/maildir/bsd/{mta-postfix-10.eml → email-postfix-10.eml} +0 -0
  287. data/set-of-emails/maildir/bsd/{mta-postfix-11.eml → email-postfix-11.eml} +0 -0
  288. data/set-of-emails/maildir/bsd/{mta-postfix-12.eml → email-postfix-12.eml} +0 -0
  289. data/set-of-emails/maildir/bsd/{mta-postfix-13.eml → email-postfix-13.eml} +0 -0
  290. data/set-of-emails/maildir/bsd/{mta-postfix-14.eml → email-postfix-14.eml} +0 -0
  291. data/set-of-emails/maildir/bsd/{mta-postfix-15.eml → email-postfix-15.eml} +0 -0
  292. data/set-of-emails/maildir/bsd/{mta-postfix-16.eml → email-postfix-16.eml} +0 -0
  293. data/set-of-emails/maildir/bsd/{mta-postfix-17.eml → email-postfix-17.eml} +0 -0
  294. data/set-of-emails/maildir/bsd/{mta-postfix-18.eml → email-postfix-18.eml} +0 -0
  295. data/set-of-emails/maildir/bsd/{mta-postfix-19.eml → email-postfix-19.eml} +0 -0
  296. data/set-of-emails/maildir/bsd/{mta-postfix-20.eml → email-postfix-20.eml} +0 -0
  297. data/set-of-emails/maildir/bsd/{mta-postfix-21.eml → email-postfix-21.eml} +0 -0
  298. data/set-of-emails/maildir/bsd/{mta-postfix-22.eml → email-postfix-22.eml} +0 -0
  299. data/set-of-emails/maildir/bsd/{mta-postfix-23.eml → email-postfix-23.eml} +0 -0
  300. data/set-of-emails/maildir/bsd/{mta-postfix-24.eml → email-postfix-24.eml} +0 -0
  301. data/set-of-emails/maildir/bsd/{mta-postfix-25.eml → email-postfix-25.eml} +0 -0
  302. data/set-of-emails/maildir/bsd/{mta-postfix-26.eml → email-postfix-26.eml} +0 -0
  303. data/set-of-emails/maildir/bsd/{mta-postfix-27.eml → email-postfix-27.eml} +0 -0
  304. data/set-of-emails/maildir/bsd/{mta-postfix-28.eml → email-postfix-28.eml} +0 -0
  305. data/set-of-emails/maildir/bsd/{mta-postfix-29.eml → email-postfix-29.eml} +0 -0
  306. data/set-of-emails/maildir/bsd/{mta-qmail-01.eml → email-qmail-01.eml} +0 -0
  307. data/set-of-emails/maildir/bsd/{mta-qmail-02.eml → email-qmail-02.eml} +0 -0
  308. data/set-of-emails/maildir/bsd/{mta-qmail-03.eml → email-qmail-03.eml} +0 -0
  309. data/set-of-emails/maildir/bsd/{mta-qmail-04.eml → email-qmail-04.eml} +0 -0
  310. data/set-of-emails/maildir/bsd/{mta-qmail-05.eml → email-qmail-05.eml} +0 -0
  311. data/set-of-emails/maildir/bsd/{mta-qmail-06.eml → email-qmail-06.eml} +0 -0
  312. data/set-of-emails/maildir/bsd/{mta-qmail-07.eml → email-qmail-07.eml} +0 -0
  313. data/set-of-emails/maildir/bsd/{mta-qmail-08.eml → email-qmail-08.eml} +0 -0
  314. data/set-of-emails/maildir/bsd/{mta-qmail-09.eml → email-qmail-09.eml} +0 -0
  315. data/set-of-emails/maildir/bsd/{mta-qmail-10.eml → email-qmail-10.eml} +0 -0
  316. data/set-of-emails/maildir/bsd/{mta-qmail-11.eml → email-qmail-11.eml} +0 -0
  317. data/set-of-emails/maildir/bsd/{mta-qmail-12.eml → email-qmail-12.eml} +0 -0
  318. data/set-of-emails/maildir/bsd/{msp-us-receivingses-01.eml → email-receivingses-01.eml} +0 -0
  319. data/set-of-emails/maildir/bsd/{msp-us-receivingses-02.eml → email-receivingses-02.eml} +0 -0
  320. data/set-of-emails/maildir/bsd/{msp-us-receivingses-03.eml → email-receivingses-03.eml} +0 -0
  321. data/set-of-emails/maildir/bsd/{msp-us-receivingses-04.eml → email-receivingses-04.eml} +0 -0
  322. data/set-of-emails/maildir/bsd/{msp-us-receivingses-05.eml → email-receivingses-05.eml} +0 -0
  323. data/set-of-emails/maildir/bsd/{msp-us-receivingses-06.eml → email-receivingses-06.eml} +0 -0
  324. data/set-of-emails/maildir/bsd/{msp-us-receivingses-07.eml → email-receivingses-07.eml} +0 -0
  325. data/set-of-emails/maildir/bsd/{msp-us-sendgrid-01.eml → email-sendgrid-01.eml} +0 -0
  326. data/set-of-emails/maildir/bsd/{msp-us-sendgrid-02.eml → email-sendgrid-02.eml} +0 -0
  327. data/set-of-emails/maildir/bsd/{msp-us-sendgrid-03.eml → email-sendgrid-03.eml} +0 -0
  328. data/set-of-emails/maildir/bsd/{mta-sendmail-01.eml → email-sendmail-01.eml} +0 -0
  329. data/set-of-emails/maildir/bsd/{mta-sendmail-02.eml → email-sendmail-02.eml} +0 -0
  330. data/set-of-emails/maildir/bsd/{mta-sendmail-03.eml → email-sendmail-03.eml} +0 -0
  331. data/set-of-emails/maildir/bsd/{mta-sendmail-04.eml → email-sendmail-04.eml} +0 -0
  332. data/set-of-emails/maildir/bsd/{mta-sendmail-05.eml → email-sendmail-05.eml} +0 -0
  333. data/set-of-emails/maildir/bsd/{mta-sendmail-06.eml → email-sendmail-06.eml} +0 -0
  334. data/set-of-emails/maildir/bsd/{mta-sendmail-07.eml → email-sendmail-07.eml} +0 -0
  335. data/set-of-emails/maildir/bsd/{mta-sendmail-08.eml → email-sendmail-08.eml} +0 -0
  336. data/set-of-emails/maildir/bsd/{mta-sendmail-09.eml → email-sendmail-09.eml} +0 -0
  337. data/set-of-emails/maildir/bsd/{mta-sendmail-10.eml → email-sendmail-10.eml} +0 -0
  338. data/set-of-emails/maildir/bsd/{mta-sendmail-11.eml → email-sendmail-11.eml} +0 -0
  339. data/set-of-emails/maildir/bsd/{mta-sendmail-12.eml → email-sendmail-12.eml} +0 -0
  340. data/set-of-emails/maildir/bsd/{mta-sendmail-13.eml → email-sendmail-13.eml} +0 -0
  341. data/set-of-emails/maildir/bsd/{mta-sendmail-14.eml → email-sendmail-14.eml} +0 -0
  342. data/set-of-emails/maildir/bsd/{mta-sendmail-15.eml → email-sendmail-15.eml} +0 -0
  343. data/set-of-emails/maildir/bsd/{mta-sendmail-16.eml → email-sendmail-16.eml} +0 -0
  344. data/set-of-emails/maildir/bsd/{mta-sendmail-17.eml → email-sendmail-17.eml} +0 -0
  345. data/set-of-emails/maildir/bsd/{mta-sendmail-18.eml → email-sendmail-18.eml} +0 -0
  346. data/set-of-emails/maildir/bsd/{mta-sendmail-19.eml → email-sendmail-19.eml} +0 -0
  347. data/set-of-emails/maildir/bsd/{mta-sendmail-20.eml → email-sendmail-20.eml} +0 -0
  348. data/set-of-emails/maildir/bsd/{mta-sendmail-21.eml → email-sendmail-21.eml} +0 -0
  349. data/set-of-emails/maildir/bsd/{mta-sendmail-22.eml → email-sendmail-22.eml} +0 -0
  350. data/set-of-emails/maildir/bsd/{mta-sendmail-23.eml → email-sendmail-23.eml} +0 -0
  351. data/set-of-emails/maildir/bsd/{mta-sendmail-24.eml → email-sendmail-24.eml} +0 -0
  352. data/set-of-emails/maildir/bsd/{mta-sendmail-25.eml → email-sendmail-25.eml} +0 -0
  353. data/set-of-emails/maildir/bsd/{mta-sendmail-26.eml → email-sendmail-26.eml} +0 -0
  354. data/set-of-emails/maildir/bsd/{mta-sendmail-27.eml → email-sendmail-27.eml} +0 -0
  355. data/set-of-emails/maildir/bsd/{mta-sendmail-28.eml → email-sendmail-28.eml} +0 -0
  356. data/set-of-emails/maildir/bsd/{mta-sendmail-29.eml → email-sendmail-29.eml} +0 -0
  357. data/set-of-emails/maildir/bsd/{mta-sendmail-30.eml → email-sendmail-30.eml} +0 -0
  358. data/set-of-emails/maildir/bsd/{mta-sendmail-31.eml → email-sendmail-31.eml} +0 -0
  359. data/set-of-emails/maildir/bsd/{mta-sendmail-32.eml → email-sendmail-32.eml} +0 -0
  360. data/set-of-emails/maildir/bsd/{mta-sendmail-33.eml → email-sendmail-33.eml} +0 -0
  361. data/set-of-emails/maildir/bsd/{mta-sendmail-34.eml → email-sendmail-34.eml} +0 -0
  362. data/set-of-emails/maildir/bsd/{mta-sendmail-35.eml → email-sendmail-35.eml} +0 -0
  363. data/set-of-emails/maildir/bsd/{mta-sendmail-36.eml → email-sendmail-36.eml} +0 -0
  364. data/set-of-emails/maildir/bsd/{mta-sendmail-37.eml → email-sendmail-37.eml} +0 -0
  365. data/set-of-emails/maildir/bsd/{mta-sendmail-38.eml → email-sendmail-38.eml} +0 -0
  366. data/set-of-emails/maildir/bsd/{mta-sendmail-39.eml → email-sendmail-39.eml} +0 -0
  367. data/set-of-emails/maildir/bsd/{mta-sendmail-40.eml → email-sendmail-40.eml} +0 -0
  368. data/set-of-emails/maildir/bsd/{mta-sendmail-41.eml → email-sendmail-41.eml} +0 -0
  369. data/set-of-emails/maildir/bsd/{mta-sendmail-42.eml → email-sendmail-42.eml} +0 -0
  370. data/set-of-emails/maildir/bsd/{mta-sendmail-43.eml → email-sendmail-43.eml} +0 -0
  371. data/set-of-emails/maildir/bsd/email-sendmail-44.eml +67 -0
  372. data/set-of-emails/maildir/bsd/{mta-surfcontrol-01.eml → email-surfcontrol-01.eml} +0 -0
  373. data/set-of-emails/maildir/bsd/{mta-surfcontrol-02.eml → email-surfcontrol-02.eml} +0 -0
  374. data/set-of-emails/maildir/bsd/{mta-surfcontrol-03.eml → email-surfcontrol-03.eml} +0 -0
  375. data/set-of-emails/maildir/bsd/{mta-v5sendmail-01.eml → email-v5sendmail-01.eml} +0 -0
  376. data/set-of-emails/maildir/bsd/{mta-v5sendmail-02.eml → email-v5sendmail-02.eml} +0 -0
  377. data/set-of-emails/maildir/bsd/{mta-v5sendmail-03.eml → email-v5sendmail-03.eml} +0 -0
  378. data/set-of-emails/maildir/bsd/{mta-v5sendmail-04.eml → email-v5sendmail-04.eml} +0 -0
  379. data/set-of-emails/maildir/bsd/{mta-v5sendmail-05.eml → email-v5sendmail-05.eml} +0 -0
  380. data/set-of-emails/maildir/bsd/{mta-v5sendmail-06.eml → email-v5sendmail-06.eml} +0 -0
  381. data/set-of-emails/maildir/bsd/{mta-v5sendmail-07.eml → email-v5sendmail-07.eml} +0 -0
  382. data/set-of-emails/maildir/bsd/{msp-us-verizon-01.eml → email-verizon-01.eml} +0 -0
  383. data/set-of-emails/maildir/bsd/{msp-us-verizon-02.eml → email-verizon-02.eml} +0 -0
  384. data/set-of-emails/maildir/bsd/{mta-x1-01.eml → email-x1-01.eml} +0 -0
  385. data/set-of-emails/maildir/bsd/{mta-x1-02.eml → email-x1-02.eml} +0 -0
  386. data/set-of-emails/maildir/bsd/{mta-x2-01.eml → email-x2-01.eml} +0 -0
  387. data/set-of-emails/maildir/bsd/{mta-x2-02.eml → email-x2-02.eml} +0 -0
  388. data/set-of-emails/maildir/bsd/{mta-x2-03.eml → email-x2-03.eml} +0 -0
  389. data/set-of-emails/maildir/bsd/{mta-x2-04.eml → email-x2-04.eml} +0 -0
  390. data/set-of-emails/maildir/bsd/{mta-x2-05.eml → email-x2-05.eml} +0 -0
  391. data/set-of-emails/maildir/bsd/{mta-x3-01.eml → email-x3-01.eml} +0 -0
  392. data/set-of-emails/maildir/bsd/{mta-x3-02.eml → email-x3-02.eml} +0 -0
  393. data/set-of-emails/maildir/bsd/{mta-x3-03.eml → email-x3-03.eml} +0 -0
  394. data/set-of-emails/maildir/bsd/{mta-x3-04.eml → email-x3-04.eml} +0 -0
  395. data/set-of-emails/maildir/bsd/{mta-x4-01.eml → email-x4-01.eml} +0 -0
  396. data/set-of-emails/maildir/bsd/{mta-x4-02.eml → email-x4-02.eml} +0 -0
  397. data/set-of-emails/maildir/bsd/{mta-x4-03.eml → email-x4-03.eml} +0 -0
  398. data/set-of-emails/maildir/bsd/{mta-x4-04.eml → email-x4-04.eml} +0 -0
  399. data/set-of-emails/maildir/bsd/{mta-x4-05.eml → email-x4-05.eml} +0 -0
  400. data/set-of-emails/maildir/bsd/{mta-x4-06.eml → email-x4-06.eml} +0 -0
  401. data/set-of-emails/maildir/bsd/{mta-x4-07.eml → email-x4-07.eml} +0 -0
  402. data/set-of-emails/maildir/bsd/{mta-x5-01.eml → email-x5-01.eml} +0 -0
  403. data/set-of-emails/maildir/bsd/{msp-us-yahoo-01.eml → email-yahoo-01.eml} +0 -0
  404. data/set-of-emails/maildir/bsd/{msp-us-yahoo-02.eml → email-yahoo-02.eml} +0 -0
  405. data/set-of-emails/maildir/bsd/{msp-us-yahoo-03.eml → email-yahoo-03.eml} +0 -0
  406. data/set-of-emails/maildir/bsd/{msp-us-yahoo-04.eml → email-yahoo-04.eml} +0 -0
  407. data/set-of-emails/maildir/bsd/{msp-us-yahoo-05.eml → email-yahoo-05.eml} +0 -0
  408. data/set-of-emails/maildir/bsd/{msp-ru-yandex-01.eml → email-yandex-01.eml} +0 -0
  409. data/set-of-emails/maildir/bsd/{msp-ru-yandex-02.eml → email-yandex-02.eml} +0 -0
  410. data/set-of-emails/maildir/bsd/{msp-ru-yandex-03.eml → email-yandex-03.eml} +0 -0
  411. data/set-of-emails/maildir/bsd/{msp-us-zoho-01.eml → email-zoho-01.eml} +0 -0
  412. data/set-of-emails/maildir/bsd/{msp-us-zoho-02.eml → email-zoho-02.eml} +0 -0
  413. data/set-of-emails/maildir/bsd/{msp-us-zoho-03.eml → email-zoho-03.eml} +0 -0
  414. data/set-of-emails/maildir/bsd/{msp-us-zoho-04.eml → email-zoho-04.eml} +0 -0
  415. data/set-of-emails/maildir/bsd/{msp-us-zoho-05.eml → email-zoho-05.eml} +0 -0
  416. data/set-of-emails/maildir/bsd/rfc3464-31.eml +141 -0
  417. data/set-of-emails/maildir/bsd/rfc3464-32.eml +158 -0
  418. data/set-of-emails/maildir/dos/{mta-activehunter-01.eml → email-activehunter-01.eml} +0 -0
  419. data/set-of-emails/maildir/dos/{msp-us-amazonses-01.eml → email-amazonses-01.eml} +0 -0
  420. data/set-of-emails/maildir/dos/{msp-us-amazonworkmail-01.eml → email-amazonworkmail-01.eml} +0 -0
  421. data/set-of-emails/maildir/dos/{msp-us-aol-01.eml → email-aol-01.eml} +0 -0
  422. data/set-of-emails/maildir/dos/{mta-apachejames-01.eml → email-apachejames-01.eml} +0 -0
  423. data/set-of-emails/maildir/dos/{msp-us-bigfoot-01.eml → email-bigfoot-01.eml} +0 -0
  424. data/set-of-emails/maildir/dos/{msp-jp-biglobe-01.eml → email-biglobe-01.eml} +0 -0
  425. data/set-of-emails/maildir/dos/{mta-courier-01.eml → email-courier-01.eml} +0 -0
  426. data/set-of-emails/maildir/dos/{mta-domino-01.eml → email-domino-01.eml} +0 -0
  427. data/set-of-emails/maildir/dos/{msp-de-einsundeins-01.eml → email-einsundeins-01.eml} +0 -0
  428. data/set-of-emails/maildir/dos/{mta-exchange-01.eml → email-exchange-01.eml} +0 -0
  429. data/set-of-emails/maildir/dos/{mta-exchange2003-01.eml → email-exchange2003-01.eml} +0 -0
  430. data/set-of-emails/maildir/dos/{mta-exchange2007-01.eml → email-exchange2007-01.eml} +0 -0
  431. data/set-of-emails/maildir/dos/{mta-exim-01.eml → email-exim-01.eml} +0 -0
  432. data/set-of-emails/maildir/dos/{msp-jp-ezweb-01.eml → email-ezweb-01.eml} +0 -0
  433. data/set-of-emails/maildir/dos/{msp-us-facebook-01.eml → email-facebook-01.eml} +0 -0
  434. data/set-of-emails/maildir/dos/{msp-de-gmx-01.eml → email-gmx-01.eml} +0 -0
  435. data/set-of-emails/maildir/dos/{msp-us-google-01.eml → email-google-01.eml} +0 -0
  436. data/set-of-emails/maildir/dos/{mta-imailserver-01.eml → email-imailserver-01.eml} +0 -0
  437. data/set-of-emails/maildir/dos/{mta-interscanmss-01.eml → email-interscanmss-01.eml} +0 -0
  438. data/set-of-emails/maildir/dos/{msp-jp-kddi-01.eml → email-kddi-01.eml} +0 -0
  439. data/set-of-emails/maildir/dos/{mta-mailfoundry-01.eml → email-mailfoundry-01.eml} +0 -0
  440. data/set-of-emails/maildir/dos/{mta-mailmarshalsmtp-01.eml → email-mailmarshalsmtp-01.eml} +0 -0
  441. data/set-of-emails/maildir/dos/{msp-ru-mailru-01.eml → email-mailru-01.eml} +0 -0
  442. data/set-of-emails/maildir/dos/{mta-mcafee-01.eml → email-mcafee-01.eml} +0 -0
  443. data/set-of-emails/maildir/dos/{msp-uk-messagelabs-01.eml → email-messagelabs-01.eml} +0 -0
  444. data/set-of-emails/maildir/dos/{mta-messagingserver-01.eml → email-messagingserver-01.eml} +0 -0
  445. data/set-of-emails/maildir/dos/{mta-mfilter-01.eml → email-mfilter-01.eml} +0 -0
  446. data/set-of-emails/maildir/dos/{mta-mxlogic-01.eml → email-mxlogic-01.eml} +0 -0
  447. data/set-of-emails/maildir/dos/{mta-notes-01.eml → email-notes-01.eml} +0 -0
  448. data/set-of-emails/maildir/dos/{msp-us-office365-01.eml → email-office365-01.eml} +0 -0
  449. data/set-of-emails/maildir/dos/{mta-opensmtpd-01.eml → email-opensmtpd-01.eml} +0 -0
  450. data/set-of-emails/maildir/dos/{msp-us-outlook-01.eml → email-outlook-01.eml} +0 -0
  451. data/set-of-emails/maildir/dos/{mta-postfix-01.eml → email-postfix-01.eml} +0 -0
  452. data/set-of-emails/maildir/dos/{mta-qmail-01.eml → email-qmail-01.eml} +0 -0
  453. data/set-of-emails/maildir/dos/{msp-us-receivingses-01.eml → email-receivingses-01.eml} +0 -0
  454. data/set-of-emails/maildir/dos/{msp-us-sendgrid-01.eml → email-sendgrid-01.eml} +0 -0
  455. data/set-of-emails/maildir/dos/{mta-sendmail-01.eml → email-sendmail-01.eml} +0 -0
  456. data/set-of-emails/maildir/dos/{mta-surfcontrol-01.eml → email-surfcontrol-01.eml} +0 -0
  457. data/set-of-emails/maildir/dos/{mta-v5sendmail-01.eml → email-v5sendmail-01.eml} +0 -0
  458. data/set-of-emails/maildir/dos/{msp-us-verizon-01.eml → email-verizon-01.eml} +0 -0
  459. data/set-of-emails/maildir/dos/{mta-x1-01.eml → email-x1-01.eml} +0 -0
  460. data/set-of-emails/maildir/dos/{mta-x2-01.eml → email-x2-01.eml} +0 -0
  461. data/set-of-emails/maildir/dos/{mta-x3-01.eml → email-x3-01.eml} +0 -0
  462. data/set-of-emails/maildir/dos/{mta-x4-01.eml → email-x4-01.eml} +0 -0
  463. data/set-of-emails/maildir/dos/{mta-x5-01.eml → email-x5-01.eml} +0 -0
  464. data/set-of-emails/maildir/dos/{msp-us-yahoo-01.eml → email-yahoo-01.eml} +0 -0
  465. data/set-of-emails/maildir/dos/{msp-ru-yandex-01.eml → email-yandex-01.eml} +0 -0
  466. data/set-of-emails/maildir/dos/{msp-us-zoho-01.eml → email-zoho-01.eml} +0 -0
  467. data/set-of-emails/maildir/mac/{mta-activehunter-01.eml → email-activehunter-01.eml} +0 -0
  468. data/set-of-emails/maildir/mac/{msp-us-amazonses-01.eml → email-amazonses-01.eml} +0 -0
  469. data/set-of-emails/maildir/mac/{msp-us-amazonworkmail-01.eml → email-amazonworkmail-01.eml} +0 -0
  470. data/set-of-emails/maildir/mac/{msp-us-aol-01.eml → email-aol-01.eml} +0 -0
  471. data/set-of-emails/maildir/mac/{mta-apachejames-01.eml → email-apachejames-01.eml} +0 -0
  472. data/set-of-emails/maildir/mac/{msp-us-bigfoot-01.eml → email-bigfoot-01.eml} +0 -0
  473. data/set-of-emails/maildir/mac/{msp-jp-biglobe-01.eml → email-biglobe-01.eml} +0 -0
  474. data/set-of-emails/maildir/mac/{mta-courier-01.eml → email-courier-01.eml} +0 -0
  475. data/set-of-emails/maildir/mac/{mta-domino-01.eml → email-domino-01.eml} +0 -0
  476. data/set-of-emails/maildir/mac/{msp-de-einsundeins-01.eml → email-einsundeins-01.eml} +0 -0
  477. data/set-of-emails/maildir/mac/{mta-exchange-01.eml → email-exchange-01.eml} +0 -0
  478. data/set-of-emails/maildir/mac/{mta-exchange2003-01.eml → email-exchange2003-01.eml} +0 -0
  479. data/set-of-emails/maildir/mac/{mta-exchange2007-01.eml → email-exchange2007-01.eml} +0 -0
  480. data/set-of-emails/maildir/mac/{mta-exim-01.eml → email-exim-01.eml} +0 -0
  481. data/set-of-emails/maildir/mac/{msp-jp-ezweb-01.eml → email-ezweb-01.eml} +0 -0
  482. data/set-of-emails/maildir/mac/{msp-us-facebook-01.eml → email-facebook-01.eml} +0 -0
  483. data/set-of-emails/maildir/mac/{msp-de-gmx-01.eml → email-gmx-01.eml} +0 -0
  484. data/set-of-emails/maildir/mac/{msp-us-google-01.eml → email-google-01.eml} +0 -0
  485. data/set-of-emails/maildir/mac/{mta-imailserver-01.eml → email-imailserver-01.eml} +0 -0
  486. data/set-of-emails/maildir/mac/{mta-interscanmss-01.eml → email-interscanmss-01.eml} +0 -0
  487. data/set-of-emails/maildir/mac/{msp-jp-kddi-01.eml → email-kddi-01.eml} +0 -0
  488. data/set-of-emails/maildir/mac/{mta-mailfoundry-01.eml → email-mailfoundry-01.eml} +0 -0
  489. data/set-of-emails/maildir/mac/{mta-mailmarshalsmtp-01.eml → email-mailmarshalsmtp-01.eml} +0 -0
  490. data/set-of-emails/maildir/mac/{msp-ru-mailru-01.eml → email-mailru-01.eml} +0 -0
  491. data/set-of-emails/maildir/mac/{mta-mcafee-01.eml → email-mcafee-01.eml} +0 -0
  492. data/set-of-emails/maildir/mac/{msp-uk-messagelabs-01.eml → email-messagelabs-01.eml} +0 -0
  493. data/set-of-emails/maildir/mac/{mta-messagingserver-01.eml → email-messagingserver-01.eml} +0 -0
  494. data/set-of-emails/maildir/mac/{mta-mfilter-01.eml → email-mfilter-01.eml} +0 -0
  495. data/set-of-emails/maildir/mac/{mta-mxlogic-01.eml → email-mxlogic-01.eml} +0 -0
  496. data/set-of-emails/maildir/mac/{mta-notes-01.eml → email-notes-01.eml} +0 -0
  497. data/set-of-emails/maildir/mac/{msp-us-office365-01.eml → email-office365-01.eml} +0 -0
  498. data/set-of-emails/maildir/mac/{mta-opensmtpd-01.eml → email-opensmtpd-01.eml} +0 -0
  499. data/set-of-emails/maildir/mac/{msp-us-outlook-01.eml → email-outlook-01.eml} +0 -0
  500. data/set-of-emails/maildir/mac/{mta-postfix-01.eml → email-postfix-01.eml} +0 -0
  501. data/set-of-emails/maildir/mac/{mta-qmail-01.eml → email-qmail-01.eml} +0 -0
  502. data/set-of-emails/maildir/mac/{msp-us-receivingses-01.eml → email-receivingses-01.eml} +0 -0
  503. data/set-of-emails/maildir/mac/{msp-us-sendgrid-01.eml → email-sendgrid-01.eml} +0 -0
  504. data/set-of-emails/maildir/mac/{mta-sendmail-01.eml → email-sendmail-01.eml} +0 -0
  505. data/set-of-emails/maildir/mac/{mta-surfcontrol-01.eml → email-surfcontrol-01.eml} +0 -0
  506. data/set-of-emails/maildir/mac/{mta-v5sendmail-01.eml → email-v5sendmail-01.eml} +0 -0
  507. data/set-of-emails/maildir/mac/{msp-us-verizon-01.eml → email-verizon-01.eml} +0 -0
  508. data/set-of-emails/maildir/mac/{mta-x1-01.eml → email-x1-01.eml} +0 -0
  509. data/set-of-emails/maildir/mac/{mta-x2-01.eml → email-x2-01.eml} +0 -0
  510. data/set-of-emails/maildir/mac/{mta-x3-01.eml → email-x3-01.eml} +0 -0
  511. data/set-of-emails/maildir/mac/{mta-x4-01.eml → email-x4-01.eml} +0 -0
  512. data/set-of-emails/maildir/mac/{mta-x5-01.eml → email-x5-01.eml} +0 -0
  513. data/set-of-emails/maildir/mac/{msp-us-yahoo-01.eml → email-yahoo-01.eml} +0 -0
  514. data/set-of-emails/maildir/mac/{msp-ru-yandex-01.eml → email-yandex-01.eml} +0 -0
  515. data/set-of-emails/maildir/mac/{msp-us-zoho-01.eml → email-zoho-01.eml} +0 -0
  516. metadata +483 -478
  517. data/lib/sisimai/ced/us/amazonses.rb +0 -269
  518. data/lib/sisimai/ced/us/sendgrid.rb +0 -86
  519. data/lib/sisimai/msp/de/einsundeins.rb +0 -146
  520. data/lib/sisimai/msp/de/gmx.rb +0 -170
  521. data/lib/sisimai/msp/jp/biglobe.rb +0 -150
  522. data/lib/sisimai/msp/jp/ezweb.rb +0 -262
  523. data/lib/sisimai/msp/jp/kddi.rb +0 -168
  524. data/lib/sisimai/msp/ru/mailru.rb +0 -274
  525. data/lib/sisimai/msp/ru/yandex.rb +0 -207
  526. data/lib/sisimai/msp/uk/messagelabs.rb +0 -216
  527. data/lib/sisimai/msp/us/amazonses.rb +0 -237
  528. data/lib/sisimai/msp/us/amazonworkmail.rb +0 -195
  529. data/lib/sisimai/msp/us/aol.rb +0 -211
  530. data/lib/sisimai/msp/us/bigfoot.rb +0 -210
  531. data/lib/sisimai/msp/us/facebook.rb +0 -277
  532. data/lib/sisimai/msp/us/google.rb +0 -323
  533. data/lib/sisimai/msp/us/gsuite.rb +0 -277
  534. data/lib/sisimai/msp/us/office365.rb +0 -264
  535. data/lib/sisimai/msp/us/outlook.rb +0 -209
  536. data/lib/sisimai/msp/us/receivingses.rb +0 -224
  537. data/lib/sisimai/msp/us/sendgrid.rb +0 -226
  538. data/lib/sisimai/msp/us/verizon.rb +0 -267
  539. data/lib/sisimai/msp/us/yahoo.rb +0 -150
  540. data/lib/sisimai/msp/us/zoho.rb +0 -170
  541. data/lib/sisimai/mta/activehunter.rb +0 -126
  542. data/lib/sisimai/mta/apachejames.rb +0 -172
  543. data/lib/sisimai/mta/courier.rb +0 -268
  544. data/lib/sisimai/mta/domino.rb +0 -177
  545. data/lib/sisimai/mta/exchange2003.rb +0 -287
  546. data/lib/sisimai/mta/exchange2007.rb +0 -182
  547. data/lib/sisimai/mta/exim.rb +0 -525
  548. data/lib/sisimai/mta/imailserver.rb +0 -182
  549. data/lib/sisimai/mta/interscanmss.rb +0 -149
  550. data/lib/sisimai/mta/mailfoundry.rb +0 -137
  551. data/lib/sisimai/mta/mailmarshalsmtp.rb +0 -176
  552. data/lib/sisimai/mta/mcafee.rb +0 -172
  553. data/lib/sisimai/mta/messagingserver.rb +0 -208
  554. data/lib/sisimai/mta/mfilter.rb +0 -167
  555. data/lib/sisimai/mta/mxlogic.rb +0 -255
  556. data/lib/sisimai/mta/notes.rb +0 -183
  557. data/lib/sisimai/mta/opensmtpd.rb +0 -195
  558. data/lib/sisimai/mta/postfix.rb +0 -312
  559. data/lib/sisimai/mta/qmail.rb +0 -307
  560. data/lib/sisimai/mta/sendmail.rb +0 -293
  561. data/lib/sisimai/mta/surfcontrol.rb +0 -164
  562. data/lib/sisimai/mta/userdefined.rb +0 -132
  563. data/lib/sisimai/mta/v5sendmail.rb +0 -210
  564. data/lib/sisimai/mta/x1.rb +0 -127
  565. data/lib/sisimai/mta/x2.rb +0 -128
  566. data/lib/sisimai/mta/x3.rb +0 -144
  567. data/lib/sisimai/mta/x4.rb +0 -328
  568. data/lib/sisimai/mta/x5.rb +0 -181
  569. data/set-of-emails/maildir/bsd/mta-README.md +0 -319
  570. data/set-of-emails/maildir/dos/ced-us-amazonses-01.eml +0 -47
  571. data/set-of-emails/maildir/mac/ced-us-amazonses-01.eml +0 -2
@@ -0,0 +1,178 @@
1
+ module Sisimai::Bite::Email
2
+ module Exchange2007
3
+ # Sisimai::Bite::Email::Exchange2007 parses a bounce email which created by
4
+ # Microsoft Exchange Server 2007.
5
+ # Methods in the module are called from only Sisimai::Message.
6
+ class << self
7
+ # Imported from p5-Sisimail/lib/Sisimai/Bite/Email/Exchange2007.pm
8
+ require 'sisimai/bite/email'
9
+
10
+ Re0 = {
11
+ :'subject' => %r/\AUndeliverable:/,
12
+ :'content-language' => %r/\A[a-z]{2}(?:[-][A-Z]{2})?\z/,
13
+ }
14
+ Re1 = {
15
+ :begin => %r/[ ]Microsoft[ ]Exchange[ ]Server[ ]20\d{2}/,
16
+ :error => %r/[ ]((?:RESOLVER|QUEUE)[.][A-Za-z]+(?:[.]\w+)?);/,
17
+ :rhost => %r/\AGenerating[ ]server:[ ]?(.*)/,
18
+ :rfc822 => %r/\AOriginal message headers:/,
19
+ :endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
20
+ }
21
+ NDRSubject = {
22
+ :'SMTPSEND.DNS.NonExistentDomain'=> 'hostunknown', # 554 5.4.4 SMTPSEND.DNS.NonExistentDomain
23
+ :'SMTPSEND.DNS.MxLoopback' => 'networkerror', # 554 5.4.4 SMTPSEND.DNS.MxLoopback
24
+ :'RESOLVER.ADR.BadPrimary' => 'systemerror', # 550 5.2.0 RESOLVER.ADR.BadPrimary
25
+ :'RESOLVER.ADR.RecipNotFound' => 'userunknown', # 550 5.1.1 RESOLVER.ADR.RecipNotFound
26
+ :'RESOLVER.ADR.ExRecipNotFound' => 'userunknown', # 550 5.1.1 RESOLVER.ADR.ExRecipNotFound
27
+ :'RESOLVER.ADR.RecipLimit' => 'toomanyconn', # 550 5.5.3 RESOLVER.ADR.RecipLimit
28
+ :'RESOLVER.ADR.InvalidInSmtp' => 'systemerror', # 550 5.1.0 RESOLVER.ADR.InvalidInSmtp
29
+ :'RESOLVER.ADR.Ambiguous' => 'systemerror', # 550 5.1.4 RESOLVER.ADR.Ambiguous, 420 4.2.0 RESOLVER.ADR.Ambiguous
30
+ :'RESOLVER.RST.AuthRequired' => 'filtered', # 550 5.7.1 RESOLVER.RST.AuthRequired
31
+ :'RESOLVER.RST.NotAuthorized' => 'rejected', # 550 5.7.1 RESOLVER.RST.NotAuthorized
32
+ :'RESOLVER.RST.RecipSizeLimit' => 'mesgtoobig', # 550 5.2.3 RESOLVER.RST.RecipSizeLimit
33
+ :'QUEUE.Expired' => 'expired', # 550 4.4.7 QUEUE.Expired
34
+ }
35
+ Indicators = Sisimai::Bite::Email.INDICATORS
36
+
37
+ def description; return 'Microsoft Exchange Server 2007'; end
38
+ def smtpagent; return Sisimai::Bite.smtpagent(self); end
39
+ def headerlist; return ['Content-Language']; end
40
+ def pattern; return Re0; end
41
+
42
+ # Parse bounce messages from Microsoft Exchange Server 2007
43
+ # @param [Hash] mhead Message headers of a bounce email
44
+ # @options mhead [String] from From header
45
+ # @options mhead [String] date Date header
46
+ # @options mhead [String] subject Subject header
47
+ # @options mhead [Array] received Received headers
48
+ # @options mhead [String] others Other required headers
49
+ # @param [String] mbody Message body of a bounce email
50
+ # @return [Hash, Nil] Bounce data list and message/rfc822
51
+ # part or nil if it failed to parse or
52
+ # the arguments are missing
53
+ def scan(mhead, mbody)
54
+ return nil unless mhead
55
+ return nil unless mbody
56
+
57
+ return nil unless mhead['subject'] =~ Re0[:'subject']
58
+ return nil unless mhead['content-language']
59
+ return nil unless mhead['content-language'] =~ Re0[:'content-language']
60
+
61
+ dscontents = [Sisimai::Bite.DELIVERYSTATUS]
62
+ hasdivided = mbody.split("\n")
63
+ rfc822list = [] # (Array) Each line in message/rfc822 part string
64
+ blanklines = 0 # (Integer) The number of blank lines
65
+ readcursor = 0 # (Integer) Points the current cursor position
66
+ recipients = 0 # (Integer) The number of 'Final-Recipient' header
67
+ connvalues = 0 # (Integer) Flag, 1 if all the value of $connheader have been set
68
+ connheader = {
69
+ 'rhost' => '', # The value of Reporting-MTA header or "Generating Server:"
70
+ }
71
+ v = nil
72
+
73
+ hasdivided.each do |e|
74
+ if readcursor.zero?
75
+ # Beginning of the bounce message or delivery status part
76
+ if e =~ Re1[:begin]
77
+ readcursor |= Indicators[:deliverystatus]
78
+ next
79
+ end
80
+ end
81
+
82
+ if readcursor & Indicators[:'message-rfc822'] == 0
83
+ # Beginning of the original message part
84
+ if e =~ Re1[:rfc822]
85
+ readcursor |= Indicators[:'message-rfc822']
86
+ next
87
+ end
88
+ end
89
+
90
+ if readcursor & Indicators[:'message-rfc822'] > 0
91
+ # After "message/rfc822"
92
+ if e.empty?
93
+ blanklines += 1
94
+ break if blanklines > 1
95
+ next
96
+ end
97
+ rfc822list << e
98
+
99
+ else
100
+ # Before "message/rfc822"
101
+ next if readcursor & Indicators[:deliverystatus] == 0
102
+
103
+ if connvalues == connheader.keys.size
104
+ # Diagnostic information for administrators:
105
+ #
106
+ # Generating server: mta2.neko.example.jp
107
+ #
108
+ # kijitora@example.jp
109
+ # #550 5.1.1 RESOLVER.ADR.RecipNotFound; not found ##
110
+ #
111
+ # Original message headers:
112
+ v = dscontents[-1]
113
+
114
+ if cv = e.match(/\A([^ @]+[@][^ @]+)\z/)
115
+ # kijitora@example.jp
116
+ if v['recipient']
117
+ # There are multiple recipient addresses in the message body.
118
+ dscontents << Sisimai::Bite.DELIVERYSTATUS
119
+ v = dscontents[-1]
120
+ end
121
+ v['recipient'] = cv[1]
122
+ v['diagnosis'] = ''
123
+ recipients += 1
124
+
125
+ elsif cv = e.match(/\A[#]([45]\d{2})[ ]([45][.]\d[.]\d+)[ ].+\z/)
126
+ # #550 5.1.1 RESOLVER.ADR.RecipNotFound; not found ##
127
+ # #550 5.2.3 RESOLVER.RST.RecipSizeLimit; message too large for this recipien=
128
+ # t ##
129
+ v['replycode'] = cv[1]
130
+ v['status'] = cv[2]
131
+ v['diagnosis'] = e
132
+
133
+ else
134
+ if v['diagnosis'].to_s.size > 0 && v['diagnosis'] =~ /=\z/
135
+ # Continued line of error messages
136
+ v['diagnosis'] = v['diagnosis'].sub(/=\z/, '')
137
+ v['diagnosis'] += e
138
+ end
139
+ end
140
+ else
141
+ # Diagnostic information for administrators:
142
+ #
143
+ # Generating server: mta22.neko.example.org
144
+ if cv = e.match(Re1[:rhost])
145
+ # Generating server: mta22.neko.example.org
146
+ next if connheader['rhost'].size > 0
147
+ connheader['rhost'] = cv[1]
148
+ connvalues += 1
149
+ end
150
+ end
151
+ end
152
+ end
153
+ return nil if recipients.zero?
154
+
155
+ require 'sisimai/string'
156
+ dscontents.map do |e|
157
+ if cv = e['diagnosis'].match(Re1[:error])
158
+ # #550 5.1.1 RESOLVER.ADR.RecipNotFound; not found ##
159
+ f = cv[1]
160
+ NDRSubject.each_key do |r|
161
+ # Try to match with error subject strings
162
+ next unless f == r.to_s
163
+ e['reason'] = NDRSubject[r]
164
+ break
165
+ end
166
+ end
167
+ e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
168
+ e['agent'] = self.smtpagent
169
+ end
170
+
171
+ rfc822part = Sisimai::RFC5322.weedout(rfc822list)
172
+ return { 'ds' => dscontents, 'rfc822' => rfc822part }
173
+ end
174
+
175
+ end
176
+ end
177
+ end
178
+
@@ -0,0 +1,522 @@
1
+ module Sisimai::Bite::Email
2
+ module Exim
3
+ # Sisimai::Bite::Email::Exim parses a bounce email which created by Exim.
4
+ # Methods in the module are called from only Sisimai::Message.
5
+ class << self
6
+ # Imported from p5-Sisimail/lib/Sisimai/Bite/Email/Exim.pm
7
+ require 'sisimai/bite/email'
8
+
9
+ ReE = {
10
+ :from => %r/[@].+[.]mail[.]ru[>]?/,
11
+ }
12
+ Re0 = {
13
+ :from => %r/\AMail Delivery System/,
14
+ :subject => %r{(?:
15
+ Mail[ ]delivery[ ]failed(:[ ]returning[ ]message[ ]to[ ]sender)?
16
+ |Warning:[ ]message[ ].+[ ]delayed[ ]+
17
+ |Delivery[ ]Status[ ]Notification
18
+ |Mail[ ]failure
19
+ |Message[ ]frozen
20
+ |error[(]s[)][ ]in[ ]forwarding[ ]or[ ]filtering
21
+ )
22
+ }x,
23
+ # :'message-id' => %r/\A[<]\w+[-]\w+[-]\w+[@].+\z/,
24
+ # Message-Id: <E1P1YNN-0003AD-Ga@example.org>
25
+ }
26
+
27
+ # Error text regular expressions which defined in exim/src/deliver.c
28
+ #
29
+ # deliver.c:6292| fprintf(f,
30
+ # deliver.c:6293|"This message was created automatically by mail delivery software.\n");
31
+ # deliver.c:6294| if (to_sender)
32
+ # deliver.c:6295| {
33
+ # deliver.c:6296| fprintf(f,
34
+ # deliver.c:6297|"\nA message that you sent could not be delivered to one or more of its\n"
35
+ # deliver.c:6298|"recipients. This is a permanent error. The following address(es) failed:\n");
36
+ # deliver.c:6299| }
37
+ # deliver.c:6300| else
38
+ # deliver.c:6301| {
39
+ # deliver.c:6302| fprintf(f,
40
+ # deliver.c:6303|"\nA message sent by\n\n <%s>\n\n"
41
+ # deliver.c:6304|"could not be delivered to one or more of its recipients. The following\n"
42
+ # deliver.c:6305|"address(es) failed:\n", sender_address);
43
+ # deliver.c:6306| }
44
+ #
45
+ # deliver.c:6423| if (bounce_return_body) fprintf(f,
46
+ # deliver.c:6424|"------ This is a copy of the message, including all the headers. ------\n");
47
+ # deliver.c:6425| else fprintf(f,
48
+ # deliver.c:6426|"------ This is a copy of the message's headers. ------\n");
49
+ Re1 = {
50
+ :alias => %r/\A([ ]+an[ ]undisclosed[ ]address)\z/,
51
+ :frozen => %r/\AMessage .+ (?:has been frozen|was frozen on arrival)/,
52
+ :rfc822 => %r{\A(?:
53
+ [-]+[ ]This[ ]is[ ]a[ ]copy[ ]of[ ]the[ ]message.+headers[.][ ][-]+
54
+ |Content-Type:[ ]*message/rfc822
55
+ )\z
56
+ }x,
57
+ :begin => %r{\A(?>
58
+ This[ ]message[ ]was[ ]created[ ]automatically[ ]by[ ]mail[ ]delivery[ ]software[.]
59
+ |A[ ]message[ ]that[ ]you[ ]sent[ ]was[ ]rejected[ ]by[ ]the[ ]local[ ]scanning[ ]code
60
+ |Message[ ].+[ ](?:has[ ]been[ ]frozen|was[ ]frozen[ ]on[ ]arrival)
61
+ |The[ ].+[ ]router[ ]encountered[ ]the[ ]following[ ]error[(]s[)]:
62
+ )
63
+ }x,
64
+ :deliverystatus => %r|\AContent-type: message/delivery-status|,
65
+ :endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
66
+ }
67
+
68
+ ReCommand = [
69
+ # transports/smtp.c:564| *message = US string_sprintf("SMTP error from remote mail server after %s%s: "
70
+ # transports/smtp.c:837| string_sprintf("SMTP error from remote mail server after RCPT TO:<%s>: "
71
+ %r/SMTP error from remote (?:mail server|mailer) after ([A-Za-z]{4})/,
72
+ %r/SMTP error from remote (?:mail server|mailer) after end of ([A-Za-z]{4})/,
73
+ %r/LMTP error after ([A-Za-z]{4})/,
74
+ %r/LMTP error after end of ([A-Za-z]{4})/,
75
+ ]
76
+
77
+ # find exim/ -type f -exec grep 'message = US' {} /dev/null \;
78
+ ReFailure = {
79
+ # route.c:1158| DEBUG(D_uid) debug_printf("getpwnam() returned NULL (user not found)\n");
80
+ userunknown: %r/user[ ]not[ ]found/x,
81
+ # transports/smtp.c:3524| addr->message = US"all host address lookups failed permanently";
82
+ # routers/dnslookup.c:331| addr->message = US"all relevant MX records point to non-existent hosts";
83
+ # route.c:1826| uschar *message = US"Unrouteable address";
84
+ hostunknown: %r{(?>
85
+ all[ ](?:
86
+ host[ ]address[ ]lookups[ ]failed[ ]permanently
87
+ |relevant[ ]MX[ ]records[ ]point[ ]to[ ]non[-]existent[ ]hosts
88
+ )
89
+ |Unrouteable[ ]address
90
+ )
91
+ }x,
92
+ # transports/appendfile.c:2567| addr->user_message = US"mailbox is full";
93
+ # transports/appendfile.c:3049| addr->message = string_sprintf("mailbox is full "
94
+ # transports/appendfile.c:3050| "(quota exceeded while writing to file %s)", filename);
95
+ mailboxfull: %r/(?:mailbox[ ]is[ ]full:?|error:[ ]quota[ ]exceed)/x,
96
+ # routers/dnslookup.c:328| addr->message = US"an MX or SRV record indicated no SMTP service";
97
+ # transports/smtp.c:3502| addr->message = US"no host found for existing SMTP connection";
98
+ notaccept: %r{(?:
99
+ an[ ]MX[ ]or[ ]SRV[ ]record[ ]indicated[ ]no[ ]SMTP[ ]service
100
+ |no[ ]host[ ]found[ ]for[ ]existing[ ]SMTP[ ]connection
101
+ )
102
+ }x,
103
+ # deliver.c:5614| addr->message = US"delivery to file forbidden";
104
+ # deliver.c:5624| addr->message = US"delivery to pipe forbidden";
105
+ # transports/pipe.c:1156| addr->user_message = US"local delivery failed";
106
+ systemerror: %r{(?>
107
+ delivery[ ]to[ ](?:file|pipe)[ ]forbidden
108
+ |local[ ]delivery[ ]failed
109
+ |LMTP[ ]error[ ]after[ ]
110
+ )
111
+ }x,
112
+ # deliver.c:5425| new->message = US"Too many \"Received\" headers - suspected mail loop";
113
+ contenterror: %r/Too[ ]many[ ]["]Received["][ ]headers/x,
114
+ }
115
+
116
+ # retry.c:902| addr->message = (addr->message == NULL)? US"retry timeout exceeded" :
117
+ # deliver.c:7475| "No action is required on your part. Delivery attempts will continue for\n"
118
+ # smtp.c:3508| US"retry time not reached for any host after a long failure period" :
119
+ # smtp.c:3508| US"all hosts have been failing for a long time and were last tried "
120
+ # "after this message arrived";
121
+ # deliver.c:7459| print_address_error(addr, f, US"Delay reason: ");
122
+ # deliver.c:7586| "Message %s has been frozen%s.\nThe sender is <%s>.\n", message_id,
123
+ # receive.c:4021| moan_tell_someone(freeze_tell, NULL, US"Message frozen on arrival",
124
+ # receive.c:4022| "Message %s was frozen on arrival by %s.\nThe sender is <%s>.\n",
125
+ ReDelayed = %r{(?:
126
+ retry[ ]timeout[ ]exceeded
127
+ |No[ ]action[ ]is[ ]required[ ]on[ ]your[ ]part
128
+ |retry[ ]time[ ]not[ ]reached[ ]for[ ]any[ ]host[ ]after[ ]a[ ]long[ ]failure[ ]period
129
+ |all[ ]hosts[ ]have[ ]been[ ]failing[ ]for[ ]a[ ]long[ ]time[ ]and[ ]were[ ]last[ ]tried
130
+ |Delay[ ]reason:[ ]
131
+ |Message[ ].+[ ](?:has[ ]been[ ]frozen|was[ ]frozen[ ]on[ ]arrival[ ]by[ ])
132
+ )
133
+ }x
134
+ Indicators = Sisimai::Bite::Email.INDICATORS
135
+
136
+ def description; return 'Exim'; end
137
+ def smtpagent; return Sisimai::Bite.smtpagent(self); end
138
+ def headerlist; return ['X-Failed-Recipients']; end
139
+ def pattern; return Re0; end
140
+
141
+ # Parse bounce messages from Exim
142
+ # @param [Hash] mhead Message headers of a bounce email
143
+ # @options mhead [String] from From header
144
+ # @options mhead [String] date Date header
145
+ # @options mhead [String] subject Subject header
146
+ # @options mhead [Array] received Received headers
147
+ # @options mhead [String] others Other required headers
148
+ # @param [String] mbody Message body of a bounce email
149
+ # @return [Hash, Nil] Bounce data list and message/rfc822
150
+ # part or nil if it failed to parse or
151
+ # the arguments are missing
152
+ def scan(mhead, mbody)
153
+ return nil unless mhead
154
+ return nil unless mbody
155
+ return nil if mhead['from'] =~ ReE[:from]
156
+ return nil unless mhead['from'] =~ Re0[:from]
157
+ return nil unless mhead['subject'] =~ Re0[:subject]
158
+
159
+ dscontents = [Sisimai::Bite.DELIVERYSTATUS]
160
+ hasdivided = mbody.split("\n")
161
+ rfc822list = [] # (Array) Each line in message/rfc822 part string
162
+ blanklines = 0 # (Integer) The number of blank lines
163
+ readcursor = 0 # (Integer) Points the current cursor position
164
+ recipients = 0 # (Integer) The number of 'Final-Recipient' header
165
+ localhost0 = '' # (String) Local MTA
166
+ boundary00 = '' # (String) Boundary string
167
+ havepassed = {
168
+ :deliverystatus => 0
169
+ }
170
+ v = nil
171
+
172
+ if mhead['content-type']
173
+ # Get the boundary string and set regular expression for matching with
174
+ # the boundary string.
175
+ require 'sisimai/mime'
176
+ boundary00 = Sisimai::MIME.boundary(mhead['content-type']) || ''
177
+ end
178
+
179
+ hasdivided.each do |e|
180
+ break if e =~ Re1[:endof]
181
+
182
+ if readcursor.zero?
183
+ # Beginning of the bounce message or delivery status part
184
+ if e =~ Re1[:begin]
185
+ readcursor |= Indicators[:deliverystatus]
186
+ next unless e =~ Re1[:frozen]
187
+ end
188
+ end
189
+
190
+ if readcursor & Indicators[:'message-rfc822'] == 0
191
+ # Beginning of the original message part
192
+ if e =~ Re1[:rfc822]
193
+ readcursor |= Indicators[:'message-rfc822']
194
+ next
195
+ end
196
+ end
197
+
198
+ if readcursor & Indicators[:'message-rfc822'] > 0
199
+ # After "message/rfc822"
200
+ if e.empty?
201
+ blanklines += 1
202
+ break if blanklines > 1
203
+ next
204
+ end
205
+ rfc822list << e
206
+
207
+ else
208
+ # Before "message/rfc822"
209
+ next if readcursor & Indicators[:deliverystatus] == 0
210
+ next if e.empty?
211
+
212
+ # This message was created automatically by mail delivery software.
213
+ #
214
+ # A message that you sent could not be delivered to one or more of its
215
+ # recipients. This is a permanent error. The following address(es) failed:
216
+ #
217
+ # kijitora@example.jp
218
+ # SMTP error from remote mail server after RCPT TO:<kijitora@example.jp>:
219
+ # host neko.example.jp [192.0.2.222]: 550 5.1.1 <kijitora@example.jp>... User Unknown
220
+ v = dscontents[-1]
221
+
222
+ if cv = e.match(/\A[ ][ ]+([^ \t]+[@][^ \t]+[.][a-zA-Z]+)(:.+)?\z/) || e.match(Re1[:alias])
223
+ # kijitora@example.jp
224
+ # sabineko@example.jp: forced freeze
225
+ #
226
+ # deliver.c:4549| printed = US"an undisclosed address";
227
+ # an undisclosed address
228
+ # (generated from kijitora@example.jp)
229
+ if v['recipient']
230
+ # There are multiple recipient addresses in the message body.
231
+ dscontents << Sisimai::Bite.DELIVERYSTATUS
232
+ v = dscontents[-1]
233
+ end
234
+ v['recipient'] = cv[1]
235
+ recipients += 1
236
+
237
+ elsif cv = e.match(/\A[ ]+[(]generated[ ]from[ ](.+)[)]\z/) ||
238
+ e.match(/\A[ ]+generated[ ]by[ ]([^ \t]+[@][^ \t]+)/)
239
+ # (generated from kijitora@example.jp)
240
+ # pipe to |/bin/echo "Some pipe output"
241
+ # generated by userx@myhost.test.ex
242
+ v['alias'] = cv[1]
243
+
244
+ else
245
+ next if e.empty?
246
+
247
+ if e =~ Re1[:frozen]
248
+ # Message *** has been frozen by the system filter.
249
+ # Message *** was frozen on arrival by ACL.
250
+ v['alterrors'] ||= ''
251
+ v['alterrors'] += e + ' '
252
+
253
+ else
254
+ if boundary00.size > 0
255
+ # --NNNNNNNNNN-eximdsn-MMMMMMMMMM
256
+ # Content-type: message/delivery-status
257
+ # ...
258
+ if cv = e.match(/\A[Rr]eporting-MTA:[ ]*(?:DNS|dns);[ ]*(.+)\z/)
259
+ # Reporting-MTA: dns; mx.example.jp
260
+ v['lhost'] = cv[1]
261
+
262
+ elsif cv = e.match(/\A[Aa]ction:[ ]*(.+)\z/)
263
+ # Action: failed
264
+ v['action'] = cv[1].downcase
265
+
266
+ elsif cv = e.match(/\A[Ss]tatus:[ ]*(\d[.]\d+[.]\d+)/)
267
+ # Status: 5.0.0
268
+ v['status'] = cv[1]
269
+
270
+ elsif cv = e.match(/\A[Dd]iagnostic-[Cc]ode:[ ]*(.+?);[ ]*(.+)\z/)
271
+ # Diagnostic-Code: SMTP; 550 5.1.1 <userunknown@example.jp>... User Unknown
272
+ v['spec'] = cv[1].upcase
273
+ v['diagnosis'] = cv[2]
274
+
275
+ elsif cv = e.match(/\A[Ff]inal-[Rr]ecipient:[ ]*(?:RFC|rfc)822;[ ]*(.+)\z/)
276
+ # Final-Recipient: rfc822;|/bin/echo "Some pipe output"
277
+ v['spec'] ||= cv[1] =~ /[@]/ ? 'SMTP' : 'X-UNIX'
278
+
279
+ else
280
+ # Error message ?
281
+ if havepassed[:deliverystatus].zero?
282
+ # Content-type: message/delivery-status
283
+ havepassed[:deliverystatus] = 1 if e =~ Re1[:deliverystatus]
284
+ v['alterrors'] ||= ''
285
+ v['alterrors'] += e + ' ' if e =~ /\A[ ]+/
286
+ end
287
+ end
288
+ else
289
+ if dscontents.size == recipients
290
+ # Error message
291
+ next unless e.size
292
+ v['diagnosis'] ||= ''
293
+ v['diagnosis'] += e + ' '
294
+
295
+ else
296
+ # Error message when email address above does not include '@'
297
+ # and domain part.
298
+ next unless e =~ /\A[ ]{4}/
299
+ v['alterrors'] ||= ''
300
+ v['alterrors'] += e + ' '
301
+ end
302
+ end
303
+ end
304
+ end
305
+ end
306
+ end
307
+
308
+ if recipients > 0
309
+ # Check "an undisclosed address", "unroutable address"
310
+ dscontents.map do |q|
311
+ # Replace the recipient address with the value of "alias"
312
+ next unless q['alias']
313
+ next unless q['alias'].size > 0
314
+ if q['recipient'].empty? || q['recipient'] !~ /[@]/
315
+ # The value of "recipient" is empty or does not include "@"
316
+ q['recipient'] = q['alias']
317
+ end
318
+ end
319
+
320
+ else
321
+ # Fallback for getting recipient addresses
322
+ if mhead['x-failed-recipients']
323
+ # X-Failed-Recipients: kijitora@example.jp
324
+ rcptinhead = mhead['x-failed-recipients'].split(',')
325
+ rcptinhead.each do |a|
326
+ # Remove space characters
327
+ a.lstrip!
328
+ a.rstrip!
329
+ end
330
+ recipients = rcptinhead.size
331
+
332
+ rcptinhead.each do |e|
333
+ # Insert each recipient address into @$dscontents
334
+ dscontents[-1]['recipient'] = e
335
+ next if dscontents.size == recipients
336
+ dscontents << Sisimai::Bite.DELIVERYSTATUS
337
+ end
338
+ end
339
+ end
340
+ return nil if recipients.zero?
341
+
342
+ if mhead['received'].size > 0
343
+ # Get the name of local MTA
344
+ # Received: from marutamachi.example.org (c192128.example.net [192.0.2.128])
345
+ if cv = mhead['received'][-1].match(/from[ \t]([^ ]+)/)
346
+ localhost0 = cv[1]
347
+ end
348
+ end
349
+
350
+ require 'sisimai/string'
351
+ require 'sisimai/smtp/reply'
352
+ require 'sisimai/smtp/status'
353
+
354
+ dscontents.map do |e|
355
+ # Set default values if each value is empty.
356
+ e['agent'] = self.smtpagent
357
+ e['lhost'] ||= localhost0
358
+
359
+ unless e['diagnosis']
360
+ # Empty Diagnostic-Code: or error message
361
+ if boundary00.size > 0
362
+ # --NNNNNNNNNN-eximdsn-MMMMMMMMMM
363
+ # Content-type: message/delivery-status
364
+ #
365
+ # Reporting-MTA: dns; the.local.host.name
366
+ #
367
+ # Action: failed
368
+ # Final-Recipient: rfc822;/a/b/c
369
+ # Status: 5.0.0
370
+ #
371
+ # Action: failed
372
+ # Final-Recipient: rfc822;|/p/q/r
373
+ # Status: 5.0.0
374
+ e['diagnosis'] = dscontents[0]['diagnosis'] || ''
375
+ e['spec'] ||= dscontents[0]['spec']
376
+
377
+ if dscontents[0]['alterrors'] && dscontents[0]['alterrors'].size > 0
378
+ # The value of "alterrors" is also copied
379
+ e['alterrors'] = dscontents[0]['alterrors']
380
+ end
381
+ end
382
+ end
383
+
384
+ if e['alterrors'] && e['alterrors'].size > 0
385
+ # Copy alternative error message
386
+ if e['diagnosis'].nil? || e['diagnosis'].empty?
387
+ e['diagnosis'] ||= e['alterrors']
388
+ end
389
+
390
+ if e['diagnosis'] =~ /\A[-]+/ || e['diagnosis'] =~ /__\z/
391
+ # Override the value of diagnostic code message
392
+ e['diagnosis'] = e['alterrors'] if e['alterrors'].size > 0
393
+
394
+ else
395
+ # Check the both value and try to match
396
+ if e['diagnosis'].size < e['alterrors'].size
397
+ # Check the value of alterrors
398
+ rxdiagnosis = %r/#{e['diagnosis']}/i
399
+ if e['alterrors'] =~ rxdiagnosis
400
+ # Override the value of diagnostic code message because
401
+ # the value of alterrors includes the value of diagnosis.
402
+ e['diagnosis'] = e['alterrors']
403
+ end
404
+ end
405
+ end
406
+ e.delete('alterrors')
407
+ end
408
+ e['diagnosis'] = Sisimai::String.sweep(e['diagnosis']) || ''
409
+ e['diagnosis'] = e['diagnosis'].sub(/\b__.+\z/, '')
410
+
411
+ unless e['rhost']
412
+ # Get the remote host name
413
+ if cv = e['diagnosis'].match(/host[ \t]+([^ \t]+)[ \t]\[.+\]:[ \t]/)
414
+ # host neko.example.jp [192.0.2.222]: 550 5.1.1 <kijitora@example.jp>... User Unknown
415
+ e['rhost'] = cv[1]
416
+ end
417
+
418
+ unless e['rhost']
419
+ if mhead['received'].size > 0
420
+ # Get localhost and remote host name from Received header.
421
+ e['rhost'] = Sisimai::RFC5322.received(mhead['received'][-1]).pop
422
+ end
423
+ end
424
+ end
425
+
426
+ unless e['command']
427
+ # Get the SMTP command name for the session
428
+ ReCommand.each do |r|
429
+ # Verify each regular expression of SMTP commands
430
+ if cv = e['diagnosis'].match(r)
431
+ e['command'] = cv[1].upcase
432
+ break
433
+ end
434
+ end
435
+
436
+ # Detect the reason of bounce
437
+ if e['command'] =~ /\A(?:HELO|EHLO)\z/
438
+ # HELO | Connected to 192.0.2.135 but my name was rejected.
439
+ e['reason'] = 'blocked'
440
+
441
+ elsif e['command'] == 'MAIL'
442
+ # MAIL | Connected to 192.0.2.135 but sender was rejected.
443
+ e['reason'] = 'onhold'
444
+
445
+ else
446
+ # Verify each regular expression of session errors
447
+ ReFailure.each_key do |r|
448
+ # Check each regular expression
449
+ next unless e['diagnosis'] =~ ReFailure[r]
450
+ e['reason'] = r.to_s
451
+ break
452
+ end
453
+
454
+ unless e['reason']
455
+ # The reason "expired"
456
+ e['reason'] = 'expired' if e['diagnosis'] =~ ReDelayed
457
+ end
458
+ end
459
+ end
460
+
461
+ # Prefer the value of smtp reply code in Diagnostic-Code:
462
+ # See eg/maildir-as-a-sample/new/exim-20.eml
463
+ # Action: failed
464
+ # Final-Recipient: rfc822;userx@test.ex
465
+ # Status: 5.0.0
466
+ # Remote-MTA: dns; 127.0.0.1
467
+ # Diagnostic-Code: smtp; 450 TEMPERROR: retry timeout exceeded
468
+ # The value of "Status:" indicates permanent error but the value
469
+ # of SMTP reply code in Diagnostic-Code: field is "TEMPERROR"!!!!
470
+ sv = Sisimai::SMTP::Status.find(e['diagnosis'])
471
+ rv = Sisimai::SMTP::Reply.find(e['diagnosis'])
472
+ s1 = 0 # First character of Status as integer
473
+ r1 = 0 # First character of SMTP reply code as integer
474
+
475
+ # "Status:" field did not exist in the bounce message
476
+ if sv.empty?
477
+ # Check SMTP reply code
478
+ if rv.size > 0
479
+ # Generate pseudo DSN code from SMTP reply code
480
+ r1 = rv[0, 1].to_i
481
+ if r1 == 4
482
+ # Get the internal DSN(temporary error)
483
+ sv = Sisimai::SMTP::Status.code(e['reason'], true)
484
+
485
+ elsif r1 == 5
486
+ # Get the internal DSN(permanent error)
487
+ sv = Sisimai::SMTP::Status.code(e['reason'], false)
488
+ end
489
+ end
490
+ end
491
+
492
+ s1 = sv[0, 1].to_i if sv.size > 0
493
+ v1 = s1 + r1
494
+ v1 += e['status'][0, 1].to_i if e['status']
495
+
496
+ if v1 > 0
497
+ # Status or SMTP reply code exists
498
+ # Set pseudo DSN into the value of "status" accessor
499
+ e['status'] = sv if r1 > 0
500
+ else
501
+ # Neither Status nor SMTP reply code exist
502
+ if e['reason'] =~ /\A(?:expired|mailboxfull)/
503
+ # Set pseudo DSN (temporary error)
504
+ sv = Sisimai::SMTP::Status.code(e['reason'], true)
505
+
506
+ else
507
+ # Set pseudo DSN (permanent error)
508
+ sv = Sisimai::SMTP::Status.code(e['reason'], false)
509
+ end
510
+ end
511
+ e['status'] ||= sv
512
+ e.each_key { |a| e[a] ||= '' }
513
+ end
514
+
515
+ rfc822part = Sisimai::RFC5322.weedout(rfc822list)
516
+ return { 'ds' => dscontents, 'rfc822' => rfc822part }
517
+ end
518
+
519
+ end
520
+ end
521
+ end
522
+