sisimai 4.25.4-java → 4.25.10-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 (681) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +2 -2
  3. data/ANALYTICAL-PRECISION +60 -56
  4. data/Benchmarks.mk +5 -3
  5. data/ChangeLog.md +184 -1
  6. data/Developers.mk +2 -2
  7. data/Makefile +1 -1
  8. data/README-JA.md +30 -57
  9. data/README.md +31 -57
  10. data/Repository.mk +1 -1
  11. data/lib/sisimai.rb +17 -72
  12. data/lib/sisimai/address.rb +13 -17
  13. data/lib/sisimai/arf.rb +45 -47
  14. data/lib/sisimai/data.rb +15 -38
  15. data/lib/sisimai/datetime.rb +3 -3
  16. data/lib/sisimai/lhost.rb +25 -47
  17. data/lib/sisimai/lhost/activehunter.rb +37 -76
  18. data/lib/sisimai/lhost/amavis.rb +119 -86
  19. data/lib/sisimai/lhost/amazonses.rb +196 -256
  20. data/lib/sisimai/lhost/amazonworkmail.rb +56 -95
  21. data/lib/sisimai/lhost/aol.rb +64 -104
  22. data/lib/sisimai/lhost/apachejames.rb +66 -104
  23. data/lib/sisimai/lhost/barracuda.rb +94 -0
  24. data/lib/sisimai/lhost/bigfoot.rb +66 -102
  25. data/lib/sisimai/lhost/biglobe.rb +45 -78
  26. data/lib/sisimai/lhost/courier.rb +66 -101
  27. data/lib/sisimai/lhost/domino.rb +54 -92
  28. data/lib/sisimai/lhost/einsundeins.rb +61 -70
  29. data/lib/sisimai/lhost/exchange2003.rb +89 -120
  30. data/lib/sisimai/lhost/exchange2007.rb +79 -90
  31. data/lib/sisimai/lhost/exim.rb +130 -168
  32. data/lib/sisimai/lhost/ezweb.rb +58 -90
  33. data/lib/sisimai/lhost/facebook.rb +54 -91
  34. data/lib/sisimai/lhost/fml.rb +30 -69
  35. data/lib/sisimai/lhost/{google.rb → gmail.rb} +48 -87
  36. data/lib/sisimai/lhost/gmx.rb +64 -102
  37. data/lib/sisimai/lhost/googlegroups.rb +77 -0
  38. data/lib/sisimai/lhost/gsuite.rb +79 -111
  39. data/lib/sisimai/lhost/imailserver.rb +46 -91
  40. data/lib/sisimai/lhost/interscanmss.rb +40 -85
  41. data/lib/sisimai/lhost/kddi.rb +35 -68
  42. data/lib/sisimai/lhost/mailfoundry.rb +41 -78
  43. data/lib/sisimai/lhost/mailmarshalsmtp.rb +71 -109
  44. data/lib/sisimai/lhost/mailru.rb +56 -92
  45. data/lib/sisimai/lhost/mcafee.rb +59 -97
  46. data/lib/sisimai/lhost/messagelabs.rb +59 -97
  47. data/lib/sisimai/lhost/messagingserver.rb +96 -131
  48. data/lib/sisimai/lhost/mfilter.rb +57 -89
  49. data/lib/sisimai/lhost/mxlogic.rb +47 -85
  50. data/lib/sisimai/lhost/notes.rb +59 -100
  51. data/lib/sisimai/lhost/office365.rb +86 -113
  52. data/lib/sisimai/lhost/opensmtpd.rb +35 -71
  53. data/lib/sisimai/lhost/outlook.rb +56 -96
  54. data/lib/sisimai/lhost/postfix.rb +118 -137
  55. data/lib/sisimai/lhost/powermta.rb +120 -0
  56. data/lib/sisimai/lhost/qmail.rb +46 -79
  57. data/lib/sisimai/lhost/receivingses.rb +56 -97
  58. data/lib/sisimai/lhost/sendgrid.rb +75 -223
  59. data/lib/sisimai/lhost/sendmail.rb +108 -148
  60. data/lib/sisimai/lhost/surfcontrol.rb +62 -104
  61. data/lib/sisimai/lhost/v5sendmail.rb +64 -107
  62. data/lib/sisimai/lhost/verizon.rb +80 -141
  63. data/lib/sisimai/lhost/x1.rb +37 -73
  64. data/lib/sisimai/lhost/x2.rb +36 -75
  65. data/lib/sisimai/lhost/x3.rb +54 -86
  66. data/lib/sisimai/lhost/x4.rb +49 -85
  67. data/lib/sisimai/lhost/x5.rb +54 -93
  68. data/lib/sisimai/lhost/x6.rb +74 -0
  69. data/lib/sisimai/lhost/yahoo.rb +55 -92
  70. data/lib/sisimai/lhost/yandex.rb +72 -110
  71. data/lib/sisimai/lhost/zoho.rb +62 -106
  72. data/lib/sisimai/mail.rb +22 -31
  73. data/lib/sisimai/mail/maildir.rb +31 -36
  74. data/lib/sisimai/mail/mbox.rb +8 -12
  75. data/lib/sisimai/mail/memory.rb +18 -20
  76. data/lib/sisimai/mail/stdin.rb +8 -12
  77. data/lib/sisimai/mda.rb +8 -14
  78. data/lib/sisimai/message.rb +142 -415
  79. data/lib/sisimai/mime.rb +28 -33
  80. data/lib/sisimai/order.rb +150 -209
  81. data/lib/sisimai/reason.rb +28 -19
  82. data/lib/sisimai/reason/blocked.rb +24 -23
  83. data/lib/sisimai/reason/hostunknown.rb +2 -0
  84. data/lib/sisimai/reason/mailererror.rb +1 -1
  85. data/lib/sisimai/reason/notaccept.rb +1 -0
  86. data/lib/sisimai/reason/policyviolation.rb +1 -0
  87. data/lib/sisimai/reason/rejected.rb +1 -0
  88. data/lib/sisimai/reason/securityerror.rb +5 -6
  89. data/lib/sisimai/reason/spamdetected.rb +9 -12
  90. data/lib/sisimai/reason/userunknown.rb +31 -25
  91. data/lib/sisimai/rfc1894.rb +1 -1
  92. data/lib/sisimai/rfc3464.rb +38 -56
  93. data/lib/sisimai/rfc3834.rb +11 -23
  94. data/lib/sisimai/rfc5322.rb +20 -32
  95. data/lib/sisimai/rhost.rb +5 -8
  96. data/lib/sisimai/rhost/cox.rb +112 -0
  97. data/lib/sisimai/rhost/exchangeonline.rb +25 -22
  98. data/lib/sisimai/rhost/franceptt.rb +120 -24
  99. data/lib/sisimai/rhost/googleapps.rb +4 -1
  100. data/lib/sisimai/rhost/iua.rb +1 -1
  101. data/lib/sisimai/rhost/spectrum.rb +73 -0
  102. data/lib/sisimai/smtp.rb +0 -13
  103. data/lib/sisimai/smtp/error.rb +7 -7
  104. data/lib/sisimai/smtp/status.rb +1 -1
  105. data/lib/sisimai/string.rb +3 -11
  106. data/lib/sisimai/version.rb +1 -1
  107. data/set-of-emails/README.md +5 -4
  108. data/set-of-emails/maildir/bsd/arf-24.eml +50 -0
  109. data/set-of-emails/maildir/bsd/arf-25.eml +61 -0
  110. data/set-of-emails/maildir/bsd/{email-activehunter-01.eml → lhost-activehunter-01.eml} +0 -0
  111. data/set-of-emails/maildir/bsd/{email-activehunter-02.eml → lhost-activehunter-02.eml} +0 -0
  112. data/set-of-emails/maildir/bsd/{email-amavis-01.eml → lhost-amavis-01.eml} +0 -0
  113. data/set-of-emails/maildir/bsd/{email-amavis-02.eml → lhost-amavis-02.eml} +0 -0
  114. data/set-of-emails/maildir/bsd/lhost-amavis-03.eml +90 -0
  115. data/set-of-emails/maildir/bsd/{email-amazonses-01.eml → lhost-amazonses-01.eml} +0 -0
  116. data/set-of-emails/maildir/bsd/{email-amazonses-02.eml → lhost-amazonses-02.eml} +0 -0
  117. data/set-of-emails/maildir/bsd/{email-amazonses-03.eml → lhost-amazonses-03.eml} +0 -0
  118. data/set-of-emails/maildir/bsd/{email-amazonses-05.eml → lhost-amazonses-05.eml} +0 -0
  119. data/set-of-emails/maildir/bsd/{email-amazonses-06.eml → lhost-amazonses-06.eml} +0 -0
  120. data/set-of-emails/maildir/bsd/{email-amazonses-07.eml → lhost-amazonses-07.eml} +0 -0
  121. data/set-of-emails/maildir/bsd/{email-amazonses-08.eml → lhost-amazonses-08.eml} +0 -0
  122. data/set-of-emails/maildir/bsd/{email-amazonses-09.eml → lhost-amazonses-09.eml} +0 -0
  123. data/set-of-emails/maildir/bsd/{email-amazonses-10.eml → lhost-amazonses-10.eml} +0 -0
  124. data/set-of-emails/maildir/bsd/{email-amazonses-11.eml → lhost-amazonses-11.eml} +0 -0
  125. data/set-of-emails/maildir/bsd/{email-amazonses-12.eml → lhost-amazonses-12.eml} +0 -0
  126. data/set-of-emails/maildir/bsd/{email-amazonses-13.eml → lhost-amazonses-13.eml} +0 -0
  127. data/set-of-emails/maildir/bsd/{email-amazonses-14.eml → lhost-amazonses-14.eml} +0 -0
  128. data/set-of-emails/maildir/bsd/{email-amazonses-15.eml → lhost-amazonses-15.eml} +0 -0
  129. data/set-of-emails/maildir/bsd/{email-amazonses-16.eml → lhost-amazonses-16.eml} +0 -0
  130. data/set-of-emails/maildir/bsd/{email-amazonses-17.eml → lhost-amazonses-17.eml} +0 -0
  131. data/set-of-emails/maildir/bsd/{email-amazonses-18.eml → lhost-amazonses-18.eml} +0 -0
  132. data/set-of-emails/maildir/bsd/{email-amazonses-19.eml → lhost-amazonses-19.eml} +0 -0
  133. data/set-of-emails/maildir/bsd/{email-amazonses-20.eml → lhost-amazonses-20.eml} +0 -0
  134. data/set-of-emails/maildir/bsd/{email-amazonses-21.eml → lhost-amazonses-21.eml} +0 -0
  135. data/set-of-emails/maildir/bsd/{email-amazonworkmail-01.eml → lhost-amazonworkmail-01.eml} +0 -0
  136. data/set-of-emails/maildir/bsd/{email-amazonworkmail-02.eml → lhost-amazonworkmail-02.eml} +0 -0
  137. data/set-of-emails/maildir/bsd/{email-amazonworkmail-03.eml → lhost-amazonworkmail-03.eml} +0 -0
  138. data/set-of-emails/maildir/bsd/{email-amazonworkmail-04.eml → lhost-amazonworkmail-04.eml} +0 -0
  139. data/set-of-emails/maildir/bsd/{email-amazonworkmail-05.eml → lhost-amazonworkmail-05.eml} +0 -0
  140. data/set-of-emails/maildir/bsd/{email-amazonworkmail-07.eml → lhost-amazonworkmail-07.eml} +0 -0
  141. data/set-of-emails/maildir/bsd/{email-amazonworkmail-08.eml → lhost-amazonworkmail-08.eml} +0 -0
  142. data/set-of-emails/maildir/bsd/{email-aol-01.eml → lhost-aol-01.eml} +0 -0
  143. data/set-of-emails/maildir/bsd/{email-aol-02.eml → lhost-aol-02.eml} +0 -0
  144. data/set-of-emails/maildir/bsd/{email-aol-03.eml → lhost-aol-03.eml} +0 -0
  145. data/set-of-emails/maildir/bsd/{email-aol-04.eml → lhost-aol-04.eml} +0 -0
  146. data/set-of-emails/maildir/bsd/{email-aol-05.eml → lhost-aol-05.eml} +0 -0
  147. data/set-of-emails/maildir/bsd/{email-aol-06.eml → lhost-aol-06.eml} +0 -0
  148. data/set-of-emails/maildir/bsd/{email-apachejames-01.eml → lhost-apachejames-01.eml} +0 -0
  149. data/set-of-emails/maildir/bsd/lhost-barracuda-01.eml +67 -0
  150. data/set-of-emails/maildir/bsd/lhost-barracuda-02.eml +71 -0
  151. data/set-of-emails/maildir/bsd/{email-bigfoot-02.eml → lhost-bigfoot-02.eml} +0 -0
  152. data/set-of-emails/maildir/bsd/{email-biglobe-01.eml → lhost-biglobe-01.eml} +0 -0
  153. data/set-of-emails/maildir/bsd/{email-courier-01.eml → lhost-courier-01.eml} +0 -0
  154. data/set-of-emails/maildir/bsd/{email-courier-02.eml → lhost-courier-02.eml} +0 -0
  155. data/set-of-emails/maildir/bsd/{email-courier-03.eml → lhost-courier-03.eml} +0 -0
  156. data/set-of-emails/maildir/bsd/{email-courier-04.eml → lhost-courier-04.eml} +0 -0
  157. data/set-of-emails/maildir/bsd/{email-domino-01.eml → lhost-domino-01.eml} +0 -0
  158. data/set-of-emails/maildir/bsd/{email-domino-02.eml → lhost-domino-02.eml} +0 -0
  159. data/set-of-emails/maildir/bsd/{email-domino-03.eml → lhost-domino-03.eml} +0 -0
  160. data/set-of-emails/maildir/bsd/{email-einsundeins-02.eml → lhost-einsundeins-02.eml} +0 -0
  161. data/set-of-emails/maildir/bsd/lhost-einsundeins-03.eml +66 -0
  162. data/set-of-emails/maildir/bsd/{email-exchange2003-01.eml → lhost-exchange2003-01.eml} +0 -0
  163. data/set-of-emails/maildir/bsd/{email-exchange2003-02.eml → lhost-exchange2003-02.eml} +0 -0
  164. data/set-of-emails/maildir/bsd/{email-exchange2003-03.eml → lhost-exchange2003-03.eml} +0 -0
  165. data/set-of-emails/maildir/bsd/{email-exchange2003-04.eml → lhost-exchange2003-04.eml} +0 -0
  166. data/set-of-emails/maildir/bsd/{email-exchange2003-05.eml → lhost-exchange2003-05.eml} +0 -0
  167. data/set-of-emails/maildir/bsd/{email-exchange2003-07.eml → lhost-exchange2003-07.eml} +0 -0
  168. data/set-of-emails/maildir/bsd/{email-exchange2007-01.eml → lhost-exchange2007-01.eml} +0 -0
  169. data/set-of-emails/maildir/bsd/{email-exchange2007-02.eml → lhost-exchange2007-02.eml} +0 -0
  170. data/set-of-emails/maildir/bsd/{email-exchange2007-03.eml → lhost-exchange2007-03.eml} +0 -0
  171. data/set-of-emails/maildir/bsd/{email-exchange2007-04.eml → lhost-exchange2007-04.eml} +0 -0
  172. data/set-of-emails/maildir/bsd/lhost-exchange2007-05.eml +1469 -0
  173. data/set-of-emails/maildir/bsd/lhost-exchange2007-06.eml +764 -0
  174. data/set-of-emails/maildir/bsd/lhost-exchange2007-07.eml +128 -0
  175. data/set-of-emails/maildir/bsd/{email-exim-01.eml → lhost-exim-01.eml} +0 -0
  176. data/set-of-emails/maildir/bsd/{email-exim-02.eml → lhost-exim-02.eml} +0 -0
  177. data/set-of-emails/maildir/bsd/{email-exim-03.eml → lhost-exim-03.eml} +0 -0
  178. data/set-of-emails/maildir/bsd/{email-exim-04.eml → lhost-exim-04.eml} +0 -0
  179. data/set-of-emails/maildir/bsd/{email-exim-05.eml → lhost-exim-05.eml} +0 -0
  180. data/set-of-emails/maildir/bsd/{email-exim-06.eml → lhost-exim-06.eml} +0 -0
  181. data/set-of-emails/maildir/bsd/{email-exim-07.eml → lhost-exim-07.eml} +0 -0
  182. data/set-of-emails/maildir/bsd/{email-exim-08.eml → lhost-exim-08.eml} +0 -0
  183. data/set-of-emails/maildir/bsd/{email-exim-29.eml → lhost-exim-29.eml} +0 -0
  184. data/set-of-emails/maildir/bsd/{email-exim-30.eml → lhost-exim-30.eml} +0 -0
  185. data/set-of-emails/maildir/bsd/{email-exim-31.eml → lhost-exim-31.eml} +0 -0
  186. data/set-of-emails/maildir/bsd/{email-exim-32.eml → lhost-exim-32.eml} +0 -0
  187. data/set-of-emails/maildir/bsd/{email-exim-33.eml → lhost-exim-33.eml} +0 -0
  188. data/set-of-emails/maildir/bsd/{email-exim-34.eml → lhost-exim-34.eml} +0 -0
  189. data/set-of-emails/maildir/bsd/{email-exim-35.eml → lhost-exim-35.eml} +0 -0
  190. data/set-of-emails/maildir/bsd/{email-exim-36.eml → lhost-exim-36.eml} +0 -0
  191. data/set-of-emails/maildir/bsd/{email-exim-37.eml → lhost-exim-37.eml} +0 -0
  192. data/set-of-emails/maildir/bsd/{email-exim-38.eml → lhost-exim-38.eml} +0 -0
  193. data/set-of-emails/maildir/bsd/{email-exim-39.eml → lhost-exim-39.eml} +0 -0
  194. data/set-of-emails/maildir/bsd/{email-exim-40.eml → lhost-exim-40.eml} +0 -0
  195. data/set-of-emails/maildir/bsd/{email-exim-41.eml → lhost-exim-41.eml} +0 -0
  196. data/set-of-emails/maildir/bsd/{email-exim-42.eml → lhost-exim-42.eml} +0 -0
  197. data/set-of-emails/maildir/bsd/{email-exim-43.eml → lhost-exim-43.eml} +0 -0
  198. data/set-of-emails/maildir/bsd/{email-exim-44.eml → lhost-exim-44.eml} +0 -0
  199. data/set-of-emails/maildir/bsd/{email-exim-45.eml → lhost-exim-45.eml} +0 -0
  200. data/set-of-emails/maildir/bsd/{email-exim-46.eml → lhost-exim-46.eml} +0 -0
  201. data/set-of-emails/maildir/bsd/{email-exim-47.eml → lhost-exim-47.eml} +0 -0
  202. data/set-of-emails/maildir/bsd/{email-exim-48.eml → lhost-exim-48.eml} +0 -0
  203. data/set-of-emails/maildir/bsd/{email-exim-49.eml → lhost-exim-49.eml} +0 -0
  204. data/set-of-emails/maildir/bsd/{email-exim-50.eml → lhost-exim-50.eml} +0 -0
  205. data/set-of-emails/maildir/bsd/{email-exim-51.eml → lhost-exim-51.eml} +0 -0
  206. data/set-of-emails/maildir/bsd/{email-exim-52.eml → lhost-exim-52.eml} +0 -0
  207. data/set-of-emails/maildir/bsd/{email-exim-53.eml → lhost-exim-53.eml} +0 -0
  208. data/set-of-emails/maildir/bsd/{email-exim-54.eml → lhost-exim-54.eml} +0 -0
  209. data/set-of-emails/maildir/bsd/{email-exim-55.eml → lhost-exim-55.eml} +0 -0
  210. data/set-of-emails/maildir/bsd/{email-exim-56.eml → lhost-exim-56.eml} +0 -0
  211. data/set-of-emails/maildir/bsd/{email-exim-57.eml → lhost-exim-57.eml} +0 -0
  212. data/set-of-emails/maildir/bsd/{email-exim-58.eml → lhost-exim-58.eml} +0 -0
  213. data/set-of-emails/maildir/bsd/{email-exim-59.eml → lhost-exim-59.eml} +0 -0
  214. data/set-of-emails/maildir/bsd/{email-exim-60.eml → lhost-exim-60.eml} +0 -0
  215. data/set-of-emails/maildir/bsd/lhost-exim-61.eml +40 -0
  216. data/set-of-emails/maildir/bsd/{email-ezweb-01.eml → lhost-ezweb-01.eml} +0 -0
  217. data/set-of-emails/maildir/bsd/{email-ezweb-02.eml → lhost-ezweb-02.eml} +0 -0
  218. data/set-of-emails/maildir/bsd/{email-ezweb-03.eml → lhost-ezweb-03.eml} +0 -0
  219. data/set-of-emails/maildir/bsd/{email-ezweb-04.eml → lhost-ezweb-04.eml} +0 -0
  220. data/set-of-emails/maildir/bsd/{email-ezweb-05.eml → lhost-ezweb-05.eml} +0 -0
  221. data/set-of-emails/maildir/bsd/{email-ezweb-07.eml → lhost-ezweb-07.eml} +0 -0
  222. data/set-of-emails/maildir/bsd/{email-ezweb-08.eml → lhost-ezweb-08.eml} +0 -0
  223. data/set-of-emails/maildir/bsd/{email-facebook-03.eml → lhost-facebook-03.eml} +0 -0
  224. data/set-of-emails/maildir/bsd/{email-facebook-04.eml → lhost-facebook-04.eml} +0 -0
  225. data/set-of-emails/maildir/bsd/{email-fml-02.eml → lhost-fml-02.eml} +0 -0
  226. data/set-of-emails/maildir/bsd/{email-fml-03.eml → lhost-fml-03.eml} +0 -0
  227. data/set-of-emails/maildir/bsd/{email-google-01.eml → lhost-gmail-01.eml} +0 -0
  228. data/set-of-emails/maildir/bsd/{email-google-03.eml → lhost-gmail-03.eml} +0 -0
  229. data/set-of-emails/maildir/bsd/{email-google-04.eml → lhost-gmail-04.eml} +0 -0
  230. data/set-of-emails/maildir/bsd/{email-google-05.eml → lhost-gmail-05.eml} +0 -0
  231. data/set-of-emails/maildir/bsd/{email-google-06.eml → lhost-gmail-06.eml} +0 -0
  232. data/set-of-emails/maildir/bsd/{email-google-07.eml → lhost-gmail-07.eml} +0 -0
  233. data/set-of-emails/maildir/bsd/{email-google-08.eml → lhost-gmail-08.eml} +0 -0
  234. data/set-of-emails/maildir/bsd/{email-google-09.eml → lhost-gmail-09.eml} +0 -0
  235. data/set-of-emails/maildir/bsd/{email-google-10.eml → lhost-gmail-10.eml} +0 -0
  236. data/set-of-emails/maildir/bsd/{email-google-11.eml → lhost-gmail-11.eml} +0 -0
  237. data/set-of-emails/maildir/bsd/{email-google-15.eml → lhost-gmail-15.eml} +0 -0
  238. data/set-of-emails/maildir/bsd/{email-google-16.eml → lhost-gmail-16.eml} +0 -0
  239. data/set-of-emails/maildir/bsd/{email-google-17.eml → lhost-gmail-17.eml} +0 -0
  240. data/set-of-emails/maildir/bsd/{email-google-18.eml → lhost-gmail-18.eml} +0 -0
  241. data/set-of-emails/maildir/bsd/{email-google-19.eml → lhost-gmail-19.eml} +0 -0
  242. data/set-of-emails/maildir/bsd/{email-gmx-01.eml → lhost-gmx-01.eml} +0 -0
  243. data/set-of-emails/maildir/bsd/{email-gmx-02.eml → lhost-gmx-02.eml} +0 -0
  244. data/set-of-emails/maildir/bsd/{email-gmx-03.eml → lhost-gmx-03.eml} +0 -0
  245. data/set-of-emails/maildir/bsd/{email-gmx-04.eml → lhost-gmx-04.eml} +0 -0
  246. data/set-of-emails/maildir/bsd/lhost-googlegroups-01.eml +116 -0
  247. data/set-of-emails/maildir/bsd/lhost-googlegroups-02.eml +114 -0
  248. data/set-of-emails/maildir/bsd/lhost-googlegroups-03.eml +116 -0
  249. data/set-of-emails/maildir/bsd/lhost-googlegroups-04.eml +116 -0
  250. data/set-of-emails/maildir/bsd/lhost-googlegroups-05.eml +116 -0
  251. data/set-of-emails/maildir/bsd/lhost-googlegroups-06.eml +116 -0
  252. data/set-of-emails/maildir/bsd/lhost-googlegroups-07.eml +116 -0
  253. data/set-of-emails/maildir/bsd/lhost-googlegroups-08.eml +115 -0
  254. data/set-of-emails/maildir/bsd/lhost-googlegroups-09.eml +116 -0
  255. data/set-of-emails/maildir/bsd/lhost-googlegroups-10.eml +116 -0
  256. data/set-of-emails/maildir/bsd/lhost-googlegroups-11.eml +116 -0
  257. data/set-of-emails/maildir/bsd/lhost-googlegroups-12.eml +116 -0
  258. data/set-of-emails/maildir/bsd/lhost-googlegroups-13.eml +115 -0
  259. data/set-of-emails/maildir/bsd/lhost-googlegroups-14.eml +127 -0
  260. data/set-of-emails/maildir/bsd/{email-gsuite-01.eml → lhost-gsuite-01.eml} +0 -0
  261. data/set-of-emails/maildir/bsd/{email-gsuite-02.eml → lhost-gsuite-02.eml} +0 -0
  262. data/set-of-emails/maildir/bsd/{email-gsuite-03.eml → lhost-gsuite-03.eml} +0 -0
  263. data/set-of-emails/maildir/bsd/{email-gsuite-04.eml → lhost-gsuite-04.eml} +0 -0
  264. data/set-of-emails/maildir/bsd/{email-gsuite-05.eml → lhost-gsuite-05.eml} +0 -0
  265. data/set-of-emails/maildir/bsd/{email-gsuite-06.eml → lhost-gsuite-06.eml} +0 -0
  266. data/set-of-emails/maildir/bsd/{email-gsuite-07.eml → lhost-gsuite-07.eml} +0 -0
  267. data/set-of-emails/maildir/bsd/{email-gsuite-08.eml → lhost-gsuite-08.eml} +0 -0
  268. data/set-of-emails/maildir/bsd/{email-gsuite-09.eml → lhost-gsuite-09.eml} +0 -0
  269. data/set-of-emails/maildir/bsd/{email-gsuite-10.eml → lhost-gsuite-10.eml} +0 -0
  270. data/set-of-emails/maildir/bsd/{email-gsuite-11.eml → lhost-gsuite-11.eml} +0 -0
  271. data/set-of-emails/maildir/bsd/{email-gsuite-12.eml → lhost-gsuite-12.eml} +0 -0
  272. data/set-of-emails/maildir/bsd/{email-gsuite-13.eml → lhost-gsuite-13.eml} +0 -0
  273. data/set-of-emails/maildir/bsd/lhost-gsuite-14.eml +273 -0
  274. data/set-of-emails/maildir/bsd/{email-imailserver-01.eml → lhost-imailserver-01.eml} +0 -0
  275. data/set-of-emails/maildir/bsd/{email-imailserver-02.eml → lhost-imailserver-02.eml} +0 -0
  276. data/set-of-emails/maildir/bsd/{email-imailserver-03.eml → lhost-imailserver-03.eml} +0 -0
  277. data/set-of-emails/maildir/bsd/{email-imailserver-04.eml → lhost-imailserver-04.eml} +0 -0
  278. data/set-of-emails/maildir/bsd/{email-imailserver-06.eml → lhost-imailserver-06.eml} +0 -0
  279. data/set-of-emails/maildir/bsd/{email-interscanmss-01.eml → lhost-interscanmss-01.eml} +0 -0
  280. data/set-of-emails/maildir/bsd/lhost-interscanmss-02.eml +70 -0
  281. data/set-of-emails/maildir/bsd/lhost-interscanmss-03.eml +73 -0
  282. data/set-of-emails/maildir/bsd/{email-kddi-01.eml → lhost-kddi-01.eml} +0 -0
  283. data/set-of-emails/maildir/bsd/{email-kddi-02.eml → lhost-kddi-02.eml} +0 -0
  284. data/set-of-emails/maildir/bsd/{email-kddi-03.eml → lhost-kddi-03.eml} +0 -0
  285. data/set-of-emails/maildir/bsd/{email-mailfoundry-01.eml → lhost-mailfoundry-01.eml} +0 -0
  286. data/set-of-emails/maildir/bsd/{email-mailfoundry-02.eml → lhost-mailfoundry-02.eml} +0 -0
  287. data/set-of-emails/maildir/bsd/{email-mailmarshalsmtp-02.eml → lhost-mailmarshalsmtp-02.eml} +0 -0
  288. data/set-of-emails/maildir/bsd/{email-mailru-01.eml → lhost-mailru-01.eml} +0 -0
  289. data/set-of-emails/maildir/bsd/{email-mailru-02.eml → lhost-mailru-02.eml} +0 -0
  290. data/set-of-emails/maildir/bsd/{email-mailru-03.eml → lhost-mailru-03.eml} +0 -0
  291. data/set-of-emails/maildir/bsd/{email-mailru-04.eml → lhost-mailru-04.eml} +0 -0
  292. data/set-of-emails/maildir/bsd/{email-mailru-05.eml → lhost-mailru-05.eml} +0 -0
  293. data/set-of-emails/maildir/bsd/{email-mailru-06.eml → lhost-mailru-06.eml} +0 -0
  294. data/set-of-emails/maildir/bsd/{email-mailru-07.eml → lhost-mailru-07.eml} +0 -0
  295. data/set-of-emails/maildir/bsd/{email-mailru-08.eml → lhost-mailru-08.eml} +0 -0
  296. data/set-of-emails/maildir/bsd/{email-mailru-09.eml → lhost-mailru-09.eml} +0 -0
  297. data/set-of-emails/maildir/bsd/{email-mailru-10.eml → lhost-mailru-10.eml} +0 -0
  298. data/set-of-emails/maildir/bsd/{email-mcafee-01.eml → lhost-mcafee-01.eml} +0 -0
  299. data/set-of-emails/maildir/bsd/{email-mcafee-02.eml → lhost-mcafee-02.eml} +0 -0
  300. data/set-of-emails/maildir/bsd/{email-mcafee-03.eml → lhost-mcafee-03.eml} +0 -0
  301. data/set-of-emails/maildir/bsd/{email-mcafee-04.eml → lhost-mcafee-04.eml} +0 -0
  302. data/set-of-emails/maildir/bsd/{email-mcafee-05.eml → lhost-mcafee-05.eml} +0 -0
  303. data/set-of-emails/maildir/bsd/{email-messagelabs-01.eml → lhost-messagelabs-01.eml} +0 -0
  304. data/set-of-emails/maildir/bsd/{email-messagelabs-02.eml → lhost-messagelabs-02.eml} +0 -0
  305. data/set-of-emails/maildir/bsd/{email-messagelabs-03.eml → lhost-messagelabs-03.eml} +0 -0
  306. data/set-of-emails/maildir/bsd/{email-messagingserver-01.eml → lhost-messagingserver-01.eml} +0 -0
  307. data/set-of-emails/maildir/bsd/{email-messagingserver-02.eml → lhost-messagingserver-02.eml} +0 -0
  308. data/set-of-emails/maildir/bsd/{email-messagingserver-03.eml → lhost-messagingserver-03.eml} +0 -0
  309. data/set-of-emails/maildir/bsd/{email-messagingserver-04.eml → lhost-messagingserver-04.eml} +0 -0
  310. data/set-of-emails/maildir/bsd/{email-messagingserver-05.eml → lhost-messagingserver-05.eml} +0 -0
  311. data/set-of-emails/maildir/bsd/{email-messagingserver-06.eml → lhost-messagingserver-06.eml} +0 -0
  312. data/set-of-emails/maildir/bsd/{email-messagingserver-07.eml → lhost-messagingserver-07.eml} +0 -0
  313. data/set-of-emails/maildir/bsd/{email-messagingserver-08.eml → lhost-messagingserver-08.eml} +0 -0
  314. data/set-of-emails/maildir/bsd/{email-messagingserver-09.eml → lhost-messagingserver-09.eml} +0 -0
  315. data/set-of-emails/maildir/bsd/{email-messagingserver-10.eml → lhost-messagingserver-10.eml} +0 -0
  316. data/set-of-emails/maildir/bsd/{email-messagingserver-11.eml → lhost-messagingserver-11.eml} +0 -0
  317. data/set-of-emails/maildir/bsd/{email-messagingserver-12.eml → lhost-messagingserver-12.eml} +0 -0
  318. data/set-of-emails/maildir/bsd/{email-mfilter-01.eml → lhost-mfilter-01.eml} +0 -0
  319. data/set-of-emails/maildir/bsd/{email-mfilter-02.eml → lhost-mfilter-02.eml} +0 -0
  320. data/set-of-emails/maildir/bsd/{email-mfilter-03.eml → lhost-mfilter-03.eml} +0 -0
  321. data/set-of-emails/maildir/bsd/{email-mfilter-04.eml → lhost-mfilter-04.eml} +0 -0
  322. data/set-of-emails/maildir/bsd/{email-mxlogic-01.eml → lhost-mxlogic-01.eml} +0 -0
  323. data/set-of-emails/maildir/bsd/{email-mxlogic-02.eml → lhost-mxlogic-02.eml} +0 -0
  324. data/set-of-emails/maildir/bsd/{email-mxlogic-03.eml → lhost-mxlogic-03.eml} +0 -0
  325. data/set-of-emails/maildir/bsd/{email-notes-01.eml → lhost-notes-01.eml} +0 -0
  326. data/set-of-emails/maildir/bsd/{email-notes-02.eml → lhost-notes-02.eml} +0 -0
  327. data/set-of-emails/maildir/bsd/{email-notes-03.eml → lhost-notes-03.eml} +0 -0
  328. data/set-of-emails/maildir/bsd/{email-office365-01.eml → lhost-office365-01.eml} +0 -0
  329. data/set-of-emails/maildir/bsd/{email-office365-02.eml → lhost-office365-02.eml} +0 -0
  330. data/set-of-emails/maildir/bsd/{email-office365-03.eml → lhost-office365-03.eml} +0 -0
  331. data/set-of-emails/maildir/bsd/{email-office365-04.eml → lhost-office365-04.eml} +0 -0
  332. data/set-of-emails/maildir/bsd/{email-office365-05.eml → lhost-office365-05.eml} +0 -0
  333. data/set-of-emails/maildir/bsd/{email-office365-06.eml → lhost-office365-06.eml} +0 -0
  334. data/set-of-emails/maildir/bsd/{email-office365-07.eml → lhost-office365-07.eml} +0 -0
  335. data/set-of-emails/maildir/bsd/{email-office365-08.eml → lhost-office365-08.eml} +0 -0
  336. data/set-of-emails/maildir/bsd/{email-office365-09.eml → lhost-office365-09.eml} +0 -0
  337. data/set-of-emails/maildir/bsd/{email-office365-10.eml → lhost-office365-10.eml} +0 -0
  338. data/set-of-emails/maildir/bsd/{email-office365-11.eml → lhost-office365-11.eml} +0 -0
  339. data/set-of-emails/maildir/bsd/{email-office365-12.eml → lhost-office365-12.eml} +0 -0
  340. data/set-of-emails/maildir/bsd/lhost-office365-13.eml +259 -0
  341. data/set-of-emails/maildir/bsd/{email-opensmtpd-01.eml → lhost-opensmtpd-01.eml} +0 -0
  342. data/set-of-emails/maildir/bsd/{email-opensmtpd-02.eml → lhost-opensmtpd-02.eml} +0 -0
  343. data/set-of-emails/maildir/bsd/{email-opensmtpd-03.eml → lhost-opensmtpd-03.eml} +0 -0
  344. data/set-of-emails/maildir/bsd/{email-opensmtpd-04.eml → lhost-opensmtpd-04.eml} +0 -0
  345. data/set-of-emails/maildir/bsd/{email-opensmtpd-05.eml → lhost-opensmtpd-05.eml} +0 -0
  346. data/set-of-emails/maildir/bsd/{email-opensmtpd-06.eml → lhost-opensmtpd-06.eml} +0 -0
  347. data/set-of-emails/maildir/bsd/{email-outlook-01.eml → lhost-outlook-01.eml} +0 -0
  348. data/set-of-emails/maildir/bsd/{email-outlook-02.eml → lhost-outlook-02.eml} +0 -0
  349. data/set-of-emails/maildir/bsd/{email-outlook-03.eml → lhost-outlook-03.eml} +0 -0
  350. data/set-of-emails/maildir/bsd/{email-outlook-04.eml → lhost-outlook-04.eml} +0 -0
  351. data/set-of-emails/maildir/bsd/{email-outlook-06.eml → lhost-outlook-06.eml} +0 -0
  352. data/set-of-emails/maildir/bsd/{email-outlook-07.eml → lhost-outlook-07.eml} +0 -0
  353. data/set-of-emails/maildir/bsd/{email-outlook-08.eml → lhost-outlook-08.eml} +0 -0
  354. data/set-of-emails/maildir/bsd/{email-outlook-09.eml → lhost-outlook-09.eml} +0 -0
  355. data/set-of-emails/maildir/bsd/{email-postfix-01.eml → lhost-postfix-01.eml} +0 -0
  356. data/set-of-emails/maildir/bsd/{email-postfix-02.eml → lhost-postfix-02.eml} +0 -0
  357. data/set-of-emails/maildir/bsd/{email-postfix-03.eml → lhost-postfix-03.eml} +0 -0
  358. data/set-of-emails/maildir/bsd/{email-postfix-04.eml → lhost-postfix-04.eml} +0 -0
  359. data/set-of-emails/maildir/bsd/{email-postfix-05.eml → lhost-postfix-05.eml} +0 -0
  360. data/set-of-emails/maildir/bsd/{email-postfix-06.eml → lhost-postfix-06.eml} +0 -0
  361. data/set-of-emails/maildir/bsd/{email-postfix-07.eml → lhost-postfix-07.eml} +0 -0
  362. data/set-of-emails/maildir/bsd/{email-postfix-08.eml → lhost-postfix-08.eml} +0 -0
  363. data/set-of-emails/maildir/bsd/{email-postfix-09.eml → lhost-postfix-09.eml} +0 -0
  364. data/set-of-emails/maildir/bsd/{email-postfix-10.eml → lhost-postfix-10.eml} +0 -0
  365. data/set-of-emails/maildir/bsd/{email-postfix-11.eml → lhost-postfix-11.eml} +0 -0
  366. data/set-of-emails/maildir/bsd/{email-postfix-13.eml → lhost-postfix-13.eml} +0 -0
  367. data/set-of-emails/maildir/bsd/{email-postfix-14.eml → lhost-postfix-14.eml} +0 -0
  368. data/set-of-emails/maildir/bsd/{email-postfix-15.eml → lhost-postfix-15.eml} +0 -0
  369. data/set-of-emails/maildir/bsd/{email-postfix-16.eml → lhost-postfix-16.eml} +0 -0
  370. data/set-of-emails/maildir/bsd/{email-postfix-17.eml → lhost-postfix-17.eml} +0 -0
  371. data/set-of-emails/maildir/bsd/{email-postfix-28.eml → lhost-postfix-28.eml} +0 -0
  372. data/set-of-emails/maildir/bsd/{email-postfix-29.eml → lhost-postfix-29.eml} +0 -0
  373. data/set-of-emails/maildir/bsd/{email-postfix-30.eml → lhost-postfix-30.eml} +0 -0
  374. data/set-of-emails/maildir/bsd/{email-postfix-31.eml → lhost-postfix-31.eml} +0 -0
  375. data/set-of-emails/maildir/bsd/{email-postfix-32.eml → lhost-postfix-32.eml} +0 -0
  376. data/set-of-emails/maildir/bsd/{email-postfix-33.eml → lhost-postfix-33.eml} +0 -0
  377. data/set-of-emails/maildir/bsd/{email-postfix-34.eml → lhost-postfix-34.eml} +0 -0
  378. data/set-of-emails/maildir/bsd/{email-postfix-35.eml → lhost-postfix-35.eml} +0 -0
  379. data/set-of-emails/maildir/bsd/{email-postfix-36.eml → lhost-postfix-36.eml} +0 -0
  380. data/set-of-emails/maildir/bsd/{email-postfix-37.eml → lhost-postfix-37.eml} +0 -0
  381. data/set-of-emails/maildir/bsd/{email-postfix-38.eml → lhost-postfix-38.eml} +1 -1
  382. data/set-of-emails/maildir/bsd/{email-postfix-39.eml → lhost-postfix-39.eml} +0 -0
  383. data/set-of-emails/maildir/bsd/{email-postfix-40.eml → lhost-postfix-40.eml} +0 -0
  384. data/set-of-emails/maildir/bsd/{email-postfix-41.eml → lhost-postfix-41.eml} +0 -0
  385. data/set-of-emails/maildir/bsd/{email-postfix-42.eml → lhost-postfix-42.eml} +0 -0
  386. data/set-of-emails/maildir/bsd/{email-postfix-43.eml → lhost-postfix-43.eml} +0 -0
  387. data/set-of-emails/maildir/bsd/{email-postfix-44.eml → lhost-postfix-44.eml} +0 -0
  388. data/set-of-emails/maildir/bsd/{email-postfix-45.eml → lhost-postfix-45.eml} +0 -0
  389. data/set-of-emails/maildir/bsd/{email-postfix-46.eml → lhost-postfix-46.eml} +0 -0
  390. data/set-of-emails/maildir/bsd/{email-postfix-47.eml → lhost-postfix-47.eml} +0 -0
  391. data/set-of-emails/maildir/bsd/{email-postfix-48.eml → lhost-postfix-48.eml} +0 -0
  392. data/set-of-emails/maildir/bsd/{email-postfix-49.eml → lhost-postfix-49.eml} +0 -0
  393. data/set-of-emails/maildir/bsd/{email-postfix-50.eml → lhost-postfix-50.eml} +0 -0
  394. data/set-of-emails/maildir/bsd/{email-postfix-51.eml → lhost-postfix-51.eml} +0 -0
  395. data/set-of-emails/maildir/bsd/{email-postfix-52.eml → lhost-postfix-52.eml} +0 -0
  396. data/set-of-emails/maildir/bsd/{email-postfix-53.eml → lhost-postfix-53.eml} +0 -0
  397. data/set-of-emails/maildir/bsd/{email-postfix-54.eml → lhost-postfix-54.eml} +0 -0
  398. data/set-of-emails/maildir/bsd/{email-postfix-55.eml → lhost-postfix-55.eml} +0 -0
  399. data/set-of-emails/maildir/bsd/{email-postfix-56.eml → lhost-postfix-56.eml} +0 -0
  400. data/set-of-emails/maildir/bsd/{email-postfix-57.eml → lhost-postfix-57.eml} +0 -0
  401. data/set-of-emails/maildir/bsd/{email-postfix-58.eml → lhost-postfix-58.eml} +0 -0
  402. data/set-of-emails/maildir/bsd/{email-postfix-59.eml → lhost-postfix-59.eml} +0 -0
  403. data/set-of-emails/maildir/bsd/{email-postfix-60.eml → lhost-postfix-60.eml} +0 -0
  404. data/set-of-emails/maildir/bsd/{email-postfix-61.eml → lhost-postfix-61.eml} +0 -0
  405. data/set-of-emails/maildir/bsd/{email-postfix-62.eml → lhost-postfix-62.eml} +0 -0
  406. data/set-of-emails/maildir/bsd/{email-postfix-63.eml → lhost-postfix-63.eml} +0 -0
  407. data/set-of-emails/maildir/bsd/lhost-postfix-64.eml +96 -0
  408. data/set-of-emails/maildir/bsd/lhost-postfix-65.eml +69 -0
  409. data/set-of-emails/maildir/bsd/lhost-postfix-66.eml +80 -0
  410. data/set-of-emails/maildir/bsd/lhost-postfix-67.eml +80 -0
  411. data/set-of-emails/maildir/bsd/lhost-postfix-68.eml +82 -0
  412. data/set-of-emails/maildir/bsd/lhost-postfix-69.eml +80 -0
  413. data/set-of-emails/maildir/bsd/lhost-postfix-70.eml +87 -0
  414. data/set-of-emails/maildir/bsd/lhost-postfix-71.eml +81 -0
  415. data/set-of-emails/maildir/bsd/lhost-postfix-72.eml +81 -0
  416. data/set-of-emails/maildir/bsd/lhost-postfix-73.eml +79 -0
  417. data/set-of-emails/maildir/bsd/lhost-postfix-74.eml +83 -0
  418. data/set-of-emails/maildir/bsd/{rfc3464-05.eml → lhost-powermta-01.eml} +19 -18
  419. data/set-of-emails/maildir/bsd/lhost-powermta-02.eml +58 -0
  420. data/set-of-emails/maildir/bsd/lhost-powermta-03.eml +71 -0
  421. data/set-of-emails/maildir/bsd/{email-qmail-01.eml → lhost-qmail-01.eml} +0 -0
  422. data/set-of-emails/maildir/bsd/{email-qmail-02.eml → lhost-qmail-02.eml} +0 -0
  423. data/set-of-emails/maildir/bsd/{email-qmail-03.eml → lhost-qmail-03.eml} +0 -0
  424. data/set-of-emails/maildir/bsd/{email-qmail-04.eml → lhost-qmail-04.eml} +0 -0
  425. data/set-of-emails/maildir/bsd/{email-qmail-05.eml → lhost-qmail-05.eml} +0 -0
  426. data/set-of-emails/maildir/bsd/{email-qmail-06.eml → lhost-qmail-06.eml} +0 -0
  427. data/set-of-emails/maildir/bsd/{email-qmail-07.eml → lhost-qmail-07.eml} +0 -0
  428. data/set-of-emails/maildir/bsd/{email-qmail-08.eml → lhost-qmail-08.eml} +0 -0
  429. data/set-of-emails/maildir/bsd/{email-qmail-09.eml → lhost-qmail-09.eml} +0 -0
  430. data/set-of-emails/maildir/bsd/{email-qmail-10.eml → lhost-qmail-10.eml} +0 -0
  431. data/set-of-emails/maildir/bsd/{email-receivingses-01.eml → lhost-receivingses-01.eml} +0 -0
  432. data/set-of-emails/maildir/bsd/{email-receivingses-02.eml → lhost-receivingses-02.eml} +0 -0
  433. data/set-of-emails/maildir/bsd/{email-receivingses-03.eml → lhost-receivingses-03.eml} +0 -0
  434. data/set-of-emails/maildir/bsd/{email-receivingses-04.eml → lhost-receivingses-04.eml} +0 -0
  435. data/set-of-emails/maildir/bsd/{email-receivingses-05.eml → lhost-receivingses-05.eml} +0 -0
  436. data/set-of-emails/maildir/bsd/{email-receivingses-06.eml → lhost-receivingses-06.eml} +0 -0
  437. data/set-of-emails/maildir/bsd/{email-receivingses-07.eml → lhost-receivingses-07.eml} +0 -0
  438. data/set-of-emails/maildir/bsd/{email-sendgrid-01.eml → lhost-sendgrid-01.eml} +0 -0
  439. data/set-of-emails/maildir/bsd/{email-sendgrid-02.eml → lhost-sendgrid-02.eml} +0 -0
  440. data/set-of-emails/maildir/bsd/{email-sendgrid-03.eml → lhost-sendgrid-03.eml} +0 -0
  441. data/set-of-emails/maildir/bsd/{email-sendmail-01.eml → lhost-sendmail-01.eml} +0 -0
  442. data/set-of-emails/maildir/bsd/{email-sendmail-02.eml → lhost-sendmail-02.eml} +0 -0
  443. data/set-of-emails/maildir/bsd/{email-sendmail-03.eml → lhost-sendmail-03.eml} +0 -0
  444. data/set-of-emails/maildir/bsd/{email-sendmail-04.eml → lhost-sendmail-04.eml} +0 -0
  445. data/set-of-emails/maildir/bsd/{email-sendmail-05.eml → lhost-sendmail-05.eml} +0 -0
  446. data/set-of-emails/maildir/bsd/{email-sendmail-06.eml → lhost-sendmail-06.eml} +0 -0
  447. data/set-of-emails/maildir/bsd/{email-sendmail-07.eml → lhost-sendmail-07.eml} +0 -0
  448. data/set-of-emails/maildir/bsd/{email-sendmail-08.eml → lhost-sendmail-08.eml} +0 -0
  449. data/set-of-emails/maildir/bsd/{email-sendmail-09.eml → lhost-sendmail-09.eml} +0 -0
  450. data/set-of-emails/maildir/bsd/{email-sendmail-10.eml → lhost-sendmail-10.eml} +0 -0
  451. data/set-of-emails/maildir/bsd/{email-sendmail-11.eml → lhost-sendmail-11.eml} +0 -0
  452. data/set-of-emails/maildir/bsd/{email-sendmail-12.eml → lhost-sendmail-12.eml} +0 -0
  453. data/set-of-emails/maildir/bsd/{email-sendmail-13.eml → lhost-sendmail-13.eml} +0 -0
  454. data/set-of-emails/maildir/bsd/{email-sendmail-14.eml → lhost-sendmail-14.eml} +0 -0
  455. data/set-of-emails/maildir/bsd/{email-sendmail-15.eml → lhost-sendmail-15.eml} +0 -0
  456. data/set-of-emails/maildir/bsd/{email-sendmail-16.eml → lhost-sendmail-16.eml} +0 -0
  457. data/set-of-emails/maildir/bsd/{email-sendmail-17.eml → lhost-sendmail-17.eml} +0 -0
  458. data/set-of-emails/maildir/bsd/{email-sendmail-18.eml → lhost-sendmail-18.eml} +0 -0
  459. data/set-of-emails/maildir/bsd/{email-sendmail-19.eml → lhost-sendmail-19.eml} +0 -0
  460. data/set-of-emails/maildir/bsd/{email-sendmail-20.eml → lhost-sendmail-20.eml} +0 -0
  461. data/set-of-emails/maildir/bsd/{email-sendmail-21.eml → lhost-sendmail-21.eml} +0 -0
  462. data/set-of-emails/maildir/bsd/{email-sendmail-22.eml → lhost-sendmail-22.eml} +0 -0
  463. data/set-of-emails/maildir/bsd/{email-sendmail-24.eml → lhost-sendmail-24.eml} +0 -0
  464. data/set-of-emails/maildir/bsd/{email-sendmail-25.eml → lhost-sendmail-25.eml} +0 -0
  465. data/set-of-emails/maildir/bsd/{email-sendmail-26.eml → lhost-sendmail-26.eml} +0 -0
  466. data/set-of-emails/maildir/bsd/{email-sendmail-27.eml → lhost-sendmail-27.eml} +0 -0
  467. data/set-of-emails/maildir/bsd/{email-sendmail-28.eml → lhost-sendmail-28.eml} +0 -0
  468. data/set-of-emails/maildir/bsd/{email-sendmail-29.eml → lhost-sendmail-29.eml} +0 -0
  469. data/set-of-emails/maildir/bsd/{email-sendmail-30.eml → lhost-sendmail-30.eml} +0 -0
  470. data/set-of-emails/maildir/bsd/{email-sendmail-31.eml → lhost-sendmail-31.eml} +0 -0
  471. data/set-of-emails/maildir/bsd/{email-sendmail-32.eml → lhost-sendmail-32.eml} +0 -0
  472. data/set-of-emails/maildir/bsd/{email-sendmail-33.eml → lhost-sendmail-33.eml} +0 -0
  473. data/set-of-emails/maildir/bsd/{email-sendmail-34.eml → lhost-sendmail-34.eml} +0 -0
  474. data/set-of-emails/maildir/bsd/{email-sendmail-35.eml → lhost-sendmail-35.eml} +0 -0
  475. data/set-of-emails/maildir/bsd/{email-sendmail-36.eml → lhost-sendmail-36.eml} +0 -0
  476. data/set-of-emails/maildir/bsd/{email-sendmail-37.eml → lhost-sendmail-37.eml} +0 -0
  477. data/set-of-emails/maildir/bsd/{email-sendmail-38.eml → lhost-sendmail-38.eml} +0 -0
  478. data/set-of-emails/maildir/bsd/{email-sendmail-39.eml → lhost-sendmail-39.eml} +0 -0
  479. data/set-of-emails/maildir/bsd/{email-sendmail-40.eml → lhost-sendmail-40.eml} +0 -0
  480. data/set-of-emails/maildir/bsd/{email-sendmail-41.eml → lhost-sendmail-41.eml} +0 -0
  481. data/set-of-emails/maildir/bsd/{email-sendmail-42.eml → lhost-sendmail-42.eml} +0 -0
  482. data/set-of-emails/maildir/bsd/{email-sendmail-43.eml → lhost-sendmail-43.eml} +0 -0
  483. data/set-of-emails/maildir/bsd/{email-sendmail-44.eml → lhost-sendmail-44.eml} +0 -0
  484. data/set-of-emails/maildir/bsd/{email-sendmail-45.eml → lhost-sendmail-45.eml} +0 -0
  485. data/set-of-emails/maildir/bsd/{email-sendmail-46.eml → lhost-sendmail-46.eml} +0 -0
  486. data/set-of-emails/maildir/bsd/{email-sendmail-47.eml → lhost-sendmail-47.eml} +0 -0
  487. data/set-of-emails/maildir/bsd/{email-sendmail-48.eml → lhost-sendmail-48.eml} +0 -0
  488. data/set-of-emails/maildir/bsd/{email-sendmail-49.eml → lhost-sendmail-49.eml} +0 -0
  489. data/set-of-emails/maildir/bsd/{email-sendmail-50.eml → lhost-sendmail-50.eml} +0 -0
  490. data/set-of-emails/maildir/bsd/{email-sendmail-51.eml → lhost-sendmail-51.eml} +0 -0
  491. data/set-of-emails/maildir/bsd/{email-sendmail-52.eml → lhost-sendmail-52.eml} +0 -0
  492. data/set-of-emails/maildir/bsd/{email-sendmail-53.eml → lhost-sendmail-53.eml} +0 -0
  493. data/set-of-emails/maildir/bsd/{email-sendmail-54.eml → lhost-sendmail-54.eml} +0 -0
  494. data/set-of-emails/maildir/bsd/{email-sendmail-55.eml → lhost-sendmail-55.eml} +0 -0
  495. data/set-of-emails/maildir/bsd/{email-sendmail-56.eml → lhost-sendmail-56.eml} +0 -0
  496. data/set-of-emails/maildir/bsd/lhost-sendmail-57.eml +59 -0
  497. data/set-of-emails/maildir/bsd/lhost-sendmail-58.eml +70 -0
  498. data/set-of-emails/maildir/bsd/lhost-sendmail-59.eml +68 -0
  499. data/set-of-emails/maildir/bsd/{email-surfcontrol-01.eml → lhost-surfcontrol-01.eml} +0 -0
  500. data/set-of-emails/maildir/bsd/{email-surfcontrol-02.eml → lhost-surfcontrol-02.eml} +0 -0
  501. data/set-of-emails/maildir/bsd/{email-surfcontrol-03.eml → lhost-surfcontrol-03.eml} +0 -0
  502. data/set-of-emails/maildir/bsd/{email-v5sendmail-01.eml → lhost-v5sendmail-01.eml} +0 -0
  503. data/set-of-emails/maildir/bsd/{email-v5sendmail-02.eml → lhost-v5sendmail-02.eml} +0 -0
  504. data/set-of-emails/maildir/bsd/{email-v5sendmail-03.eml → lhost-v5sendmail-03.eml} +0 -0
  505. data/set-of-emails/maildir/bsd/{email-v5sendmail-04.eml → lhost-v5sendmail-04.eml} +0 -0
  506. data/set-of-emails/maildir/bsd/{email-v5sendmail-05.eml → lhost-v5sendmail-05.eml} +0 -0
  507. data/set-of-emails/maildir/bsd/{email-v5sendmail-06.eml → lhost-v5sendmail-06.eml} +0 -0
  508. data/set-of-emails/maildir/bsd/{email-v5sendmail-07.eml → lhost-v5sendmail-07.eml} +0 -0
  509. data/set-of-emails/maildir/bsd/{email-verizon-01.eml → lhost-verizon-01.eml} +0 -0
  510. data/set-of-emails/maildir/bsd/{email-verizon-02.eml → lhost-verizon-02.eml} +0 -0
  511. data/set-of-emails/maildir/bsd/{email-x1-01.eml → lhost-x1-01.eml} +0 -0
  512. data/set-of-emails/maildir/bsd/{email-x1-02.eml → lhost-x1-02.eml} +0 -0
  513. data/set-of-emails/maildir/bsd/{email-x2-01.eml → lhost-x2-01.eml} +0 -0
  514. data/set-of-emails/maildir/bsd/{email-x2-02.eml → lhost-x2-02.eml} +0 -0
  515. data/set-of-emails/maildir/bsd/{email-x2-03.eml → lhost-x2-03.eml} +0 -0
  516. data/set-of-emails/maildir/bsd/{email-x2-04.eml → lhost-x2-04.eml} +0 -0
  517. data/set-of-emails/maildir/bsd/{email-x2-05.eml → lhost-x2-05.eml} +0 -0
  518. data/set-of-emails/maildir/bsd/{email-x3-01.eml → lhost-x3-01.eml} +0 -0
  519. data/set-of-emails/maildir/bsd/{email-x3-02.eml → lhost-x3-02.eml} +0 -0
  520. data/set-of-emails/maildir/bsd/{email-x3-03.eml → lhost-x3-03.eml} +0 -0
  521. data/set-of-emails/maildir/bsd/{email-x3-05.eml → lhost-x3-05.eml} +0 -0
  522. data/set-of-emails/maildir/bsd/lhost-x3-06.eml +53 -0
  523. data/set-of-emails/maildir/bsd/{email-x4-01.eml → lhost-x4-01.eml} +0 -0
  524. data/set-of-emails/maildir/bsd/{email-x4-08.eml → lhost-x4-08.eml} +0 -0
  525. data/set-of-emails/maildir/bsd/{email-x5-01.eml → lhost-x5-01.eml} +0 -0
  526. data/set-of-emails/maildir/bsd/lhost-x6-01.eml +71 -0
  527. data/set-of-emails/maildir/bsd/lhost-x6-02.eml +68 -0
  528. data/set-of-emails/maildir/bsd/{email-yahoo-01.eml → lhost-yahoo-01.eml} +0 -0
  529. data/set-of-emails/maildir/bsd/{email-yahoo-02.eml → lhost-yahoo-02.eml} +0 -0
  530. data/set-of-emails/maildir/bsd/{email-yahoo-03.eml → lhost-yahoo-03.eml} +0 -0
  531. data/set-of-emails/maildir/bsd/{email-yahoo-04.eml → lhost-yahoo-04.eml} +0 -0
  532. data/set-of-emails/maildir/bsd/{email-yahoo-05.eml → lhost-yahoo-05.eml} +0 -0
  533. data/set-of-emails/maildir/bsd/{email-yahoo-06.eml → lhost-yahoo-06.eml} +0 -0
  534. data/set-of-emails/maildir/bsd/{email-yahoo-07.eml → lhost-yahoo-07.eml} +0 -0
  535. data/set-of-emails/maildir/bsd/{email-yahoo-08.eml → lhost-yahoo-08.eml} +0 -0
  536. data/set-of-emails/maildir/bsd/{email-yahoo-09.eml → lhost-yahoo-09.eml} +0 -0
  537. data/set-of-emails/maildir/bsd/{email-yahoo-10.eml → lhost-yahoo-10.eml} +0 -0
  538. data/set-of-emails/maildir/bsd/{email-yahoo-11.eml → lhost-yahoo-11.eml} +0 -0
  539. data/set-of-emails/maildir/bsd/{email-yahoo-12.eml → lhost-yahoo-12.eml} +0 -0
  540. data/set-of-emails/maildir/bsd/{email-yahoo-13.eml → lhost-yahoo-13.eml} +0 -0
  541. data/set-of-emails/maildir/bsd/{email-yahoo-14.eml → lhost-yahoo-14.eml} +0 -0
  542. data/set-of-emails/maildir/bsd/{email-yandex-01.eml → lhost-yandex-01.eml} +0 -0
  543. data/set-of-emails/maildir/bsd/{email-yandex-02.eml → lhost-yandex-02.eml} +0 -0
  544. data/set-of-emails/maildir/bsd/{email-yandex-03.eml → lhost-yandex-03.eml} +0 -0
  545. data/set-of-emails/maildir/bsd/{email-zoho-01.eml → lhost-zoho-01.eml} +0 -0
  546. data/set-of-emails/maildir/bsd/{email-zoho-02.eml → lhost-zoho-02.eml} +0 -0
  547. data/set-of-emails/maildir/bsd/{email-zoho-03.eml → lhost-zoho-03.eml} +0 -0
  548. data/set-of-emails/maildir/bsd/{email-zoho-04.eml → lhost-zoho-04.eml} +0 -0
  549. data/set-of-emails/maildir/bsd/{email-zoho-05.eml → lhost-zoho-05.eml} +0 -0
  550. data/set-of-emails/maildir/bsd/rfc3834-03.eml +26 -0
  551. data/set-of-emails/maildir/bsd/{rfc3464-41.eml → rfc3834-04.eml} +0 -0
  552. data/set-of-emails/maildir/bsd/rhost-cox-01.eml +192 -0
  553. data/set-of-emails/maildir/bsd/rhost-franceptt-04.eml +66 -0
  554. data/set-of-emails/maildir/bsd/rhost-franceptt-05.eml +96 -0
  555. data/set-of-emails/maildir/bsd/rhost-franceptt-06.eml +100 -0
  556. data/set-of-emails/maildir/bsd/rhost-franceptt-07.eml +97 -0
  557. data/set-of-emails/maildir/bsd/rhost-franceptt-08.eml +78 -0
  558. data/set-of-emails/maildir/bsd/rhost-franceptt-10.eml +79 -0
  559. data/set-of-emails/maildir/bsd/rhost-franceptt-11.eml +96 -0
  560. data/set-of-emails/maildir/bsd/rhost-spectrum-01.eml +111 -0
  561. data/set-of-emails/maildir/dos/{email-activehunter-01.eml → lhost-activehunter-01.eml} +0 -0
  562. data/set-of-emails/maildir/dos/{email-amavis-01.eml → lhost-amavis-01.eml} +0 -0
  563. data/set-of-emails/maildir/dos/{email-amazonses-01.eml → lhost-amazonses-01.eml} +0 -0
  564. data/set-of-emails/maildir/dos/{email-amazonworkmail-01.eml → lhost-amazonworkmail-01.eml} +0 -0
  565. data/set-of-emails/maildir/dos/{email-aol-01.eml → lhost-aol-01.eml} +0 -0
  566. data/set-of-emails/maildir/dos/{email-apachejames-01.eml → lhost-apachejames-01.eml} +0 -0
  567. data/set-of-emails/maildir/dos/lhost-barracuda-01.eml +67 -0
  568. data/set-of-emails/maildir/dos/{email-bigfoot-01.eml → lhost-bigfoot-01.eml} +0 -0
  569. data/set-of-emails/maildir/dos/{email-biglobe-01.eml → lhost-biglobe-01.eml} +0 -0
  570. data/set-of-emails/maildir/dos/{email-courier-01.eml → lhost-courier-01.eml} +0 -0
  571. data/set-of-emails/maildir/dos/{email-domino-01.eml → lhost-domino-01.eml} +0 -0
  572. data/set-of-emails/maildir/dos/{email-einsundeins-01.eml → lhost-einsundeins-01.eml} +0 -0
  573. data/set-of-emails/maildir/dos/{email-exchange-01.eml → lhost-exchange-01.eml} +0 -0
  574. data/set-of-emails/maildir/dos/{email-exchange2003-01.eml → lhost-exchange2003-01.eml} +0 -0
  575. data/set-of-emails/maildir/dos/{email-exchange2007-01.eml → lhost-exchange2007-01.eml} +0 -0
  576. data/set-of-emails/maildir/dos/{email-exim-01.eml → lhost-exim-01.eml} +0 -0
  577. data/set-of-emails/maildir/dos/{email-ezweb-01.eml → lhost-ezweb-01.eml} +0 -0
  578. data/set-of-emails/maildir/dos/{email-facebook-01.eml → lhost-facebook-01.eml} +0 -0
  579. data/set-of-emails/maildir/dos/{email-google-01.eml → lhost-gmail-01.eml} +0 -0
  580. data/set-of-emails/maildir/dos/{email-gmx-01.eml → lhost-gmx-01.eml} +0 -0
  581. data/set-of-emails/maildir/dos/lhost-googlegroups-01.eml +116 -0
  582. data/set-of-emails/maildir/dos/{email-gsuite-01.eml → lhost-gsuite-01.eml} +0 -0
  583. data/set-of-emails/maildir/dos/{email-imailserver-01.eml → lhost-imailserver-01.eml} +0 -0
  584. data/set-of-emails/maildir/dos/{email-interscanmss-01.eml → lhost-interscanmss-01.eml} +0 -0
  585. data/set-of-emails/maildir/dos/{email-kddi-01.eml → lhost-kddi-01.eml} +0 -0
  586. data/set-of-emails/maildir/dos/{email-mailfoundry-01.eml → lhost-mailfoundry-01.eml} +0 -0
  587. data/set-of-emails/maildir/dos/{email-mailmarshalsmtp-01.eml → lhost-mailmarshalsmtp-01.eml} +0 -0
  588. data/set-of-emails/maildir/dos/{email-mailru-01.eml → lhost-mailru-01.eml} +0 -0
  589. data/set-of-emails/maildir/dos/{email-mcafee-01.eml → lhost-mcafee-01.eml} +0 -0
  590. data/set-of-emails/maildir/dos/{email-messagelabs-01.eml → lhost-messagelabs-01.eml} +0 -0
  591. data/set-of-emails/maildir/dos/{email-messagingserver-01.eml → lhost-messagingserver-01.eml} +0 -0
  592. data/set-of-emails/maildir/dos/{email-mfilter-01.eml → lhost-mfilter-01.eml} +0 -0
  593. data/set-of-emails/maildir/dos/{email-mxlogic-01.eml → lhost-mxlogic-01.eml} +0 -0
  594. data/set-of-emails/maildir/dos/{email-notes-01.eml → lhost-notes-01.eml} +0 -0
  595. data/set-of-emails/maildir/dos/{email-office365-01.eml → lhost-office365-01.eml} +0 -0
  596. data/set-of-emails/maildir/dos/{email-opensmtpd-01.eml → lhost-opensmtpd-01.eml} +0 -0
  597. data/set-of-emails/maildir/dos/{email-outlook-01.eml → lhost-outlook-01.eml} +0 -0
  598. data/set-of-emails/maildir/dos/{email-postfix-01.eml → lhost-postfix-01.eml} +0 -0
  599. data/set-of-emails/maildir/dos/lhost-powermta-01.eml +64 -0
  600. data/set-of-emails/maildir/dos/{email-qmail-01.eml → lhost-qmail-01.eml} +0 -0
  601. data/set-of-emails/maildir/dos/{email-receivingses-01.eml → lhost-receivingses-01.eml} +0 -0
  602. data/set-of-emails/maildir/dos/{email-sendgrid-01.eml → lhost-sendgrid-01.eml} +0 -0
  603. data/set-of-emails/maildir/dos/{email-sendmail-01.eml → lhost-sendmail-01.eml} +0 -0
  604. data/set-of-emails/maildir/dos/{email-surfcontrol-01.eml → lhost-surfcontrol-01.eml} +0 -0
  605. data/set-of-emails/maildir/dos/{email-v5sendmail-01.eml → lhost-v5sendmail-01.eml} +0 -0
  606. data/set-of-emails/maildir/dos/{email-verizon-01.eml → lhost-verizon-01.eml} +0 -0
  607. data/set-of-emails/maildir/dos/{email-x1-01.eml → lhost-x1-01.eml} +0 -0
  608. data/set-of-emails/maildir/dos/{email-x2-01.eml → lhost-x2-01.eml} +0 -0
  609. data/set-of-emails/maildir/dos/{email-x3-01.eml → lhost-x3-01.eml} +0 -0
  610. data/set-of-emails/maildir/dos/{email-x4-01.eml → lhost-x4-01.eml} +0 -0
  611. data/set-of-emails/maildir/dos/{email-x5-01.eml → lhost-x5-01.eml} +0 -0
  612. data/set-of-emails/maildir/dos/lhost-x6-01.eml +71 -0
  613. data/set-of-emails/maildir/dos/{email-yahoo-01.eml → lhost-yahoo-01.eml} +0 -0
  614. data/set-of-emails/maildir/dos/{email-yandex-01.eml → lhost-yandex-01.eml} +0 -0
  615. data/set-of-emails/maildir/dos/{email-zoho-01.eml → lhost-zoho-01.eml} +0 -0
  616. data/set-of-emails/maildir/dos/rhost-iua-01.eml +70 -0
  617. data/set-of-emails/maildir/mac/{email-activehunter-01.eml → lhost-activehunter-01.eml} +0 -0
  618. data/set-of-emails/maildir/mac/{email-amavis-01.eml → lhost-amavis-01.eml} +0 -0
  619. data/set-of-emails/maildir/mac/{email-amazonses-01.eml → lhost-amazonses-01.eml} +0 -0
  620. data/set-of-emails/maildir/mac/{email-amazonworkmail-01.eml → lhost-amazonworkmail-01.eml} +0 -0
  621. data/set-of-emails/maildir/mac/{email-aol-01.eml → lhost-aol-01.eml} +0 -0
  622. data/set-of-emails/maildir/mac/{email-apachejames-01.eml → lhost-apachejames-01.eml} +0 -0
  623. data/set-of-emails/maildir/mac/lhost-barracuda-01.eml +1 -4
  624. data/set-of-emails/maildir/mac/{email-bigfoot-01.eml → lhost-bigfoot-01.eml} +0 -0
  625. data/set-of-emails/maildir/mac/{email-biglobe-01.eml → lhost-biglobe-01.eml} +0 -0
  626. data/set-of-emails/maildir/mac/{email-courier-01.eml → lhost-courier-01.eml} +0 -0
  627. data/set-of-emails/maildir/mac/{email-domino-01.eml → lhost-domino-01.eml} +0 -0
  628. data/set-of-emails/maildir/mac/{email-einsundeins-01.eml → lhost-einsundeins-01.eml} +0 -0
  629. data/set-of-emails/maildir/mac/{email-exchange-01.eml → lhost-exchange-01.eml} +0 -0
  630. data/set-of-emails/maildir/mac/{email-exchange2003-01.eml → lhost-exchange2003-01.eml} +0 -0
  631. data/set-of-emails/maildir/mac/{email-exchange2007-01.eml → lhost-exchange2007-01.eml} +0 -0
  632. data/set-of-emails/maildir/mac/{email-exim-01.eml → lhost-exim-01.eml} +0 -0
  633. data/set-of-emails/maildir/mac/{email-ezweb-01.eml → lhost-ezweb-01.eml} +0 -0
  634. data/set-of-emails/maildir/mac/{email-facebook-01.eml → lhost-facebook-01.eml} +0 -0
  635. data/set-of-emails/maildir/mac/{email-google-01.eml → lhost-gmail-01.eml} +0 -0
  636. data/set-of-emails/maildir/mac/{email-gmx-01.eml → lhost-gmx-01.eml} +0 -0
  637. data/set-of-emails/maildir/mac/lhost-googlegroups-01.eml +1 -1
  638. data/set-of-emails/maildir/mac/{email-gsuite-01.eml → lhost-gsuite-01.eml} +0 -0
  639. data/set-of-emails/maildir/mac/{email-imailserver-01.eml → lhost-imailserver-01.eml} +0 -0
  640. data/set-of-emails/maildir/mac/{email-interscanmss-01.eml → lhost-interscanmss-01.eml} +0 -0
  641. data/set-of-emails/maildir/mac/{email-kddi-01.eml → lhost-kddi-01.eml} +0 -0
  642. data/set-of-emails/maildir/mac/{email-mailfoundry-01.eml → lhost-mailfoundry-01.eml} +0 -0
  643. data/set-of-emails/maildir/mac/{email-mailmarshalsmtp-01.eml → lhost-mailmarshalsmtp-01.eml} +0 -0
  644. data/set-of-emails/maildir/mac/{email-mailru-01.eml → lhost-mailru-01.eml} +0 -0
  645. data/set-of-emails/maildir/mac/{email-mcafee-01.eml → lhost-mcafee-01.eml} +0 -0
  646. data/set-of-emails/maildir/mac/{email-messagelabs-01.eml → lhost-messagelabs-01.eml} +0 -0
  647. data/set-of-emails/maildir/mac/{email-messagingserver-01.eml → lhost-messagingserver-01.eml} +0 -0
  648. data/set-of-emails/maildir/mac/{email-mfilter-01.eml → lhost-mfilter-01.eml} +0 -0
  649. data/set-of-emails/maildir/mac/{email-mxlogic-01.eml → lhost-mxlogic-01.eml} +0 -0
  650. data/set-of-emails/maildir/mac/{email-notes-01.eml → lhost-notes-01.eml} +0 -0
  651. data/set-of-emails/maildir/mac/{email-office365-01.eml → lhost-office365-01.eml} +0 -0
  652. data/set-of-emails/maildir/mac/{email-opensmtpd-01.eml → lhost-opensmtpd-01.eml} +0 -0
  653. data/set-of-emails/maildir/mac/{email-outlook-01.eml → lhost-outlook-01.eml} +0 -0
  654. data/set-of-emails/maildir/mac/{email-postfix-01.eml → lhost-postfix-01.eml} +0 -0
  655. data/set-of-emails/maildir/mac/lhost-powermta-01.eml +1 -4
  656. data/set-of-emails/maildir/mac/{email-qmail-01.eml → lhost-qmail-01.eml} +0 -0
  657. data/set-of-emails/maildir/mac/{email-receivingses-01.eml → lhost-receivingses-01.eml} +0 -0
  658. data/set-of-emails/maildir/mac/{email-sendgrid-01.eml → lhost-sendgrid-01.eml} +0 -0
  659. data/set-of-emails/maildir/mac/{email-sendmail-01.eml → lhost-sendmail-01.eml} +0 -0
  660. data/set-of-emails/maildir/mac/{email-surfcontrol-01.eml → lhost-surfcontrol-01.eml} +0 -0
  661. data/set-of-emails/maildir/mac/{email-v5sendmail-01.eml → lhost-v5sendmail-01.eml} +0 -0
  662. data/set-of-emails/maildir/mac/{email-verizon-01.eml → lhost-verizon-01.eml} +0 -0
  663. data/set-of-emails/maildir/mac/{email-x1-01.eml → lhost-x1-01.eml} +0 -0
  664. data/set-of-emails/maildir/mac/{email-x2-01.eml → lhost-x2-01.eml} +0 -0
  665. data/set-of-emails/maildir/mac/{email-x3-01.eml → lhost-x3-01.eml} +0 -0
  666. data/set-of-emails/maildir/mac/{email-x4-01.eml → lhost-x4-01.eml} +0 -0
  667. data/set-of-emails/maildir/mac/{email-x5-01.eml → lhost-x5-01.eml} +0 -0
  668. data/set-of-emails/maildir/mac/lhost-x6-01.eml +1 -3
  669. data/set-of-emails/maildir/mac/{email-yahoo-01.eml → lhost-yahoo-01.eml} +0 -0
  670. data/set-of-emails/maildir/mac/{email-yandex-01.eml → lhost-yandex-01.eml} +0 -0
  671. data/set-of-emails/maildir/mac/{email-zoho-01.eml → lhost-zoho-01.eml} +0 -0
  672. data/set-of-emails/maildir/mac/rhost-iua-01.eml +1 -4
  673. metadata +587 -521
  674. data/lib/sisimai/bite.rb +0 -42
  675. data/lib/sisimai/bite/email.rb +0 -18
  676. data/lib/sisimai/bite/json.rb +0 -16
  677. data/lib/sisimai/lhost/userdefined.rb +0 -115
  678. data/lib/sisimai/message/email.rb +0 -26
  679. data/lib/sisimai/message/json.rb +0 -24
  680. data/lib/sisimai/order/email.rb +0 -20
  681. data/lib/sisimai/order/json.rb +0 -16
@@ -1,31 +1,29 @@
1
1
  module Sisimai
2
- # Sisimai::Mail is a handler of UNIX mbox or Maildir for reading each mail. It is
3
- # wrapper class of Sisimai::Mail::Mbox and Sisimai::Mail::Maildir classes.
2
+ # Sisimai::Mail is a handler of UNIX mbox or Maildir for reading each mail.
3
+ # It is a wrapper class of Sisimai::Mail::Mbox, Sisimai::Mail::Maildir, and
4
+ # Sisimai::Mail::Memory classes.
4
5
  class Mail
5
6
  # Imported from p5-Sisimail/lib/Sisimai/Mail.pm
6
- @@roaccessors = [
7
- :path, # [String] path to mbox or Maildir/
8
- :type, # [String] Data type: mailbox, maildir, or stdin
9
- ]
10
- @@rwaccessors = [
11
- :mail, # [Sisimai::Mail::[Mbox,Maildir,Memory,STDIN]] Object
12
- ]
13
- @@roaccessors.each { |e| attr_reader e }
14
- @@rwaccessors.each { |e| attr_accessor e }
7
+
8
+ # :path [String] path to mbox or Maildir/
9
+ # :kind [String] Data type: mailbox, maildir, or stdin
10
+ # :data [Sisimai::Mail::[Mbox,Maildir,Memory,STDIN]] Object
11
+ attr_reader :path, :kind
12
+ attr_accessor :data
15
13
 
16
14
  # Constructor of Sisimai::Mail
17
15
  # @param [String] argv1 Path to mbox or Maildir/
18
16
  # @return [Sisimai::Mail, Nil] Object or nil if the argument was wrong
19
17
  def initialize(argv1)
20
18
  classname = nil
21
- parameter = { 'path' => argv1, 'type' => nil, 'mail' => nil }
19
+ parameter = { 'path' => argv1, 'kind' => nil, 'data' => nil }
22
20
 
23
21
  if argv1.is_a?(::String)
24
22
  # Path to mail or '<STDIN>' ?
25
23
  if argv1 == '<STDIN>'
26
24
  # Sisimai::Mail.new('<STDIN>')
27
25
  classname = self.class.to_s << '::STDIN'
28
- parameter['type'] = 'stdin'
26
+ parameter['kind'] = 'stdin'
29
27
  parameter['path'] = $stdin
30
28
  else
31
29
  # The argumenet is a mailbox or a Maildir/.
@@ -34,17 +32,17 @@ module Sisimai
34
32
  if mediatype == 'file'
35
33
  # The argument is a file, it is an mbox or email file in Maildir/
36
34
  classname = self.class.to_s << '::Mbox'
37
- parameter['type'] = 'mailbox'
35
+ parameter['kind'] = 'mailbox'
38
36
 
39
37
  elsif mediatype == 'directory'
40
38
  # The agument is not a file, it is a Maildir/
41
39
  classname = self.class.to_s << '::Maildir'
42
- parameter['type'] = 'maildir'
40
+ parameter['kind'] = 'maildir'
43
41
 
44
42
  elsif mediatype == 'memory'
45
43
  # The argument is an email string
46
44
  classname = self.class.to_s << '::Memory'
47
- parameter['type'] = 'memory'
45
+ parameter['kind'] = 'memory'
48
46
  parameter['path'] = 'MEMORY'
49
47
  end
50
48
  end
@@ -52,33 +50,26 @@ module Sisimai
52
50
  # Read from STDIN
53
51
  # The argument neither a mailbox nor a Maildir/.
54
52
  classname = self.class.to_s << '::STDIN'
55
- parameter['type'] = 'stdin'
53
+ parameter['kind'] = 'stdin'
56
54
  end
57
55
  return nil unless classname
58
56
 
59
57
  classpath = classname.gsub('::', '/').downcase
60
58
  require classpath
61
- parameter['mail'] = Module.const_get(classname).new(argv1)
59
+ parameter['data'] = Module.const_get(classname).new(argv1)
62
60
 
63
61
  @path = parameter['path']
64
- @type = parameter['type']
65
- @mail = parameter['mail']
62
+ @kind = parameter['kind']
63
+ @data = parameter['data']
66
64
  end
67
65
 
68
- # Mbox/Maildir reader, works as an iterator.
66
+ # Alias method of Sisimai::Mail.data.read()
69
67
  # @return [String] Contents of mbox/Maildir
70
68
  def read
71
- return nil unless mail
72
- return mail.read
69
+ return nil unless data
70
+ return data.read
73
71
  end
74
72
 
75
- # Close the handle
76
- # @return [True,False] true: Successfully closed the handle
77
- # false: Mail handle is not defined
78
- def close
79
- return false unless mail.handle
80
- mail.handle = nil
81
- return true
82
- end
83
73
  end
84
74
  end
75
+
@@ -1,27 +1,22 @@
1
1
  module Sisimai
2
2
  class Mail
3
- # Sisimai::Mail::Maildir is a reader for getting contents of each email in the
4
- # Maildir/ directory.
3
+ # Sisimai::Mail::Maildir is a reader for getting contents of each email in
4
+ # the Maildir/ directory.
5
5
  class Maildir
6
6
  # Imported from p5-Sisimail/lib/Sisimai/Mail/Maildir.pm
7
- @@roaccessors = [
8
- :dir, # [String] Path to Maildir/
9
- :size, # [Integer] The number of entires in the directory
10
- ]
11
- @@rwaccessors = [
12
- :path, # [String] Path to each file
13
- :file, # [String] Each file name of a mail in the Maildir/
14
- :inodes, # [Array] i-node List of files in the Maildir/
15
- :count, # [Integer] The number of file has read
16
- :handle, # [IO::Dir] Directory handle
17
- ]
18
- @@roaccessors.each { |e| attr_reader e }
19
- @@rwaccessors.each { |e| attr_accessor e }
7
+ # :dir [String] Path to Maildir/
8
+ # :size [Integer] The number of files/directories in the Maildir/
9
+ # :path [String] Path to each file
10
+ # :file, [String] Each file name of a mail in the Maildir/
11
+ # :offset [Integer] The number of email files in the Maildir/
12
+ # :handle [IO::Dir] Directory handle
13
+ attr_reader :dir
14
+ attr_accessor :size, :path, :file, :offset, :handle
20
15
 
21
16
  # Constructor of Sisimai::Mail::Maildir
22
- # @param [String] argvs Path to Maildir/
23
- # @return [Sisimai::Mail::Maildir,Nil] Object or nil if the argument is
24
- # not a directory or does not exist
17
+ # @param [String] argvs Path to Maildir/
18
+ # @return [Sisimai::Mail::Maildir] Object
19
+ # [Nil] is not a directory or does not exist
25
20
  def initialize(argv1)
26
21
  raise Errno::ENOENT unless File.exist?(argv1)
27
22
  raise Errno::ENOTDIR unless File.ftype(argv1) == 'directory'
@@ -30,45 +25,45 @@ module Sisimai
30
25
  @size = Dir.entries(argv1).size
31
26
  @dir = argv1
32
27
  @file = nil
33
- @inodes = {}
34
- @count = 0
28
+ @offset = 0
35
29
  @handle = Dir.open(argv1)
36
30
  end
37
31
 
38
32
  # Maildir reader, works as a iterator.
39
33
  # @return [String] Contents of file in Maildir/
40
34
  def read
41
- return nil unless self.count < self.size
42
-
35
+ return nil unless self.offset < self.size
43
36
  seekhandle = self.handle
44
37
  readbuffer = ''
45
38
 
46
39
  begin
47
40
  while r = seekhandle.read do
48
41
  # Read each file in the directory
49
- next if r == '.' || r == '..'
42
+ if r == '.' || r == '..'
43
+ # Is a directory
44
+ self.offset += 1
45
+ next
46
+ end
50
47
 
51
48
  emailindir = (self.dir + '/' + r).squeeze('/')
52
- next unless File.ftype(emailindir) == 'file'
53
- next unless File.size(emailindir) > 0
54
- next unless File.readable?(emailindir)
55
-
56
- emailinode = File.stat(emailindir).ino
57
- next if self.inodes.key?(emailinode)
49
+ if File.ftype(emailindir) != 'file' ||
50
+ File.size(emailindir) == 0 ||
51
+ File.readable?(emailindir) == false
52
+ # The file is not a file, is empty, is not readable
53
+ self.offset += 1
54
+ next
55
+ end
58
56
 
59
57
  File.open(emailindir, 'r:UTF-8') do |f|
60
58
  readbuffer = f.read
61
59
  end
62
60
 
63
- self.inodes[emailinode] = 1
64
- self.path = emailindir
65
- self.file = r
66
-
61
+ self.offset += 1
62
+ self.path = emailindir
63
+ self.file = r
67
64
  break
68
65
  end
69
-
70
- self.count += 1
71
- seekhandle.close unless self.count < self.size
66
+ seekhandle.close unless self.offset < self.size
72
67
  end
73
68
 
74
69
  return readbuffer
@@ -3,18 +3,14 @@ module Sisimai
3
3
  # Sisimai::Mail::Mbox is a mailbox file (UNIX mbox) reader.
4
4
  class Mbox
5
5
  # Imported from p5-Sisimail/lib/Sisimai/Mail/Mbox.pm
6
- @@roaccessors = [
7
- :dir, # [String] Directory name of the mbox
8
- :file, # [String] File name of the mbox
9
- :path, # [String] Path to mbox
10
- :size, # [Integer] File size of the mbox
11
- ]
12
- @@rwaccessors = [
13
- :offset, # [Integer] Offset position for seeking
14
- :handle, # [IO::File] File handle
15
- ]
16
- @@roaccessors.each { |e| attr_reader e }
17
- @@rwaccessors.each { |e| attr_accessor e }
6
+ # :dir [String] Directory name of the mbox
7
+ # :file [String] File name of the mbox
8
+ # :path [String] Path to mbox
9
+ # :size [Integer] File size of the mbox
10
+ # :offset [Integer] Offset position for seeking
11
+ # :handle [IO::File] File handle
12
+ attr_reader :dir, :file, :path, :size
13
+ attr_accessor :offset, :handle
18
14
 
19
15
  # Constructor of Sisimai::Mail::Mbox
20
16
  # @param [String] argv1 Path to mbox
@@ -3,43 +3,41 @@ module Sisimai
3
3
  # Sisimai::Mail::Memory is a class for reading an email string
4
4
  class Memory
5
5
  # Imported from p5-Sisimail/lib/Sisimai/Mail/Memory.pm
6
- @@roaccessors = [
7
- :size, # [Integer] data size of the email text
8
- ]
9
- @@rwaccessors = [
10
- :data, # [Array] Entire bounce mail message
11
- :offset, # [Integer] Index of ":data"
12
- ]
13
- @@roaccessors.each { |e| attr_reader e }
14
- @@rwaccessors.each { |e| attr_accessor e }
6
+ # :path [String] Fixed string "<MEMORY>"
7
+ # :size [Integer] data size of the email text
8
+ # :payload [Array] Entire bounce mail message
9
+ # :offset [Integer] Index of ":payload"
10
+ attr_reader :path, :size
11
+ attr_accessor :payload, :offset
15
12
 
16
13
  # Constructor of Sisimai::Mail::Memory
17
- # @param [String] argv1 Entire email string
18
- # @return [Sisimai::Mail::Memory,Nil] Object or nil if the argument is
19
- # not specified or does not exist
14
+ # @param [String] argv1 Entire email string
15
+ # @return [Sisimai::Mail::Memory] Object
16
+ # [Nil] is not specified or does not exist
20
17
  def initialize(argv1)
21
18
  raise 'is not a String' unless argv1.is_a? ::String
22
19
  raise 'is empty' if argv1.empty?
23
20
 
24
- @size = argv1.size
25
- @data = []
26
- @offset = 0
21
+ @path = '<MEMORY>'
22
+ @size = argv1.size
23
+ @payload = []
24
+ @offset = 0
27
25
 
28
26
  if argv1.start_with?('From ')
29
27
  # UNIX mbox
30
- @data = argv1.split(/^From /).map! { |e| e = 'From ' + e }
31
- @data.shift
28
+ @payload = argv1.split(/^From /).map! { |e| e = 'From ' + e }
29
+ @payload.shift
32
30
  else
33
- @data = [argv1]
31
+ @payload = [argv1]
34
32
  end
35
33
  end
36
34
 
37
35
  # Memory reader, works as an iterator.
38
36
  # @return [String] Contents of a bounce mail
39
37
  def read
40
- return nil if self.data.empty?
38
+ return nil if self.payload.empty?
41
39
  self.offset += 1
42
- return self.data.shift
40
+ return self.payload.shift
43
41
  end
44
42
  end
45
43
  end
@@ -4,17 +4,12 @@ module Sisimai
4
4
  # STDIN
5
5
  class STDIN
6
6
  # Imported from p5-Sisimail/lib/Sisimai/Mail/STDIN.pm
7
- @@roaccessors = [
8
- :path, # [String] Path to mbox
9
- :name, # [String] File name of the mbox
10
- :size, # [Integer] File size of the mbox
11
- ]
12
- @@rwaccessors = [
13
- :offset, # [Integer] Offset position for seeking
14
- :handle, # [IO::File] File handle
15
- ]
16
- @@roaccessors.each { |e| attr_reader e }
17
- @@rwaccessors.each { |e| attr_accessor e }
7
+ # :path [String] Fixed string "<STDIN>"
8
+ # :size [Integer] Data size which has been read
9
+ # :offset [Integer] The number of emails which have neen read
10
+ # :handle [IO::File] File handle
11
+ attr_reader :path, :name, :size
12
+ attr_accessor :offset, :handle
18
13
 
19
14
  # Constructor of Sisimai::Mail::STDIN
20
15
  # @param [IO::STDIN] stdin Standard-In
@@ -23,7 +18,6 @@ module Sisimai
23
18
  raise 'is not an IO object' unless stdin.is_a?(IO)
24
19
 
25
20
  @path = '<STDIN>'
26
- @name = '<STDIN>'
27
21
  @size = nil
28
22
  @offset = 0
29
23
  @handle = stdin
@@ -49,6 +43,8 @@ module Sisimai
49
43
  readhandle.close
50
44
  end
51
45
 
46
+ self.size += readbuffer.size
47
+ self.offset += 1
52
48
  return readbuffer
53
49
  end
54
50
  end
@@ -7,7 +7,7 @@ module Sisimai
7
7
  # dovecot/src/deliver/deliver.c
8
8
  # 11: #define DEFAULT_MAIL_REJECTION_HUMAN_REASON \
9
9
  # 12: "Your message to <%t> was automatically rejected:%n%r"
10
- 'dovecot' => %r/\AYour message to .+ was automatically rejected:\z/,
10
+ 'dovecot' => %r/\AYour message to [^ ]+ was automatically rejected:\z/,
11
11
  'mail.local' => %r/\Amail[.]local: /,
12
12
  'procmail' => %r/\Aprocmail: /,
13
13
  'maildrop' => %r/\Amaildrop: /,
@@ -16,7 +16,7 @@ module Sisimai
16
16
  }.freeze
17
17
  MarkingsOf = {
18
18
  message: %r{\A(?>
19
- Your[ ]message[ ]to[ ].+[ ]was[ ]automatically[ ]rejected:\z
19
+ Your[ ]message[ ]to[ ][^ ]+[ ]was[ ]automatically[ ]rejected:\z
20
20
  |(?:mail[.]local|procmail|maildrop|vdelivermail|vdeliver):[ ]
21
21
  )
22
22
  }x
@@ -75,26 +75,20 @@ module Sisimai
75
75
  }.freeze
76
76
 
77
77
  # Parse message body and return reason and text
78
- # @param [Hash] mhead Message header of a bounce email
79
- # @options mhead [String] from From header
80
- # @options mhead [String] date Date header
81
- # @options mhead [String] subject Subject header
82
- # @options mhead [Array] received Received headers
83
- # @options mhead [String] others Other required headers
84
- # @param [String] mbody Message body of a bounce email
85
- # @return [Hash, Nil] Bounce data list and message/rfc822 part
86
- # or nil if it failed to parse or the
87
- # arguments are missing
78
+ # @param [Hash] mhead Message headers of a bounce email
79
+ # @param [String] mbody Message body of a bounce email
80
+ # @return [Hash] Bounce data list and message/rfc822 part
81
+ # @return [Nil] it failed to parse or the arguments are missing
88
82
  def make(mhead, mbody)
89
83
  return nil unless mhead['from'].downcase.start_with?('mail delivery subsystem','mailer-daemon', 'postmaster')
90
84
 
91
85
  agentname0 = '' # [String] MDA name
92
86
  reasonname = '' # [String] Error reason
93
87
  bouncemesg = '' # [String] Error message
94
- hasdivided = mbody.split("\n")
88
+ bodyslices = mbody.split("\n")
95
89
  linebuffer = []
96
90
 
97
- while e = hasdivided.shift do
91
+ while e = bodyslices.shift do
98
92
  # Check each line with each MDA's symbol regular expression.
99
93
  if agentname0 == ''
100
94
  # Try to match with each regular expression
@@ -5,171 +5,98 @@ module Sisimai
5
5
  # method is not a bounce email, the method returns nil.
6
6
  class Message
7
7
  # Imported from p5-Sisimail/lib/Sisimai/Message.pm
8
- require 'sisimai/arf'
8
+ # :from [String] UNIX From line
9
+ # :header [Hash] Header part of an email
10
+ # :ds [Array] Parsed data by Sisimai::Lhost::* module
11
+ # :rfc822 [Hash] Header part of the original message
12
+ # :catch [Any] The results returned by hook method
13
+ attr_accessor :from, :header, :ds, :rfc822, :catch
14
+
9
15
  require 'sisimai/mime'
10
16
  require 'sisimai/order'
17
+ require 'sisimai/lhost'
11
18
  require 'sisimai/string'
12
19
  require 'sisimai/address'
13
20
  require 'sisimai/rfc5322'
14
- require 'sisimai/rfc3834'
15
- require 'sisimai/smtp/error'
16
-
17
- @@rwaccessors = [
18
- :from, # [String] UNIX From line
19
- :header, # [Hash] Header part of an email
20
- :ds, # [Array] Parsed data by Sisimai::Lhost::* module
21
- :rfc822, # [Hash] Header part of the original message
22
- :catch, # [Any] The results returned by hook method
23
- ]
24
- @@rwaccessors.each { |e| attr_accessor e }
25
-
26
21
  DefaultSet = Sisimai::Order.another
27
- ExtHeaders = Sisimai::Order.headers
28
- SubjectTab = Sisimai::Order.by('subject')
29
- RFC822Head = Sisimai::RFC5322.HEADERFIELDS
30
- RFC3834Set = Sisimai::RFC3834.headerlist
31
- HeaderList = %w[from to date subject content-type reply-to message-id
32
- received content-transfer-encoding return-path x-mailer]
33
- IsMultiple = { 'received' => true }
34
- EndOfEmail = Sisimai::String.EOM
35
- BorderLine = '__MIME_ENCODED_BOUNDARY__'
22
+ LhostTable = Sisimai::Lhost.path
36
23
 
37
24
  # Constructor of Sisimai::Message
38
25
  # @param [String] data Email text data
39
26
  # @param [Hash] argvs Module to be loaded
40
27
  # @options argvs [String] :data Entire email message
41
28
  # @options argvs [Array] :load User defined MTA module list
42
- # @options argvs [Array] :field Email header names to be captured
43
29
  # @options argvs [Array] :order The order of MTA modules
44
30
  # @options argvs [Code] :hook Reference to callback method
45
31
  # @return [Sisimai::Message] Structured email data or nil if each
46
32
  # value of the arguments are missing
47
33
  def initialize(data: '', **argvs)
48
34
  return nil if data.empty?
35
+ param = {}
36
+ email = data.scrub('?').gsub("\r\n", "\n")
37
+ thing = { 'from' => '','header' => {}, 'rfc822' => '', ds => [], 'catch' => nil }
49
38
 
50
- email = data
51
- input = email.is_a?(Hash) ? 'json' : 'email'
52
- field = argvs[:field] || []
53
-
54
- if input == 'email'
55
- # Email message
56
- return nil if email.empty?
57
- email = email.scrub('?').gsub("\r\n", "\n")
58
- end
59
-
60
- unless field.is_a? Array
61
- # Unsupported value in "field"
62
- warn ' ***warning: "field" accepts an array reference only'
63
- return nil
64
- end
65
-
66
- methodargv = {
67
- 'data' => email,
68
- 'hook' => argvs[:hook] || nil,
69
- 'field' => field,
70
- 'input' => input,
71
- }
39
+ #methodargv = { 'data' => email, 'hook' => argvs[:hook] || nil }
40
+ # 1. Load specified MTA modules
72
41
  [:load, :order].each do |e|
73
42
  # Order of MTA modules
74
- next unless argvs.key?(e)
43
+ next unless argvs[e]
75
44
  next unless argvs[e].is_a? Array
76
45
  next if argvs[e].empty?
77
- methodargv[e.to_s] = argvs[e]
46
+ param[e.to_s] = argvs[e]
78
47
  end
48
+ tobeloaded = Sisimai::Message.load(param)
79
49
 
80
- datasource = Sisimai::Message.make(methodargv)
81
- return nil unless datasource
82
- return nil unless datasource.key?('ds')
83
-
84
- @from = datasource['from']
85
- @header = datasource['header']
86
- @ds = datasource['ds']
87
- @rfc822 = datasource['rfc822']
88
- @catch = datasource['catch'] || nil
89
- end
50
+ # 2. Split email data to headers and a body part.
51
+ return nil unless aftersplit = Sisimai::Message.divideup(email)
90
52
 
91
- # Check whether the object has valid content or not
92
- # @return [True,False] returns true if the object is void
93
- def void
94
- return true unless @ds
95
- return false
96
- end
53
+ # 3. Convert email headers from text to hash reference
54
+ thing['from'] = aftersplit[0]
55
+ thing['header'] = Sisimai::Message.makemap(aftersplit[1])
97
56
 
98
- # Make data structure from the email message(a body part and headers)
99
- # @param [Hash] argvs Email data
100
- # @options argvs [String] data Entire email message
101
- # @options argvs [Array] load User defined MTA module list
102
- # @options argvs [Array] field Email header names to be captured
103
- # @options argvs [Array] order The order of MTA modules
104
- # @options argvs [Code] hook Reference to callback method
105
- # @return [Hash] Resolved data structure
106
- def self.make(argvs)
107
- email = argvs['data']
108
-
109
- hookmethod = argvs['hook'] || nil
110
- processing = {
111
- 'from' => '', # From_ line
112
- 'header' => {}, # Email header
113
- 'rfc822' => '', # Original message part
114
- 'ds' => [], # Parsed data, Delivery Status
115
- 'catch' => nil, # Data parsed by callback method
116
- }
117
- methodargv = {
118
- 'load' => argvs['load'] || [],
119
- 'order' => argvs['order'] || []
120
- }
121
- tobeloaded = Sisimai::Message.load(methodargv)
122
-
123
- if argvs['input'] == 'email'
124
- # Email message
125
- # 1. Split email data to headers and a body part.
126
- return nil unless aftersplit = Sisimai::Message.divideup(email)
127
-
128
- # 2. Convert email headers from text to hash reference
129
- headerargv = {
130
- 'extheaders' => ExtHeaders,
131
- 'tryonfirst' => [],
132
- 'extrafield' => argvs['field'] || [],
133
- }
134
- processing['from'] = aftersplit['from']
135
- processing['header'] = Sisimai::Message.headers(aftersplit['header'], headerargv)
136
-
137
- # 3. Check headers for detecting MTA modules
138
- if headerargv['tryonfirst'].empty?
139
- headerargv['tryonfirst'] += Sisimai::Message.makeorder(processing['header'])
57
+ # 4. Decode and rewrite the "Subject:" header
58
+ unless thing['header']['subject'].empty?
59
+ # Decode MIME-Encoded "Subject:" header
60
+ s = thing['header']['subject']
61
+ q = Sisimai::MIME.is_mimeencoded(s) ? Sisimai::MIME.mimedecode(s.split(/[ ]/)) : s
62
+
63
+ # Remove "Fwd:" string from the Subject: header
64
+ if cv = q.downcase.match(/\A[ \t]*fwd?:[ ]*(.*)\z/)
65
+ # Delete quoted strings, quote symbols(>)
66
+ q = cv[1]
67
+ aftersplit[2] = aftersplit[2].gsub(/^[>]+[ ]/, '').gsub(/^[>]$/, '')
140
68
  end
141
-
142
- # 4. Rewrite message body for detecting the bounce reason
143
- methodargv = {
144
- 'hook' => hookmethod,
145
- 'mail' => processing,
146
- 'body' => aftersplit['body'],
147
- 'tryonfirst' => headerargv['tryonfirst'],
148
- 'tobeloaded' => tobeloaded,
149
- }
150
- return nil unless bouncedata = Sisimai::Message.parse(methodargv)
151
- else
152
- # JSON object
153
- methodargv = {
154
- 'hook' => hookmethod,
155
- 'json' => argvs['data'],
156
- 'tobeloaded' => tobeloaded.concat(Sisimai::Order.forjson),
157
- }
158
- return nil unless bouncedata = Sisimai::Message.adapt(methodargv)
69
+ thing['header']['subject'] = q
159
70
  end
160
- return nil if bouncedata.empty?
161
71
 
162
- %w|ds catch rfc822|.each { |e| processing[e] = bouncedata[e] }
163
- if argvs['input'] == 'email'
164
- # 5. Rewrite headers of the original message in the body part
165
- p = bouncedata['rfc822']
166
- p = aftersplit['body'] if p.empty?
167
- processing['rfc822'] = p.is_a?(::String) ? Sisimai::Message.takeapart(p) : p
168
- end
72
+ # 5. Rewrite message body for detecting the bounce reason
73
+ param = {
74
+ 'hook' => argvs[:hook] || nil,
75
+ 'mail' => thing,
76
+ 'body' => aftersplit[2],
77
+ 'tobeloaded' => tobeloaded,
78
+ 'tryonfirst' => Sisimai::Order.make(thing['header']['subject'])
79
+ }
80
+ return nil unless bouncedata = Sisimai::Message.parse(param)
81
+ return nil if bouncedata.empty?
169
82
 
170
- return processing
83
+ # 6. Rewrite headers of the original message in the body part
84
+ %w|ds catch rfc822|.each { |e| thing[e] = bouncedata[e] }
85
+ p = bouncedata['rfc822']
86
+ p = aftersplit[2] if p.empty?
87
+ thing['rfc822'] = p.is_a?(::String) ? Sisimai::Message.makemap(p, true) : p
88
+
89
+ @from = thing['from']
90
+ @header = thing['header']
91
+ @ds = thing['ds']
92
+ @rfc822 = thing['rfc822']
93
+ @catch = thing['catch'] || nil
171
94
  end
172
95
 
96
+ # Check whether the object has valid content or not
97
+ # @return [True,False] returns true if the object is void
98
+ def void; return @ds ? false : true; end
99
+
173
100
  # Load MTA modules which specified at 'order' and 'load' in the argument
174
101
  # @param [Hash] argvs Module information to be loaded
175
102
  # @options argvs [Array] load User defined MTA module list
@@ -182,7 +109,7 @@ module Sisimai
182
109
 
183
110
  %w[load order].each do |e|
184
111
  # The order of MTA modules specified by user
185
- next unless argvs.key?(e)
112
+ next unless argvs[e]
186
113
  next unless argvs[e].is_a? Array
187
114
  next if argvs[e].empty?
188
115
 
@@ -198,13 +125,6 @@ module Sisimai
198
125
  warn ' ***warning: Failed to load ' << v
199
126
  next
200
127
  end
201
- next unless argvs.input == 'email'
202
-
203
- Module.const_get(v).headerlist.each do |w|
204
- # Get header name which required user defined MTA module
205
- ExtHeaders[w] ||= {}
206
- ExtHeaders[w][v] = 1
207
- end
208
128
  tobeloaded << v
209
129
  end
210
130
  end
@@ -218,192 +138,81 @@ module Sisimai
218
138
  return tobeloaded
219
139
  end
220
140
 
221
- # Check headers for detecting MTA module and returns the order of modules
222
- # @param [Hash] heads Email header data
223
- # @return [Array] Order of MTA modules
224
- def self.makeorder(heads)
225
- return [] unless heads
226
- return [] unless heads['subject']
227
- return [] if heads['subject'].empty?
228
- order = []
229
-
230
- # Try to match the value of "Subject" with patterns generated by
231
- # Sisimai::Order->by('subject') method
232
- title = heads['subject'].downcase
233
- SubjectTab.each_key do |e|
234
- # Get MTA list from the subject header
235
- next unless title.include?(e)
236
- order += SubjectTab[e] # Matched and push MTA list
237
- break
238
- end
239
- return order
240
- end
241
-
242
- # Convert email headers from text to hash reference
243
- # @param [String] heads Email header data
244
- # @param [Hash] argvs
245
- # @param options extheaders [Array] External header table
246
- # @return [Hash] Structured email header data
247
- def self.headers(heads, argvs = {})
248
- return nil unless heads
249
-
250
- currheader = ''
251
- allheaders = {}
252
- structured = {}
253
- extheaders = argvs['extheaders'] || []
254
- extrafield = argvs['extrafield'] || []
255
- hasdivided = heads.split("\n")
256
-
257
- HeaderList.each { |e| structured[e] = nil }
258
- HeaderList.each { |e| allheaders[e] = true }
259
- RFC3834Set.each { |e| allheaders[e] = true }
260
- IsMultiple.each_key { |e| structured[e] = [] }
261
- extheaders.each_key { |e| allheaders[e] = true }
262
- unless extrafield.empty?
263
- extrafield.each { |e| allheaders[e] = true }
264
- end
265
-
266
- while e = hasdivided.shift do
267
- # Convert email headers to hash
268
- if cv = e.match(/\A[ \t]+(.+)\z/)
269
- # Continued (foled) header value from the previous line
270
- next unless allheaders.key?(currheader)
271
-
272
- # Header line continued from the previous line
273
- if structured[currheader].is_a? Array
274
- # Concatenate a header which have multi-lines such as 'Received'
275
- structured[currheader][-1] << ' ' << cv[1]
276
- else
277
- structured[currheader] ||= ''
278
- structured[currheader] << ' ' << cv[1]
279
- end
280
- else
281
- # split the line into a header name and a header content
282
- (lhs, rhs) = e.split(/:[ ]*/, 2)
283
- currheader = lhs ? lhs.downcase : ''
284
- next unless allheaders.key?(currheader)
285
-
286
- if IsMultiple.key?(currheader)
287
- # Such as 'Received' header, there are multiple headers in a single
288
- # email message.
289
- #rhs = rhs.tr("\t", ' ').squeeze(' ')
290
- rhs = rhs.tr("\t", ' ')
291
- structured[currheader] << rhs
292
- else
293
- # Other headers except "Received" and so on
294
- if extheaders[currheader]
295
- # MTA specific header
296
- extheaders[currheader].each do |r|
297
- next if argvs['tryonfirst'].index(r)
298
- argvs['tryonfirst'] << r
299
- end
300
- end
301
- structured[currheader] = rhs
302
- end
303
- end
304
- end
305
- return structured
306
- end
307
-
308
141
  # Divide email data up headers and a body part.
309
142
  # @param [String] email Email data
310
- # @return [Hash] Email data after split
143
+ # @return [Array] Email data after split
311
144
  def self.divideup(email)
312
145
  return nil if email.empty?
313
146
 
314
- block = { 'from' => '', 'header' => '', 'body' => '' }
315
- email.scrub!('?')
147
+ block = ['', '', ''] # 0:From, 1:Header, 2:Body
316
148
  email.gsub!(/\r\n/, "\n") if email.include?("\r\n")
317
149
  email.gsub!(/[ \t]+$/, '') if email =~ /[ \t]+$/
318
150
 
319
- (block['header'], block['body']) = email.split(/\n\n/, 2)
320
- return nil unless block['header']
321
- return nil unless block['body']
151
+ (block[1], block[2]) = email.split(/\n\n/, 2)
152
+ return nil unless block[1]
153
+ return nil unless block[2]
322
154
 
323
- if block['header'][0, 5] == 'From '
155
+ if block[1].start_with?('From ')
324
156
  # From MAILER-DAEMON Tue Feb 11 00:00:00 2014
325
- block['from'] = block['header'].split(/\n/, 2)[0].delete("\r")
157
+ block[0] = block[1].split(/\n/, 2)[0].delete("\r")
326
158
  else
327
159
  # Set pseudo UNIX From line
328
- block['from'] = 'MAILER-DAEMON Tue Feb 11 00:00:00 2014'
160
+ block[0] = 'MAILER-DAEMON Tue Feb 11 00:00:00 2014'
329
161
  end
330
162
 
331
- block['body'] << "\n"
163
+ block[1] << "\n" unless block[1].end_with?("\n")
164
+ block[2] << "\n"
332
165
  return block
333
166
  end
334
167
 
335
- # Take each email header in the original message apart
336
- # @param [String] heads The original message header
337
- # @return [Hash] Structured message headers
338
- def self.takeapart(heads)
339
- return {} unless heads
340
-
341
- # 1. Scrub to avoid "invalid byte sequence in UTF-8" exception (#82)
342
- # 2. Convert from string to hash reference
343
- heads = heads.scrub('?').gsub(/^[>]+[ ]/m, '').gsub(/=[ ]+=/, "=\n =")
344
-
345
- previousfn = '' # Previous field name
346
- asciiarmor = {} # Header names which has MIME encoded value
347
- headerpart = {} # Required headers in the original message part
348
- hasdivided = heads.split("\n")
349
-
350
- while e = hasdivided.shift do
351
- # Header name as a key, The value of header as a value
352
- if e.start_with?(' ', "\t")
353
- # Continued (foled) header value from the previous line
354
- next if previousfn.empty?
355
-
356
- # Concatenate the line if it is the value of required header
357
- if Sisimai::MIME.is_mimeencoded(e)
358
- # The line is MIME-Encoded test
359
- headerpart[previousfn] << if previousfn == 'subject'
360
- # Subject: header
361
- BorderLine + e
362
- else
363
- # Is not Subject header
364
- e
365
- end
366
- asciiarmor[previousfn] = true
367
- else
368
- # ASCII Characters only: Not MIME-Encoded
369
- headerpart[previousfn] << e.lstrip
370
- asciiarmor[previousfn] ||= false
371
- end
372
- else
373
- # Header name as a key, The value of header as a value
374
- (lhs, rhs) = e.split(/:[ ]*/, 2)
375
- next unless lhs
376
- lhs.downcase!
377
- previousfn = ''
378
-
379
- next unless RFC822Head.key?(lhs)
380
- previousfn = lhs
381
- headerpart[previousfn] = rhs unless headerpart[previousfn]
382
- end
168
+ # Convert a text including email headers to a hash reference
169
+ # @param [String] argv0 Email header data
170
+ # @param [Bool] argv1 Decode "Subject:" header
171
+ # @return [Hash] Structured email header data
172
+ # @since v4.25.6
173
+ def self.makemap(argv0 = '', argv1 = nil)
174
+ return {} if argv0.empty?
175
+ argv0.gsub!(/^[>]+[ ]/m, '') # Remove '>' indent symbol of forwarded message
176
+
177
+ # Select and convert all the headers in $argv0. The following regular expression
178
+ # is based on https://gist.github.com/xtetsuji/b080e1f5551d17242f6415aba8a00239
179
+ headermaps = { 'subject' => '' }
180
+ recvheader = []
181
+ argv0.scan(/^([\w-]+):[ ]*(.*?)\n(?![\s\t])/m) { |e| headermaps[e[0].downcase] = e[1] }
182
+ headermaps.delete('received')
183
+ headermaps.each_key { |e| headermaps[e].gsub!(/\n[\s\t]+/, ' ') }
184
+
185
+ if argv0.include?('Received:')
186
+ # Capture values of each Received: header
187
+ recvheader = argv0.scan(/^Received:[ ]*(.*?)\n(?![\s\t])/m).flatten
188
+ recvheader.each { |e| e.gsub!(/\n[\s\t]+/, ' ') }
383
189
  end
384
- return headerpart unless headerpart['subject']
190
+ headermaps['received'] = recvheader
191
+
192
+ return headermaps unless argv1
193
+ return headermaps if headermaps['subject'].empty?
385
194
 
386
195
  # Convert MIME-Encoded subject
387
- if Sisimai::String.is_8bit(headerpart['subject'])
196
+ if Sisimai::String.is_8bit(headermaps['subject'])
388
197
  # The value of ``Subject'' header is including multibyte character,
389
198
  # is not MIME-Encoded text.
390
- headerpart['subject'].scrub!('?')
199
+ headermaps['subject'].scrub!('?')
391
200
  else
392
201
  # MIME-Encoded subject field or ASCII characters only
393
202
  r = []
394
- if asciiarmor['subject']
203
+ if Sisimai::MIME.is_mimeencoded(headermaps['subject'])
395
204
  # split the value of Subject by borderline
396
- headerpart['subject'].split(BorderLine).each do |v|
205
+ headermaps['subject'].split(/ /).each do |v|
397
206
  # Insert value to the array if the string is MIME encoded text
398
207
  r << v if Sisimai::MIME.is_mimeencoded(v)
399
208
  end
400
209
  else
401
210
  # Subject line is not MIME encoded
402
- r << headerpart['subject']
211
+ r << headermaps['subject']
403
212
  end
404
- headerpart['subject'] = Sisimai::MIME.mimedecode(r)
213
+ headermaps['subject'] = Sisimai::MIME.mimedecode(r)
405
214
  end
406
- return headerpart
215
+ return headermaps
407
216
  end
408
217
 
409
218
  # @abstract Parse bounce mail with each MTA module
@@ -425,7 +234,6 @@ module Sisimai
425
234
  bodystring = argvs['body']
426
235
  hookmethod = argvs['hook'] || nil
427
236
  havecaught = nil
428
-
429
237
  return nil unless mailheader
430
238
 
431
239
  # PRECHECK_EACH_HEADER:
@@ -437,7 +245,6 @@ module Sisimai
437
245
  # Decode BASE64 Encoded message body, rewrite.
438
246
  mesgformat = (mailheader['content-type'] || '').downcase
439
247
  ctencoding = (mailheader['content-transfer-encoding'] || '').downcase
440
-
441
248
  if mesgformat.start_with?('text/plain', 'text/html')
442
249
  # Content-Type: text/plain; charset=UTF-8
443
250
  if ctencoding == 'base64'
@@ -461,166 +268,86 @@ module Sisimai
461
268
  bodystring = p unless p.empty?
462
269
  end
463
270
  end
464
-
465
- # EXPAND_FORWARDED_MESSAGE:
466
- # Check whether or not the message is a bounce mail.
467
- # Pre-Process email body if it is a forwarded bounce message.
468
- # Get the original text when the subject begins from 'fwd:' or 'fw:'
469
- if mailheader['subject'].downcase =~ /\A[ \t]*fwd?:/
470
- # Delete quoted strings, quote symbols(>)
471
- bodystring = bodystring.gsub(/^[>]+[ ]/m, '').gsub(/^[>]$/m, '')
472
- elsif Sisimai::MIME.is_mimeencoded(mailheader['subject'])
473
- # Decode MIME-Encoded "Subject:" header
474
- mailheader['subject'] = Sisimai::MIME.mimedecode(mailheader['subject'].split(/[ ]/))
475
- mailheader['subject'].scrub!('?')
476
- end
477
271
  bodystring = bodystring.scrub('?').delete("\r")
478
272
 
273
+ haveloaded = {}
274
+ parseddata = nil
275
+ modulename = ''
479
276
  if hookmethod.is_a? Proc
480
277
  # Call the hook method
481
278
  begin
482
- p = {
483
- 'datasrc' => 'email',
484
- 'headers' => mailheader,
485
- 'message' => bodystring,
486
- 'bounces' => nil
487
- }
279
+ p = { 'headers' => mailheader, 'message' => bodystring }
488
280
  havecaught = hookmethod.call(p)
489
281
  rescue StandardError => ce
490
282
  warn ' ***warning: Something is wrong in hook method :' << ce.to_s
491
283
  end
492
284
  end
493
285
 
494
- bodystring << EndOfEmail
495
- haveloaded = {}
496
- parseddata = nil
497
-
498
286
  catch :PARSER do
499
287
  while true
500
- # 1. Sisimai::ARF
501
- # 2. User-Defined Module
502
- # 3. MTA Module Candidates to be tried on first
503
- # 4. Sisimai::Lhost::*
504
- # 5. Sisimai::RFC3464
288
+ # 1. User-Defined Module
289
+ # 2. MTA Module Candidates to be tried on first
290
+ # 3. Sisimai::Lhost::*
291
+ # 4. Sisimai::RFC3464
292
+ # 5. Sisimai::ARF
505
293
  # 6. Sisimai::RFC3834
506
- if Sisimai::ARF.is_arf(mailheader)
507
- # Feedback Loop message
508
- parseddata = Sisimai::ARF.make(mailheader, bodystring)
509
- throw :PARSER if parseddata
510
- end
511
-
512
294
  while r = argvs['tobeloaded'].shift do
513
295
  # Call user defined MTA modules
514
296
  next if haveloaded[r]
515
297
  parseddata = Module.const_get(r).make(mailheader, bodystring)
516
298
  haveloaded[r] = true
299
+ modulename = r
517
300
  throw :PARSER if parseddata
518
301
  end
519
302
 
520
- argvs['tryonfirst'].concat(DefaultSet)
521
- while r = argvs['tryonfirst'].shift do
303
+ [argvs['tryonfirst'], DefaultSet].flatten.each do |r|
522
304
  # Try MTA module candidates
523
- next if haveloaded.key?(r)
524
- require r.gsub('::', '/').downcase
305
+ next if haveloaded[r]
306
+ require LhostTable[r]
525
307
  parseddata = Module.const_get(r).make(mailheader, bodystring)
526
308
  haveloaded[r] = true
309
+ modulename = r
527
310
  throw :PARSER if parseddata
528
311
  end
529
312
 
530
- # When the all of Sisimai::Lhost::* modules did not return bounce
531
- # data, call Sisimai::RFC3464;
532
- require 'sisimai/rfc3464'
533
- parseddata = Sisimai::RFC3464.make(mailheader, bodystring)
534
- break if parseddata
535
-
536
- # Try to parse the message as auto reply message defined in RFC3834
537
- require 'sisimai/rfc3834'
538
- parseddata = Sisimai::RFC3834.make(mailheader, bodystring)
539
- break if parseddata
540
-
541
- # as of now, we have no sample email for coding this block
542
- break
543
- end
544
- end
545
-
546
- parseddata['catch'] = havecaught if parseddata
547
- return parseddata
548
- end
549
-
550
- # Parse bounce object with each MTA(JSON) module
551
- # @param [Hash] argvs Processing message entity.
552
- # @param options argvs [Hash] json Decoded bounce object
553
- # @param options argvs [Proc] hook Hook method to be called
554
- # @return [Hash] Parsed and structured bounce mails
555
- def self.adapt(argvs)
556
- Sisimai::Message.warn(self.name, 'gone')
557
- bouncedata = argvs['json'] || {}
558
- hookmethod = argvs['hook'] || nil
559
- havecaught = nil
560
- haveloaded = {}
561
- parseddata = nil
313
+ unless haveloaded['Sisimai::RFC3464']
314
+ # When the all of Sisimai::Lhost::* modules did not return bounce
315
+ # data, call Sisimai::RFC3464;
316
+ require 'sisimai/rfc3464'
317
+ parseddata = Sisimai::RFC3464.make(mailheader, bodystring)
318
+ modulename = 'RFC3464'
319
+ throw :PARSER if parseddata
320
+ end
562
321
 
563
- # Call the hook method
564
- if hookmethod.is_a? Proc
565
- # Execute hook method
566
- begin
567
- p = {
568
- 'datasrc' => 'json',
569
- 'headers' => nil,
570
- 'message' => nil,
571
- 'bounces' => argvs['json']
572
- }
573
- havecaught = hookmethod.call(p)
574
- rescue StandardError => ce
575
- warn ' ***warning: Something is wrong in hook method :' << ce.to_s
576
- end
577
- end
322
+ unless haveloaded['Sisimai::ARF']
323
+ # Feedback Loop message
324
+ require 'sisimai/arf'
325
+ parseddata = Sisimai::ARF.make(mailheader, bodystring) if Sisimai::ARF.is_arf(mailheader)
326
+ throw :PARSER if parseddata
327
+ end
578
328
 
579
- catch :ADAPTOR do
580
- while true
581
- # 1. User-Defined Module
582
- # 2. MTA(JSON) Module Candidates to be tried on first
583
- # 3. Sisimai::Lhost::*
584
- #
585
- argvs['tobeloaded'].each do |r|
586
- # Call user defined MTA(JSON) modules
587
- next if haveloaded[r]
588
- begin
589
- require r.gsub('::', '/').downcase
590
- rescue LoadError => ce
591
- warn ' ***warning: Failed to load ' << ce.to_s
592
- next
593
- end
594
- parseddata = Module.const_get(r).json(bouncedata)
595
- haveloaded[r] = true
596
- throw :ADAPTOR if parseddata
329
+ unless haveloaded['Sisimai::RFC3834']
330
+ # Try to parse the message as auto reply message defined in RFC3834
331
+ require 'sisimai/rfc3834'
332
+ parseddata = Sisimai::RFC3834.make(mailheader, bodystring)
333
+ modulename = 'RFC3834'
334
+ throw :PARSER if parseddata
597
335
  end
598
336
 
599
- break # as of now, we have no sample JSON data for coding this block
337
+ break # as of now, we have no sample email for coding this block
600
338
  end
601
339
  end
602
340
  return nil unless parseddata
603
- return nil unless parseddata['ds']
604
341
 
605
342
  parseddata['catch'] = havecaught
606
- parseddata['ds'].each { |e| e['agent'].sub!(/\AEmail::/, 'JSON::') }
343
+ modulename = modulename.sub(/\A.+::/, '')
344
+ parseddata['ds'].each do |e|
345
+ e['agent'] = modulename unless e['agent']
346
+ e.each_key { |a| e[a] ||= '' } # Replace nil with ""
347
+ end
607
348
  return parseddata
608
349
  end
609
350
 
610
- # @abstract Print warnings about an obsoleted method. This method will be
611
- # removed at the future release of Sisimai
612
- # @until v4.25.5
613
- def self.warn(whois = '', useit = nil)
614
- label = ' ***warning:'
615
- methodname = caller[0][/`.*'/][1..-2]
616
- messageset = sprintf("%s %s.%s is marked as obsoleted", label, whois, methodname)
617
-
618
- useit ||= methodname
619
- messageset << sprintf(" and will be removed at %s.", Sisimai::Lhost.removedat)
620
- messageset << sprintf(" Use %s.%s instead.\n", self.name, useit) if useit != 'gone'
621
- Kernel.warn messageset
622
- end
623
-
624
351
  end
625
352
  end
626
353