sisimai 4.21.1-java → 4.22.0-java

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,207 @@
1
+ module Sisimai::Bite::Email
2
+ module Outlook
3
+ # Sisimai::Bite::Email::Outlook parses a bounce email which created by
4
+ # Microsoft Outlook.com.
5
+ # Methods in the module are called from only Sisimai::Message.
6
+ class << self
7
+ # Imported from p5-Sisimail/lib/Sisimai/Bite/Email/US/Outlook.pm
8
+ require 'sisimai/bite/email'
9
+
10
+ Re0 = {
11
+ :from => %r/postmaster[@]/,
12
+ :subject => %r/Delivery Status Notification/,
13
+ :received => %r/.+[.]hotmail[.]com\b/,
14
+ }
15
+ Re1 = {
16
+ :begin => %r/\AThis is an automatically generated Delivery Status Notification/,
17
+ :error => %r/\A[.]+ while talking to .+[:]\z/,
18
+ :rfc822 => %r|\AContent-Type: message/rfc822\z|,
19
+ :endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
20
+ }
21
+ ReFailure = {
22
+ hostunknown: %r/The mail could not be delivered to the recipient because the domain is not reachable/,
23
+ userunknown: %r/Requested action not taken: mailbox unavailable/,
24
+ }
25
+ Indicators = Sisimai::Bite::Email.INDICATORS
26
+
27
+ def description; return 'Microsoft Outlook.com: https://www.outlook.com/'; end
28
+ def smtpagent; return Sisimai::Bite.smtpagent(self); end
29
+
30
+ # X-Message-Delivery: Vj0xLjE7RD0wO0dEPTA7U0NMPTk7bD0xO3VzPTE=
31
+ # X-Message-Info: AuEzbeVr9u5fkDpn2vR5iCu5wb6HBeY4iruBjnutBzpStnUabbM...
32
+ def headerlist; return ['X-Message-Delivery', 'X-Message-Info']; end
33
+ def pattern; return Re0; end
34
+
35
+ # Parse bounce messages from Microsoft Outlook.com
36
+ # @param [Hash] mhead Message headers of a bounce email
37
+ # @options mhead [String] from From header
38
+ # @options mhead [String] date Date header
39
+ # @options mhead [String] subject Subject header
40
+ # @options mhead [Array] received Received headers
41
+ # @options mhead [String] others Other required headers
42
+ # @param [String] mbody Message body of a bounce email
43
+ # @return [Hash, Nil] Bounce data list and message/rfc822
44
+ # part or nil if it failed to parse or
45
+ # the arguments are missing
46
+ def scan(mhead, mbody)
47
+ return nil unless mhead
48
+ return nil unless mbody
49
+
50
+ match = 0
51
+ match += 1 if mhead['subject'] =~ Re0[:subject]
52
+ match += 1 if mhead['x-message-delivery']
53
+ match += 1 if mhead['x-message-info']
54
+ match += 1 if mhead['received'].find { |a| a =~ Re0[:received] }
55
+ return nil if match < 2
56
+
57
+ dscontents = [Sisimai::Bite.DELIVERYSTATUS]
58
+ hasdivided = mbody.split("\n")
59
+ havepassed = ['']
60
+ rfc822list = [] # (Array) Each line in message/rfc822 part string
61
+ blanklines = 0 # (Integer) The number of blank lines
62
+ readcursor = 0 # (Integer) Points the current cursor position
63
+ recipients = 0 # (Integer) The number of 'Final-Recipient' header
64
+ connvalues = 0 # (Integer) Flag, 1 if all the value of $connheader have been set
65
+ connheader = {
66
+ 'date' => '', # The value of Arrival-Date header
67
+ 'lhost' => '', # The value of Reporting-MTA header
68
+ }
69
+ v = nil
70
+
71
+ hasdivided.each do |e|
72
+ # Save the current line for the next loop
73
+ havepassed << e
74
+ p = havepassed[-2]
75
+
76
+ if readcursor.zero?
77
+ # Beginning of the bounce message or delivery status part
78
+ if e =~ Re1[:begin]
79
+ readcursor |= Indicators[:deliverystatus]
80
+ next
81
+ end
82
+ end
83
+
84
+ if readcursor & Indicators[:'message-rfc822'] == 0
85
+ # Beginning of the original message part
86
+ if e =~ Re1[:rfc822]
87
+ readcursor |= Indicators[:'message-rfc822']
88
+ next
89
+ end
90
+ end
91
+
92
+ if readcursor & Indicators[:'message-rfc822'] > 0
93
+ # After "message/rfc822"
94
+ if e.empty?
95
+ blanklines += 1
96
+ break if blanklines > 1
97
+ next
98
+ end
99
+ rfc822list << e
100
+
101
+ else
102
+ # Before "message/rfc822"
103
+ next if readcursor & Indicators[:deliverystatus] == 0
104
+ next if e.empty?
105
+
106
+ if connvalues == connheader.keys.size
107
+ # This is an automatically generated Delivery Status Notification.
108
+ #
109
+ # Delivery to the following recipients failed.
110
+ #
111
+ # kijitora@example.jp
112
+ #
113
+ # Final-Recipient: rfc822;kijitora@example.jp
114
+ # Action: failed
115
+ # Status: 5.2.2
116
+ # Diagnostic-Code: smtp;550 5.2.2 <kijitora@example.jp>... Mailbox Full
117
+ v = dscontents[-1]
118
+
119
+ if cv = e.match(/\A[Ff]inal-[Rr]ecipient:[ ]*(?:RFC|rfc)822;[ ]*([^ ]+)\z/)
120
+ # Final-Recipient: rfc822;kijitora@example.jp
121
+ if v['recipient']
122
+ # There are multiple recipient addresses in the message body.
123
+ dscontents << Sisimai::Bite.DELIVERYSTATUS
124
+ v = dscontents[-1]
125
+ end
126
+ v['recipient'] = cv[1]
127
+ recipients += 1
128
+
129
+ elsif cv = e.match(/\A[Aa]ction:[ ]*(.+)\z/)
130
+ # Action: failed
131
+ v['action'] = cv[1].downcase
132
+
133
+ elsif cv = e.match(/\A[Ss]tatus:[ ]*(\d[.]\d+[.]\d+)/)
134
+ # Status:5.2.0
135
+ v['status'] = cv[1]
136
+
137
+ else
138
+ if cv = e.match(/\A[Dd]iagnostic-[Cc]ode:[ ]*(.+?);[ ]*(.+)\z/)
139
+ # Diagnostic-Code: SMTP; 550 5.1.1 <userunknown@example.jp>... User Unknown
140
+ v['spec'] = cv[1].upcase
141
+ v['diagnosis'] = cv[2]
142
+
143
+ elsif p =~ /\A[Dd]iagnostic-[Cc]ode:[ ]*/ && cv = e.match(/\A[ \t]+(.+)\z/)
144
+ # Continued line of the value of Diagnostic-Code header
145
+ v['diagnosis'] ||= ''
146
+ v['diagnosis'] += ' ' + cv[1]
147
+ havepassed[-1] = 'Diagnostic-Code: ' + e
148
+ end
149
+
150
+ end
151
+ else
152
+ # Reporting-MTA: dns;BLU004-OMC3S13.hotmail.example.com
153
+ # Received-From-MTA: dns;BLU436-SMTP66
154
+ # Arrival-Date: Fri, 21 Nov 2014 14:17:34 -0800
155
+ if cv = e.match(/\A[Rr]eporting-MTA:[ ]*(?:DNS|dns);[ ]*(.+)\z/)
156
+ # Reporting-MTA: dns;BLU004-OMC3S13.hotmail.example.com
157
+ next if connheader['lhost'].size > 0
158
+ connheader['lhost'] = cv[1].downcase
159
+ connvalues += 1
160
+
161
+ elsif cv = e.match(/\A[Aa]rrival-[Dd]ate:[ ]*(.+)\z/)
162
+ # Arrival-Date: Wed, 29 Apr 2009 16:03:18 +0900
163
+ next if connheader['date'].size > 0
164
+ connheader['date'] = cv[1]
165
+ connvalues += 1
166
+ end
167
+ end
168
+ end
169
+ end
170
+ return nil if recipients.zero?
171
+ require 'sisimai/string'
172
+
173
+ dscontents.map do |e|
174
+ # Set default values if each value is empty.
175
+ connheader.each_key { |a| e[a] ||= connheader[a] || '' }
176
+ e['agent'] = self.smtpagent
177
+ e['diagnosis'] = Sisimai::String.sweep(e['diagnosis']) || ''
178
+
179
+ if e['diagnosis'].empty?
180
+ # No message in 'diagnosis'
181
+ if e['action'] == 'delayed'
182
+ # Set pseudo diagnostic code message for delaying
183
+ e['diagnosis'] = 'Delivery to the following recipients has been delayed.'
184
+
185
+ else
186
+ # Set pseudo diagnostic code message
187
+ e['diagnosis'] = 'Unable to deliver message to the following recipients, '
188
+ e['diagnosis'] += 'due to being unable to connect successfully to the destination mail server.'
189
+ end
190
+ end
191
+
192
+ ReFailure.each_key do |r|
193
+ # Verify each regular expression of session errors
194
+ next unless e['diagnosis'] =~ ReFailure[r]
195
+ e['reason'] = r.to_s
196
+ break
197
+ end
198
+ end
199
+
200
+ rfc822part = Sisimai::RFC5322.weedout(rfc822list)
201
+ return { 'ds' => dscontents, 'rfc822' => rfc822part }
202
+ end
203
+
204
+ end
205
+ end
206
+ end
207
+
@@ -0,0 +1,310 @@
1
+ module Sisimai::Bite::Email
2
+ module Postfix
3
+ # Sisimai::Bite::Email::Postfix parses a bounce email which created by
4
+ # Postfix. Methods in the module are called from only Sisimai::Message.
5
+ class << self
6
+ # Imported from p5-Sisimail/lib/Sisimai/Bite/Email/Postfix.pm
7
+ require 'sisimai/bite/email'
8
+
9
+ # Postfix manual - bounce(5) - http://www.postfix.org/bounce.5.html
10
+ Re0 = {
11
+ :from => %r/ [(]Mail Delivery System[)]\z/,
12
+ :subject => %r/\AUndelivered Mail Returned to Sender\z/,
13
+ }
14
+ Re1 = {
15
+ :begin => %r{\A(?>
16
+ [ ]+The[ ](?:
17
+ Postfix[ ](?:
18
+ program\z # The Postfix program
19
+ |on[ ].+[ ]program\z # The Postfix on <os name> program
20
+ )
21
+ |\w+[ ]Postfix[ ]program\z # The <name> Postfix program
22
+ |mail[ \t]system\z # The mail system
23
+ |\w+[ \t]program\z # The <custmized-name> program
24
+ )
25
+ |This[ ]is[ ]the[ ](?:
26
+ Postfix[ ]program # This is the Postfix program
27
+ |\w+[ ]Postfix[ ]program # This is the <name> Postfix program
28
+ |\w+[ ]program # This is the <customized-name> Postfix program
29
+ |mail[ ]system[ ]at[ ]host # This is the mail system at host <hostname>.
30
+ )
31
+ )
32
+ }x,
33
+ :rfc822 => %r!\AContent-Type:[ \t]*(?:message/rfc822|text/rfc822-headers)\z!x,
34
+ :endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
35
+ }
36
+ Indicators = Sisimai::Bite::Email.INDICATORS
37
+
38
+ def description; return 'Postfix'; end
39
+ def smtpagent; return Sisimai::Bite.smtpagent(self); end
40
+ def headerlist; return []; end
41
+ def pattern; return Re0; end
42
+
43
+ # Parse bounce messages from Postfix
44
+ # @param [Hash] mhead Message headers of a bounce email
45
+ # @options mhead [String] from From header
46
+ # @options mhead [String] date Date header
47
+ # @options mhead [String] subject Subject header
48
+ # @options mhead [Array] received Received headers
49
+ # @options mhead [String] others Other required headers
50
+ # @param [String] mbody Message body of a bounce email
51
+ # @return [Hash, Nil] Bounce data list and message/rfc822
52
+ # part or nil if it failed to parse or
53
+ # the arguments are missing
54
+ def scan(mhead, mbody)
55
+ return nil unless mhead
56
+ return nil unless mbody
57
+ return nil unless mhead['subject'] =~ Re0[:subject]
58
+
59
+ dscontents = [Sisimai::Bite.DELIVERYSTATUS]
60
+ hasdivided = mbody.split("\n")
61
+ havepassed = ['']
62
+ rfc822list = [] # (Array) Each line in message/rfc822 part string
63
+ blanklines = 0 # (Integer) The number of blank lines
64
+ readcursor = 0 # (Integer) Points the current cursor position
65
+ recipients = 0 # (Integer) The number of 'Final-Recipient' header
66
+ commandset = [] # (Array) ``in reply to * command'' list
67
+ connvalues = 0 # (Integer) Flag, 1 if all the value of $connheader have been set
68
+ connheader = {
69
+ 'date' => '', # The value of Arrival-Date header
70
+ 'lhost' => '', # The value of Received-From-MTA header
71
+ }
72
+ anotherset = {} # Another error information
73
+ v = nil
74
+
75
+ hasdivided.each do |e|
76
+ # Save the current line for the next loop
77
+ havepassed << e
78
+ p = havepassed[-2]
79
+
80
+ if readcursor.zero?
81
+ # Beginning of the bounce message or delivery status part
82
+ if e =~ Re1[:begin]
83
+ readcursor |= Indicators[:deliverystatus]
84
+ next
85
+ end
86
+ end
87
+
88
+ if readcursor & Indicators[:'message-rfc822'] == 0
89
+ # Beginning of the original message part
90
+ if e =~ Re1[:rfc822]
91
+ readcursor |= Indicators[:'message-rfc822']
92
+ next
93
+ end
94
+ end
95
+
96
+ if readcursor & Indicators[:'message-rfc822'] > 0
97
+ # After "message/rfc822"
98
+ if e.empty?
99
+ blanklines += 1
100
+ break if blanklines > 1
101
+ next
102
+ end
103
+ rfc822list << e
104
+
105
+ else
106
+ # Before "message/rfc822"
107
+ next if readcursor & Indicators[:deliverystatus] == 0
108
+ next if e.empty?
109
+
110
+ if connvalues == connheader.keys.size
111
+ # Final-Recipient: RFC822; userunknown@example.jp
112
+ # X-Actual-Recipient: RFC822; kijitora@example.co.jp
113
+ # Action: failed
114
+ # Status: 5.1.1
115
+ # Remote-MTA: DNS; mx.example.jp
116
+ # Diagnostic-Code: SMTP; 550 5.1.1 <userunknown@example.jp>... User Unknown
117
+ # Last-Attempt-Date: Fri, 14 Feb 2014 12:30:08 -0500
118
+ v = dscontents[-1]
119
+ if cv = e.match(/\A[Ff]inal-[Rr]ecipient:[ ]*(?:RFC|rfc)822;[ ]*(.+)\z/)
120
+ # Final-Recipient: RFC822; userunknown@example.jp
121
+ if v['recipient']
122
+ # There are multiple recipient addresses in the message body.
123
+ dscontents << Sisimai::Bite.DELIVERYSTATUS
124
+ v = dscontents[-1]
125
+ end
126
+ v['recipient'] = cv[1]
127
+ recipients += 1
128
+
129
+ elsif cv = e.match(/\A[Xx]-[Aa]ctual-[Rr]ecipient:[ ]*(?:RFC|rfc)822;[ ]*([^ ]+)\z/) ||
130
+ e.match(/\A[Oo]riginal-[Rr]ecipient:[ ]*(?:RFC|rfc)822;[ ]*([^ ]+)\z/)
131
+ # X-Actual-Recipient: RFC822; kijitora@example.co.jp
132
+ # Original-Recipient: rfc822;kijitora@example.co.jp
133
+ v['alias'] = cv[1]
134
+
135
+ elsif cv = e.match(/\A[Aa]ction:[ ]*(.+)\z/)
136
+ # Action: failed
137
+ v['action'] = cv[1].downcase
138
+
139
+ elsif cv = e.match(/\A[Ss]tatus:[ ]*(\d[.]\d+[.]\d+)/)
140
+ # Status: 5.1.1
141
+ # Status:5.2.0
142
+ # Status: 5.1.0 (permanent failure)
143
+ v['status'] = cv[1]
144
+
145
+ elsif cv = e.match(/\A[Rr]emote-MTA:[ ]*(?:DNS|dns);[ ]*(.+)\z/)
146
+ # Remote-MTA: DNS; mx.example.jp
147
+ v['rhost'] = cv[1].downcase
148
+
149
+ elsif cv = e.match(/\A[Ll]ast-[Aa]ttempt-[Dd]ate:[ ]*(.+)\z/)
150
+ # Last-Attempt-Date: Fri, 14 Feb 2014 12:30:08 -0500
151
+ #
152
+ # src/bounce/bounce_notify_util.c:
153
+ # 681 #if 0
154
+ # 682 if (dsn->time > 0)
155
+ # 683 post_mail_fprintf(bounce, "Last-Attempt-Date: %s",
156
+ # 684 mail_date(dsn->time));
157
+ # 685 #endif
158
+ v['date'] = cv[1]
159
+
160
+ else
161
+ if cv = e.match(/\A[Dd]iagnostic-[Cc]ode:[ ]*(.+?);[ ]*(.+)\z/)
162
+ # Diagnostic-Code: SMTP; 550 5.1.1 <userunknown@example.jp>... User Unknown
163
+ v['spec'] = cv[1].upcase
164
+ v['diagnosis'] = cv[2]
165
+ v['spec'] = 'SMTP' if v['spec'] == 'X-POSTFIX'
166
+
167
+ elsif p =~ /\A[Dd]iagnostic-[Cc]ode:[ ]*/ && cv = e.match(/\A[ \t]+(.+)\z/)
168
+ # Continued line of the value of Diagnostic-Code header
169
+ v['diagnosis'] ||= ''
170
+ v['diagnosis'] += ' ' + cv[1]
171
+ havepassed[-1] = 'Diagnostic-Code: ' + e
172
+ end
173
+ end
174
+
175
+ else
176
+ # If you do so, please include this problem report. You can
177
+ # delete your own text from the attached returned message.
178
+ #
179
+ # The mail system
180
+ #
181
+ # <userunknown@example.co.jp>: host mx.example.co.jp[192.0.2.153] said: 550
182
+ # 5.1.1 <userunknown@example.co.jp>... User Unknown (in reply to RCPT TO
183
+ # command)
184
+ if cv = e.match(/[ \t][(]in reply to ([A-Z]{4}).*/)
185
+ # 5.1.1 <userunknown@example.co.jp>... User Unknown (in reply to RCPT TO
186
+ commandset << cv[1]
187
+ anotherset['diagnosis'] ||= ''
188
+ anotherset['diagnosis'] += ' ' + e
189
+
190
+ elsif cv = e.match(/([A-Z]{4})[ \t]*.*command[)]\z/)
191
+ # to MAIL command)
192
+ commandset << cv[1]
193
+ anotherset['diagnosis'] ||= ''
194
+ anotherset['diagnosis'] += ' ' + e
195
+
196
+ else
197
+ if cv = e.match(/\A[Rr]eporting-MTA:[ ]*(?:DNS|dns);[ ]*(.+)\z/)
198
+ # Reporting-MTA: dns; mx.example.jp
199
+ next if connheader['lhost'].size > 0
200
+ connheader['lhost'] = cv[1].downcase
201
+ connvalues += 1
202
+
203
+ elsif cv = e.match(/\A[Aa]rrival-[Dd]ate:[ ]*(.+)\z/)
204
+ # Arrival-Date: Wed, 29 Apr 2009 16:03:18 +0900
205
+ next if connheader['date'].size > 0
206
+ connheader['date'] = 1
207
+ connvalues += 1
208
+
209
+ elsif cv = e.match(/\A(X-Postfix-Sender):[ ]*rfc822;[ ]*(.+)\z/)
210
+ # X-Postfix-Sender: rfc822; shironeko@example.org
211
+ rfc822list << sprintf('%s: %s', cv[1], cv[2])
212
+
213
+ else
214
+ # Alternative error message and recipient
215
+ if cv = e.match(/\A[<]([^ ]+[@][^ ]+)[>] [(]expanded from [<](.+)[>][)]:[ \t]*(.+)\z/)
216
+ # <r@example.ne.jp> (expanded from <kijitora@example.org>): user ...
217
+ anotherset['recipient'] = cv[1]
218
+ anotherset['alias'] = cv[2]
219
+ anotherset['diagnosis'] = cv[3]
220
+
221
+ elsif cv = e.match(/\A[<]([^ ]+[@][^ ]+)[>]:(.*)\z/)
222
+ # <kijitora@exmaple.jp>: ...
223
+ anotherset['recipient'] = cv[1]
224
+ anotherset['diagnosis'] = cv[2]
225
+
226
+ else
227
+ # Get error message continued from the previous line
228
+ next unless anotherset['diagnosis']
229
+ if e =~ /\A[ \t]{4}(.+)\z/
230
+ # host mx.example.jp said:...
231
+ anotherset['diagnosis'] += ' ' + e
232
+ end
233
+ end
234
+
235
+ end
236
+ end
237
+ end
238
+ end # End of if: rfc822
239
+ end
240
+
241
+ if recipients.zero?
242
+ # Fallback: set recipient address from error message
243
+ if anotherset['recipient'] && anotherset['recipient'].size > 0
244
+ # Set recipient address
245
+ dscontents[-1]['recipient'] = anotherset['recipient']
246
+ recipients += 1
247
+ end
248
+ end
249
+ return nil if recipients.zero?
250
+
251
+ require 'sisimai/string'
252
+ require 'sisimai/smtp/status'
253
+ require 'sisimai/smtp/reply'
254
+
255
+ dscontents.map do |e|
256
+ # Set default values if each value is empty.
257
+ connheader.each_key { |a| e[a] ||= connheader[a] || '' }
258
+
259
+ e['agent'] = self.smtpagent
260
+ e['command'] = commandset.shift || ''
261
+
262
+ if anotherset['diagnosis']
263
+ # Copy alternative error message
264
+ e['diagnosis'] = anotherset['diagnosis'] unless e['diagnosis']
265
+
266
+ if e['diagnosis'] =~ /\A\d+\z/
267
+ e['diagnosis'] = anotherset['diagnosis']
268
+ else
269
+ # More detailed error message is in "$anotherset"
270
+ as = nil # status
271
+ ar = nil # replycode
272
+
273
+ if e['status'] == '' || e['status'] =~ /\A[45][.]0[.]0\z/
274
+ # Check the value of D.S.N. in $anotherset
275
+ as = Sisimai::SMTP::Status.find(anotherset['diagnosis'])
276
+ if as.size > 0 && as[-3, 3] != '0.0'
277
+ # The D.S.N. is neither an empty nor *.0.0
278
+ e['status'] = as
279
+ end
280
+ end
281
+
282
+ if e['replycode'] == '' || e['replycode'] =~ /\A[45]00\z/
283
+ # Check the value of SMTP reply code in $anotherset
284
+ ar = Sisimai::SMTP::Reply.find(anotherset['diagnosis'])
285
+ if ar.size > 0 && ar[-2, 2].to_i != 0
286
+ # The SMTP reply code is neither an empty nor *00
287
+ e['replycode'] = ar
288
+ end
289
+ end
290
+
291
+ if ( as || ar ) && ( anotherset['diagnosis'].size > e['diagnosis'].size )
292
+ # Update the error message in $e->{'diagnosis'}
293
+ e['diagnosis'] = anotherset['diagnosis']
294
+ end
295
+ end
296
+ end
297
+
298
+ e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
299
+ e['spec'] ||= 'SMTP' if e['diagnosis'] =~ /host .+ said:/
300
+ e.each_key { |a| e[a] ||= '' }
301
+ end
302
+
303
+ rfc822part = Sisimai::RFC5322.weedout(rfc822list)
304
+ return { 'ds' => dscontents, 'rfc822' => rfc822part }
305
+ end
306
+
307
+ end
308
+ end
309
+ end
310
+