sisimai 4.16.0-java

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

Potentially problematic release.


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

Files changed (574) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +182 -0
  5. data/.travis.yml +18 -0
  6. data/ANALYTICAL-PRECISION +56 -0
  7. data/Changes +36 -0
  8. data/Developers.mk +129 -0
  9. data/Gemfile +15 -0
  10. data/LICENSE +25 -0
  11. data/Makefile +70 -0
  12. data/README.md +361 -0
  13. data/Rakefile +12 -0
  14. data/Repository.mk +69 -0
  15. data/appveyor.yml +23 -0
  16. data/bin/console +14 -0
  17. data/bin/setup +7 -0
  18. data/lib/sisimai.rb +95 -0
  19. data/lib/sisimai/address.rb +224 -0
  20. data/lib/sisimai/arf.rb +338 -0
  21. data/lib/sisimai/data.rb +409 -0
  22. data/lib/sisimai/data/json.rb +40 -0
  23. data/lib/sisimai/data/yaml.rb +32 -0
  24. data/lib/sisimai/datetime.rb +511 -0
  25. data/lib/sisimai/mail.rb +82 -0
  26. data/lib/sisimai/mail/maildir.rb +82 -0
  27. data/lib/sisimai/mail/mbox.rb +69 -0
  28. data/lib/sisimai/mail/stdin.rb +53 -0
  29. data/lib/sisimai/mda.rb +152 -0
  30. data/lib/sisimai/message.rb +525 -0
  31. data/lib/sisimai/mime.rb +127 -0
  32. data/lib/sisimai/msp.rb +54 -0
  33. data/lib/sisimai/msp/de/einsundeins.rb +174 -0
  34. data/lib/sisimai/msp/de/gmx.rb +197 -0
  35. data/lib/sisimai/msp/jp/biglobe.rb +179 -0
  36. data/lib/sisimai/msp/jp/ezweb.rb +292 -0
  37. data/lib/sisimai/msp/jp/kddi.rb +195 -0
  38. data/lib/sisimai/msp/ru/mailru.rb +306 -0
  39. data/lib/sisimai/msp/ru/yandex.rb +241 -0
  40. data/lib/sisimai/msp/uk/messagelabs.rb +250 -0
  41. data/lib/sisimai/msp/us/amazonses.rb +248 -0
  42. data/lib/sisimai/msp/us/amazonworkmail.rb +224 -0
  43. data/lib/sisimai/msp/us/aol.rb +234 -0
  44. data/lib/sisimai/msp/us/bigfoot.rb +243 -0
  45. data/lib/sisimai/msp/us/facebook.rb +306 -0
  46. data/lib/sisimai/msp/us/google.rb +357 -0
  47. data/lib/sisimai/msp/us/office365.rb +273 -0
  48. data/lib/sisimai/msp/us/outlook.rb +242 -0
  49. data/lib/sisimai/msp/us/receivingses.rb +247 -0
  50. data/lib/sisimai/msp/us/sendgrid.rb +257 -0
  51. data/lib/sisimai/msp/us/verizon.rb +311 -0
  52. data/lib/sisimai/msp/us/yahoo.rb +178 -0
  53. data/lib/sisimai/msp/us/zoho.rb +198 -0
  54. data/lib/sisimai/mta.rb +54 -0
  55. data/lib/sisimai/mta/activehunter.rb +155 -0
  56. data/lib/sisimai/mta/apachejames.rb +194 -0
  57. data/lib/sisimai/mta/courier.rb +307 -0
  58. data/lib/sisimai/mta/domino.rb +209 -0
  59. data/lib/sisimai/mta/exchange.rb +314 -0
  60. data/lib/sisimai/mta/exim.rb +549 -0
  61. data/lib/sisimai/mta/imailserver.rb +227 -0
  62. data/lib/sisimai/mta/interscanmss.rb +167 -0
  63. data/lib/sisimai/mta/mailfoundry.rb +173 -0
  64. data/lib/sisimai/mta/mailmarshalsmtp.rb +206 -0
  65. data/lib/sisimai/mta/mcafee.rb +201 -0
  66. data/lib/sisimai/mta/messagingserver.rb +241 -0
  67. data/lib/sisimai/mta/mfilter.rb +190 -0
  68. data/lib/sisimai/mta/mxlogic.rb +283 -0
  69. data/lib/sisimai/mta/notes.rb +206 -0
  70. data/lib/sisimai/mta/opensmtpd.rb +225 -0
  71. data/lib/sisimai/mta/postfix.rb +306 -0
  72. data/lib/sisimai/mta/qmail.rb +335 -0
  73. data/lib/sisimai/mta/sendmail.rb +317 -0
  74. data/lib/sisimai/mta/surfcontrol.rb +193 -0
  75. data/lib/sisimai/mta/userdefined.rb +148 -0
  76. data/lib/sisimai/mta/v5sendmail.rb +232 -0
  77. data/lib/sisimai/mta/x1.rb +156 -0
  78. data/lib/sisimai/mta/x2.rb +157 -0
  79. data/lib/sisimai/mta/x3.rb +171 -0
  80. data/lib/sisimai/mta/x4.rb +365 -0
  81. data/lib/sisimai/mta/x5.rb +208 -0
  82. data/lib/sisimai/order.rb +220 -0
  83. data/lib/sisimai/reason.rb +234 -0
  84. data/lib/sisimai/reason/blocked.rb +105 -0
  85. data/lib/sisimai/reason/contenterror.rb +53 -0
  86. data/lib/sisimai/reason/exceedlimit.rb +60 -0
  87. data/lib/sisimai/reason/expired.rb +53 -0
  88. data/lib/sisimai/reason/filtered.rb +98 -0
  89. data/lib/sisimai/reason/hasmoved.rb +45 -0
  90. data/lib/sisimai/reason/hostunknown.rb +79 -0
  91. data/lib/sisimai/reason/mailboxfull.rb +118 -0
  92. data/lib/sisimai/reason/mailererror.rb +55 -0
  93. data/lib/sisimai/reason/mesgtoobig.rb +82 -0
  94. data/lib/sisimai/reason/networkerror.rb +58 -0
  95. data/lib/sisimai/reason/norelaying.rb +71 -0
  96. data/lib/sisimai/reason/notaccept.rb +63 -0
  97. data/lib/sisimai/reason/onhold.rb +45 -0
  98. data/lib/sisimai/reason/rejected.rb +101 -0
  99. data/lib/sisimai/reason/securityerror.rb +72 -0
  100. data/lib/sisimai/reason/spamdetected.rb +172 -0
  101. data/lib/sisimai/reason/suspend.rb +58 -0
  102. data/lib/sisimai/reason/systemerror.rb +69 -0
  103. data/lib/sisimai/reason/systemfull.rb +45 -0
  104. data/lib/sisimai/reason/toomanyconn.rb +73 -0
  105. data/lib/sisimai/reason/userunknown.rb +194 -0
  106. data/lib/sisimai/rfc2606.rb +24 -0
  107. data/lib/sisimai/rfc3464.rb +497 -0
  108. data/lib/sisimai/rfc3834.rb +150 -0
  109. data/lib/sisimai/rfc5322.rb +204 -0
  110. data/lib/sisimai/rhost.rb +47 -0
  111. data/lib/sisimai/rhost/googleapps.rb +237 -0
  112. data/lib/sisimai/smtp.rb +58 -0
  113. data/lib/sisimai/smtp/reply.rb +84 -0
  114. data/lib/sisimai/smtp/status.rb +758 -0
  115. data/lib/sisimai/string.rb +65 -0
  116. data/lib/sisimai/time.rb +11 -0
  117. data/lib/sisimai/version.rb +4 -0
  118. data/set-of-emails/README.md +35 -0
  119. data/set-of-emails/mailbox/mbox-0 +2467 -0
  120. data/set-of-emails/mailbox/mbox-1 +71 -0
  121. data/set-of-emails/maildir/bsd/README.md +261 -0
  122. data/set-of-emails/maildir/bsd/activehunter-01.eml +54 -0
  123. data/set-of-emails/maildir/bsd/activehunter-02.eml +53 -0
  124. data/set-of-emails/maildir/bsd/apachejames-01.eml +46 -0
  125. data/set-of-emails/maildir/bsd/arf-01.eml +66 -0
  126. data/set-of-emails/maildir/bsd/arf-02.eml +68 -0
  127. data/set-of-emails/maildir/bsd/arf-03.eml +56 -0
  128. data/set-of-emails/maildir/bsd/arf-04.eml +89 -0
  129. data/set-of-emails/maildir/bsd/arf-05.eml +82 -0
  130. data/set-of-emails/maildir/bsd/arf-06.eml +166 -0
  131. data/set-of-emails/maildir/bsd/arf-07.eml +59 -0
  132. data/set-of-emails/maildir/bsd/arf-08.eml +103 -0
  133. data/set-of-emails/maildir/bsd/arf-09.eml +104 -0
  134. data/set-of-emails/maildir/bsd/arf-10.eml +56 -0
  135. data/set-of-emails/maildir/bsd/arf-11.eml +37 -0
  136. data/set-of-emails/maildir/bsd/arf-12.eml +40 -0
  137. data/set-of-emails/maildir/bsd/arf-13.eml +76 -0
  138. data/set-of-emails/maildir/bsd/arf-14.eml +333 -0
  139. data/set-of-emails/maildir/bsd/arf-15.eml +66 -0
  140. data/set-of-emails/maildir/bsd/courier-01.eml +79 -0
  141. data/set-of-emails/maildir/bsd/courier-02.eml +83 -0
  142. data/set-of-emails/maildir/bsd/courier-03.eml +85 -0
  143. data/set-of-emails/maildir/bsd/courier-04.eml +87 -0
  144. data/set-of-emails/maildir/bsd/de-einsundeins-01.eml +38 -0
  145. data/set-of-emails/maildir/bsd/de-gmx-01.eml +52 -0
  146. data/set-of-emails/maildir/bsd/de-gmx-02.eml +51 -0
  147. data/set-of-emails/maildir/bsd/de-gmx-03.eml +56 -0
  148. data/set-of-emails/maildir/bsd/de-gmx-04.eml +51 -0
  149. data/set-of-emails/maildir/bsd/domino-01.eml +33 -0
  150. data/set-of-emails/maildir/bsd/domino-02.eml +83 -0
  151. data/set-of-emails/maildir/bsd/exchange-01.eml +31 -0
  152. data/set-of-emails/maildir/bsd/exchange-02.eml +67 -0
  153. data/set-of-emails/maildir/bsd/exchange-03.eml +52 -0
  154. data/set-of-emails/maildir/bsd/exchange-04.eml +28 -0
  155. data/set-of-emails/maildir/bsd/exchange-05.eml +56 -0
  156. data/set-of-emails/maildir/bsd/exchange-06.eml +151 -0
  157. data/set-of-emails/maildir/bsd/exim-01.eml +46 -0
  158. data/set-of-emails/maildir/bsd/exim-02.eml +41 -0
  159. data/set-of-emails/maildir/bsd/exim-03.eml +42 -0
  160. data/set-of-emails/maildir/bsd/exim-04.eml +46 -0
  161. data/set-of-emails/maildir/bsd/exim-05.eml +49 -0
  162. data/set-of-emails/maildir/bsd/exim-06.eml +44 -0
  163. data/set-of-emails/maildir/bsd/exim-07.eml +28 -0
  164. data/set-of-emails/maildir/bsd/exim-08.eml +42 -0
  165. data/set-of-emails/maildir/bsd/exim-09.eml +169 -0
  166. data/set-of-emails/maildir/bsd/exim-10.eml +718 -0
  167. data/set-of-emails/maildir/bsd/exim-11.eml +718 -0
  168. data/set-of-emails/maildir/bsd/exim-12.eml +75 -0
  169. data/set-of-emails/maildir/bsd/exim-13.eml +145 -0
  170. data/set-of-emails/maildir/bsd/exim-14.eml +32 -0
  171. data/set-of-emails/maildir/bsd/exim-15.eml +49 -0
  172. data/set-of-emails/maildir/bsd/exim-16.eml +98 -0
  173. data/set-of-emails/maildir/bsd/exim-17.eml +50 -0
  174. data/set-of-emails/maildir/bsd/exim-18.eml +96 -0
  175. data/set-of-emails/maildir/bsd/exim-19.eml +52 -0
  176. data/set-of-emails/maildir/bsd/exim-20.eml +159 -0
  177. data/set-of-emails/maildir/bsd/exim-21.eml +150 -0
  178. data/set-of-emails/maildir/bsd/exim-22.eml +50 -0
  179. data/set-of-emails/maildir/bsd/exim-23.eml +57 -0
  180. data/set-of-emails/maildir/bsd/exim-24.eml +107 -0
  181. data/set-of-emails/maildir/bsd/exim-25.eml +18 -0
  182. data/set-of-emails/maildir/bsd/exim-26.eml +111 -0
  183. data/set-of-emails/maildir/bsd/exim-27.eml +120 -0
  184. data/set-of-emails/maildir/bsd/exim-28.eml +148 -0
  185. data/set-of-emails/maildir/bsd/google-apps-01.eml +66 -0
  186. data/set-of-emails/maildir/bsd/imailserver-01.eml +27 -0
  187. data/set-of-emails/maildir/bsd/imailserver-02.eml +36 -0
  188. data/set-of-emails/maildir/bsd/imailserver-03.eml +28 -0
  189. data/set-of-emails/maildir/bsd/imailserver-04.eml +15 -0
  190. data/set-of-emails/maildir/bsd/imailserver-05.eml +92 -0
  191. data/set-of-emails/maildir/bsd/imailserver-06.eml +29 -0
  192. data/set-of-emails/maildir/bsd/interscanmss-01.eml +49 -0
  193. data/set-of-emails/maildir/bsd/interscanmss-02.eml +259 -0
  194. data/set-of-emails/maildir/bsd/jp-biglobe-01.eml +43 -0
  195. data/set-of-emails/maildir/bsd/jp-ezweb-01.eml +36 -0
  196. data/set-of-emails/maildir/bsd/jp-ezweb-02.eml +65 -0
  197. data/set-of-emails/maildir/bsd/jp-ezweb-03.eml +35 -0
  198. data/set-of-emails/maildir/bsd/jp-ezweb-04.eml +38 -0
  199. data/set-of-emails/maildir/bsd/jp-ezweb-05.eml +38 -0
  200. data/set-of-emails/maildir/bsd/jp-ezweb-06.eml +33 -0
  201. data/set-of-emails/maildir/bsd/jp-kddi-01.eml +49 -0
  202. data/set-of-emails/maildir/bsd/jp-kddi-02.eml +54 -0
  203. data/set-of-emails/maildir/bsd/jp-kddi-03.eml +54 -0
  204. data/set-of-emails/maildir/bsd/mailfoundry-01.eml +50 -0
  205. data/set-of-emails/maildir/bsd/mailfoundry-02.eml +49 -0
  206. data/set-of-emails/maildir/bsd/mailmarshalsmtp-01.eml +43 -0
  207. data/set-of-emails/maildir/bsd/mcafee-01.eml +63 -0
  208. data/set-of-emails/maildir/bsd/mcafee-02.eml +65 -0
  209. data/set-of-emails/maildir/bsd/mcafee-03.eml +59 -0
  210. data/set-of-emails/maildir/bsd/messagingserver-01.eml +102 -0
  211. data/set-of-emails/maildir/bsd/messagingserver-02.eml +72 -0
  212. data/set-of-emails/maildir/bsd/messagingserver-03.eml +70 -0
  213. data/set-of-emails/maildir/bsd/messagingserver-04.eml +102 -0
  214. data/set-of-emails/maildir/bsd/messagingserver-05.eml +98 -0
  215. data/set-of-emails/maildir/bsd/messagingserver-06.eml +101 -0
  216. data/set-of-emails/maildir/bsd/messagingserver-07.eml +129 -0
  217. data/set-of-emails/maildir/bsd/mfilter-01.eml +49 -0
  218. data/set-of-emails/maildir/bsd/mfilter-02.eml +48 -0
  219. data/set-of-emails/maildir/bsd/mfilter-03.eml +43 -0
  220. data/set-of-emails/maildir/bsd/mxlogic-01.eml +47 -0
  221. data/set-of-emails/maildir/bsd/mxlogic-02.eml +44 -0
  222. data/set-of-emails/maildir/bsd/mxlogic-03.eml +46 -0
  223. data/set-of-emails/maildir/bsd/notes-01.eml +42 -0
  224. data/set-of-emails/maildir/bsd/notes-02.eml +42 -0
  225. data/set-of-emails/maildir/bsd/notes-03.eml +38 -0
  226. data/set-of-emails/maildir/bsd/notes-04.eml +181 -0
  227. data/set-of-emails/maildir/bsd/opensmtpd-01.eml +33 -0
  228. data/set-of-emails/maildir/bsd/opensmtpd-02.eml +33 -0
  229. data/set-of-emails/maildir/bsd/opensmtpd-03.eml +36 -0
  230. data/set-of-emails/maildir/bsd/opensmtpd-04.eml +40 -0
  231. data/set-of-emails/maildir/bsd/opensmtpd-05.eml +36 -0
  232. data/set-of-emails/maildir/bsd/postfix-01.eml +60 -0
  233. data/set-of-emails/maildir/bsd/postfix-02.eml +78 -0
  234. data/set-of-emails/maildir/bsd/postfix-03.eml +71 -0
  235. data/set-of-emails/maildir/bsd/postfix-04.eml +89 -0
  236. data/set-of-emails/maildir/bsd/postfix-05.eml +78 -0
  237. data/set-of-emails/maildir/bsd/postfix-06.eml +72 -0
  238. data/set-of-emails/maildir/bsd/postfix-07.eml +74 -0
  239. data/set-of-emails/maildir/bsd/postfix-08.eml +78 -0
  240. data/set-of-emails/maildir/bsd/postfix-09.eml +76 -0
  241. data/set-of-emails/maildir/bsd/postfix-10.eml +73 -0
  242. data/set-of-emails/maildir/bsd/postfix-11.eml +86 -0
  243. data/set-of-emails/maildir/bsd/postfix-12.eml +71 -0
  244. data/set-of-emails/maildir/bsd/postfix-13.eml +81 -0
  245. data/set-of-emails/maildir/bsd/postfix-14.eml +68 -0
  246. data/set-of-emails/maildir/bsd/postfix-15.eml +69 -0
  247. data/set-of-emails/maildir/bsd/postfix-16.eml +73 -0
  248. data/set-of-emails/maildir/bsd/postfix-17.eml +68 -0
  249. data/set-of-emails/maildir/bsd/postfix-18.eml +121 -0
  250. data/set-of-emails/maildir/bsd/postfix-19.eml +105 -0
  251. data/set-of-emails/maildir/bsd/postfix-20.eml +231 -0
  252. data/set-of-emails/maildir/bsd/postfix-21.eml +60 -0
  253. data/set-of-emails/maildir/bsd/qmail-01.eml +40 -0
  254. data/set-of-emails/maildir/bsd/qmail-02.eml +35 -0
  255. data/set-of-emails/maildir/bsd/qmail-03.eml +22 -0
  256. data/set-of-emails/maildir/bsd/qmail-04.eml +31 -0
  257. data/set-of-emails/maildir/bsd/qmail-05.eml +31 -0
  258. data/set-of-emails/maildir/bsd/qmail-06.eml +39 -0
  259. data/set-of-emails/maildir/bsd/qmail-07.eml +22 -0
  260. data/set-of-emails/maildir/bsd/qmail-08.eml +23 -0
  261. data/set-of-emails/maildir/bsd/qmail-09.eml +103 -0
  262. data/set-of-emails/maildir/bsd/rfc3464-01.eml +60 -0
  263. data/set-of-emails/maildir/bsd/rfc3464-02.eml +43 -0
  264. data/set-of-emails/maildir/bsd/rfc3464-03.eml +40 -0
  265. data/set-of-emails/maildir/bsd/rfc3464-04.eml +50 -0
  266. data/set-of-emails/maildir/bsd/rfc3464-05.eml +63 -0
  267. data/set-of-emails/maildir/bsd/rfc3464-06.eml +48 -0
  268. data/set-of-emails/maildir/bsd/rfc3464-07.eml +88 -0
  269. data/set-of-emails/maildir/bsd/rfc3464-08.eml +70 -0
  270. data/set-of-emails/maildir/bsd/rfc3464-09.eml +93 -0
  271. data/set-of-emails/maildir/bsd/rfc3464-10.eml +467 -0
  272. data/set-of-emails/maildir/bsd/rfc3464-11.eml +1171 -0
  273. data/set-of-emails/maildir/bsd/rfc3464-12.eml +101 -0
  274. data/set-of-emails/maildir/bsd/rfc3464-13.eml +131 -0
  275. data/set-of-emails/maildir/bsd/rfc3464-14.eml +121 -0
  276. data/set-of-emails/maildir/bsd/rfc3464-15.eml +144 -0
  277. data/set-of-emails/maildir/bsd/rfc3464-16.eml +36 -0
  278. data/set-of-emails/maildir/bsd/rfc3464-17.eml +109 -0
  279. data/set-of-emails/maildir/bsd/rfc3464-18.eml +149 -0
  280. data/set-of-emails/maildir/bsd/rfc3464-19.eml +65 -0
  281. data/set-of-emails/maildir/bsd/rfc3464-20.eml +145 -0
  282. data/set-of-emails/maildir/bsd/rfc3464-21.eml +146 -0
  283. data/set-of-emails/maildir/bsd/rfc3464-22.eml +105 -0
  284. data/set-of-emails/maildir/bsd/rfc3464-23.eml +21 -0
  285. data/set-of-emails/maildir/bsd/rfc3464-24.eml +27 -0
  286. data/set-of-emails/maildir/bsd/rfc3464-25.eml +33 -0
  287. data/set-of-emails/maildir/bsd/rfc3464-26.eml +98 -0
  288. data/set-of-emails/maildir/bsd/rfc3464-27.eml +180 -0
  289. data/set-of-emails/maildir/bsd/rfc3464-28.eml +122 -0
  290. data/set-of-emails/maildir/bsd/rfc3834-01.eml +37 -0
  291. data/set-of-emails/maildir/bsd/rfc3834-02.eml +51 -0
  292. data/set-of-emails/maildir/bsd/rfc3834-03.eml +33 -0
  293. data/set-of-emails/maildir/bsd/ru-mailru-01.eml +54 -0
  294. data/set-of-emails/maildir/bsd/ru-mailru-02.eml +54 -0
  295. data/set-of-emails/maildir/bsd/ru-mailru-03.eml +62 -0
  296. data/set-of-emails/maildir/bsd/ru-mailru-04.eml +54 -0
  297. data/set-of-emails/maildir/bsd/ru-yandex-01.eml +102 -0
  298. data/set-of-emails/maildir/bsd/ru-yandex-02.eml +113 -0
  299. data/set-of-emails/maildir/bsd/ru-yandex-03.eml +101 -0
  300. data/set-of-emails/maildir/bsd/sendmail-01.eml +70 -0
  301. data/set-of-emails/maildir/bsd/sendmail-02.eml +82 -0
  302. data/set-of-emails/maildir/bsd/sendmail-03.eml +76 -0
  303. data/set-of-emails/maildir/bsd/sendmail-04.eml +63 -0
  304. data/set-of-emails/maildir/bsd/sendmail-05.eml +64 -0
  305. data/set-of-emails/maildir/bsd/sendmail-06.eml +67 -0
  306. data/set-of-emails/maildir/bsd/sendmail-07.eml +65 -0
  307. data/set-of-emails/maildir/bsd/sendmail-08.eml +62 -0
  308. data/set-of-emails/maildir/bsd/sendmail-09.eml +60 -0
  309. data/set-of-emails/maildir/bsd/sendmail-10.eml +82 -0
  310. data/set-of-emails/maildir/bsd/sendmail-11.eml +60 -0
  311. data/set-of-emails/maildir/bsd/sendmail-12.eml +62 -0
  312. data/set-of-emails/maildir/bsd/sendmail-13.eml +66 -0
  313. data/set-of-emails/maildir/bsd/sendmail-14.eml +64 -0
  314. data/set-of-emails/maildir/bsd/sendmail-15.eml +60 -0
  315. data/set-of-emails/maildir/bsd/sendmail-16.eml +69 -0
  316. data/set-of-emails/maildir/bsd/sendmail-17.eml +68 -0
  317. data/set-of-emails/maildir/bsd/sendmail-18.eml +64 -0
  318. data/set-of-emails/maildir/bsd/sendmail-19.eml +71 -0
  319. data/set-of-emails/maildir/bsd/sendmail-20.eml +120 -0
  320. data/set-of-emails/maildir/bsd/sendmail-21.eml +69 -0
  321. data/set-of-emails/maildir/bsd/sendmail-22.eml +73 -0
  322. data/set-of-emails/maildir/bsd/sendmail-23.eml +137 -0
  323. data/set-of-emails/maildir/bsd/sendmail-24.eml +66 -0
  324. data/set-of-emails/maildir/bsd/sendmail-25.eml +70 -0
  325. data/set-of-emails/maildir/bsd/sendmail-26.eml +71 -0
  326. data/set-of-emails/maildir/bsd/sendmail-27.eml +69 -0
  327. data/set-of-emails/maildir/bsd/sendmail-28.eml +69 -0
  328. data/set-of-emails/maildir/bsd/sendmail-29.eml +70 -0
  329. data/set-of-emails/maildir/bsd/sendmail-30.eml +68 -0
  330. data/set-of-emails/maildir/bsd/sendmail-31.eml +80 -0
  331. data/set-of-emails/maildir/bsd/sendmail-32.eml +71 -0
  332. data/set-of-emails/maildir/bsd/sendmail-33.eml +71 -0
  333. data/set-of-emails/maildir/bsd/sendmail-34.eml +75 -0
  334. data/set-of-emails/maildir/bsd/sendmail-35.eml +70 -0
  335. data/set-of-emails/maildir/bsd/sendmail-36.eml +71 -0
  336. data/set-of-emails/maildir/bsd/sendmail-37.eml +71 -0
  337. data/set-of-emails/maildir/bsd/sendmail-38.eml +167 -0
  338. data/set-of-emails/maildir/bsd/surfcontrol-01.eml +79 -0
  339. data/set-of-emails/maildir/bsd/surfcontrol-02.eml +70 -0
  340. data/set-of-emails/maildir/bsd/surfcontrol-03.eml +70 -0
  341. data/set-of-emails/maildir/bsd/uk-messagelabs-01.eml +76 -0
  342. data/set-of-emails/maildir/bsd/us-amazonses-01.eml +59 -0
  343. data/set-of-emails/maildir/bsd/us-amazonses-02.eml +177 -0
  344. data/set-of-emails/maildir/bsd/us-amazonses-03.eml +55 -0
  345. data/set-of-emails/maildir/bsd/us-amazonses-04.eml +55 -0
  346. data/set-of-emails/maildir/bsd/us-amazonworkmail-01.eml +156 -0
  347. data/set-of-emails/maildir/bsd/us-amazonworkmail-02.eml +160 -0
  348. data/set-of-emails/maildir/bsd/us-amazonworkmail-03.eml +161 -0
  349. data/set-of-emails/maildir/bsd/us-amazonworkmail-04.eml +156 -0
  350. data/set-of-emails/maildir/bsd/us-amazonworkmail-05.eml +157 -0
  351. data/set-of-emails/maildir/bsd/us-aol-01.eml +1258 -0
  352. data/set-of-emails/maildir/bsd/us-aol-02.eml +1257 -0
  353. data/set-of-emails/maildir/bsd/us-aol-03.eml +1264 -0
  354. data/set-of-emails/maildir/bsd/us-aol-04.eml +1260 -0
  355. data/set-of-emails/maildir/bsd/us-bigfoot-01.eml +64 -0
  356. data/set-of-emails/maildir/bsd/us-facebook-01.eml +40 -0
  357. data/set-of-emails/maildir/bsd/us-facebook-02.eml +42 -0
  358. data/set-of-emails/maildir/bsd/us-google-01.eml +70 -0
  359. data/set-of-emails/maildir/bsd/us-google-02.eml +50 -0
  360. data/set-of-emails/maildir/bsd/us-google-03.eml +51 -0
  361. data/set-of-emails/maildir/bsd/us-google-04.eml +82 -0
  362. data/set-of-emails/maildir/bsd/us-google-05.eml +50 -0
  363. data/set-of-emails/maildir/bsd/us-google-06.eml +56 -0
  364. data/set-of-emails/maildir/bsd/us-google-07.eml +42 -0
  365. data/set-of-emails/maildir/bsd/us-google-08.eml +59 -0
  366. data/set-of-emails/maildir/bsd/us-google-09.eml +76 -0
  367. data/set-of-emails/maildir/bsd/us-google-10.eml +69 -0
  368. data/set-of-emails/maildir/bsd/us-google-11.eml +68 -0
  369. data/set-of-emails/maildir/bsd/us-google-12.eml +76 -0
  370. data/set-of-emails/maildir/bsd/us-google-13.eml +79 -0
  371. data/set-of-emails/maildir/bsd/us-google-14.eml +304 -0
  372. data/set-of-emails/maildir/bsd/us-office365-01.eml +102 -0
  373. data/set-of-emails/maildir/bsd/us-outlook-01.eml +72 -0
  374. data/set-of-emails/maildir/bsd/us-outlook-02.eml +72 -0
  375. data/set-of-emails/maildir/bsd/us-outlook-03.eml +72 -0
  376. data/set-of-emails/maildir/bsd/us-outlook-04.eml +79 -0
  377. data/set-of-emails/maildir/bsd/us-outlook-05.eml +85 -0
  378. data/set-of-emails/maildir/bsd/us-outlook-06.eml +75 -0
  379. data/set-of-emails/maildir/bsd/us-outlook-07.eml +70 -0
  380. data/set-of-emails/maildir/bsd/us-receivingses-01.eml +74 -0
  381. data/set-of-emails/maildir/bsd/us-receivingses-02.eml +74 -0
  382. data/set-of-emails/maildir/bsd/us-receivingses-03.eml +74 -0
  383. data/set-of-emails/maildir/bsd/us-receivingses-04.eml +74 -0
  384. data/set-of-emails/maildir/bsd/us-receivingses-05.eml +74 -0
  385. data/set-of-emails/maildir/bsd/us-receivingses-06.eml +74 -0
  386. data/set-of-emails/maildir/bsd/us-receivingses-07.eml +74 -0
  387. data/set-of-emails/maildir/bsd/us-sendgrid-01.eml +95 -0
  388. data/set-of-emails/maildir/bsd/us-sendgrid-02.eml +98 -0
  389. data/set-of-emails/maildir/bsd/us-sendgrid-03.eml +100 -0
  390. data/set-of-emails/maildir/bsd/us-verizon-01.eml +31 -0
  391. data/set-of-emails/maildir/bsd/us-yahoo-01.eml +78 -0
  392. data/set-of-emails/maildir/bsd/us-yahoo-02.eml +79 -0
  393. data/set-of-emails/maildir/bsd/us-yahoo-03.eml +93 -0
  394. data/set-of-emails/maildir/bsd/us-yahoo-04.eml +94 -0
  395. data/set-of-emails/maildir/bsd/us-yahoo-05.eml +94 -0
  396. data/set-of-emails/maildir/bsd/us-zoho-01.eml +40 -0
  397. data/set-of-emails/maildir/bsd/us-zoho-02.eml +38 -0
  398. data/set-of-emails/maildir/bsd/us-zoho-03.eml +37 -0
  399. data/set-of-emails/maildir/bsd/us-zoho-04.eml +47 -0
  400. data/set-of-emails/maildir/bsd/us-zoho-05.eml +37 -0
  401. data/set-of-emails/maildir/bsd/v5sendmail-01.eml +24 -0
  402. data/set-of-emails/maildir/bsd/v5sendmail-02.eml +26 -0
  403. data/set-of-emails/maildir/bsd/v5sendmail-03.eml +29 -0
  404. data/set-of-emails/maildir/bsd/v5sendmail-04.eml +29 -0
  405. data/set-of-emails/maildir/bsd/v5sendmail-05.eml +42 -0
  406. data/set-of-emails/maildir/bsd/v5sendmail-06.eml +28 -0
  407. data/set-of-emails/maildir/bsd/v5sendmail-07.eml +35 -0
  408. data/set-of-emails/maildir/bsd/x1-01.eml +61 -0
  409. data/set-of-emails/maildir/bsd/x1-02.eml +62 -0
  410. data/set-of-emails/maildir/bsd/x2-01.eml +41 -0
  411. data/set-of-emails/maildir/bsd/x2-02.eml +46 -0
  412. data/set-of-emails/maildir/bsd/x2-03.eml +34 -0
  413. data/set-of-emails/maildir/bsd/x2-04.eml +0 -0
  414. data/set-of-emails/maildir/bsd/x2-05.eml +98 -0
  415. data/set-of-emails/maildir/bsd/x3-01.eml +61 -0
  416. data/set-of-emails/maildir/bsd/x3-02.eml +64 -0
  417. data/set-of-emails/maildir/bsd/x3-03.eml +59 -0
  418. data/set-of-emails/maildir/bsd/x3-04.eml +106 -0
  419. data/set-of-emails/maildir/bsd/x4-01.eml +92 -0
  420. data/set-of-emails/maildir/bsd/x4-02.eml +112 -0
  421. data/set-of-emails/maildir/bsd/x4-03.eml +245 -0
  422. data/set-of-emails/maildir/bsd/x4-04.eml +81 -0
  423. data/set-of-emails/maildir/bsd/x4-05.eml +121 -0
  424. data/set-of-emails/maildir/bsd/x4-06.eml +32 -0
  425. data/set-of-emails/maildir/bsd/x4-07.eml +153 -0
  426. data/set-of-emails/maildir/bsd/x5-01.eml +155 -0
  427. data/set-of-emails/maildir/dos/activehunter-01.eml +54 -0
  428. data/set-of-emails/maildir/dos/apachejames-01.eml +46 -0
  429. data/set-of-emails/maildir/dos/arf-01.eml +66 -0
  430. data/set-of-emails/maildir/dos/courier-01.eml +79 -0
  431. data/set-of-emails/maildir/dos/de-einsundeins-01.eml +38 -0
  432. data/set-of-emails/maildir/dos/de-gmx-01.eml +52 -0
  433. data/set-of-emails/maildir/dos/domino-01.eml +33 -0
  434. data/set-of-emails/maildir/dos/exchange-01.eml +31 -0
  435. data/set-of-emails/maildir/dos/exim-01.eml +46 -0
  436. data/set-of-emails/maildir/dos/google-apps-01.eml +66 -0
  437. data/set-of-emails/maildir/dos/imailserver-01.eml +27 -0
  438. data/set-of-emails/maildir/dos/interscanmss-01.eml +49 -0
  439. data/set-of-emails/maildir/dos/jp-biglobe-01.eml +43 -0
  440. data/set-of-emails/maildir/dos/jp-ezweb-01.eml +36 -0
  441. data/set-of-emails/maildir/dos/jp-kddi-01.eml +49 -0
  442. data/set-of-emails/maildir/dos/mailfoundry-01.eml +50 -0
  443. data/set-of-emails/maildir/dos/mailmarshalsmtp-01.eml +43 -0
  444. data/set-of-emails/maildir/dos/mcafee-01.eml +63 -0
  445. data/set-of-emails/maildir/dos/messagingserver-01.eml +102 -0
  446. data/set-of-emails/maildir/dos/mfilter-01.eml +49 -0
  447. data/set-of-emails/maildir/dos/mxlogic-01.eml +47 -0
  448. data/set-of-emails/maildir/dos/notes-01.eml +42 -0
  449. data/set-of-emails/maildir/dos/opensmtpd-01.eml +33 -0
  450. data/set-of-emails/maildir/dos/postfix-01.eml +60 -0
  451. data/set-of-emails/maildir/dos/qmail-01.eml +40 -0
  452. data/set-of-emails/maildir/dos/rfc3464-01.eml +59 -0
  453. data/set-of-emails/maildir/dos/rfc3834-01.eml +37 -0
  454. data/set-of-emails/maildir/dos/ru-mailru-01.eml +54 -0
  455. data/set-of-emails/maildir/dos/ru-yandex-01.eml +102 -0
  456. data/set-of-emails/maildir/dos/sendmail-01.eml +69 -0
  457. data/set-of-emails/maildir/dos/surfcontrol-01.eml +79 -0
  458. data/set-of-emails/maildir/dos/uk-messagelabs-01.eml +76 -0
  459. data/set-of-emails/maildir/dos/us-amazonses-01.eml +59 -0
  460. data/set-of-emails/maildir/dos/us-aol-01.eml +1258 -0
  461. data/set-of-emails/maildir/dos/us-bigfoot-01.eml +64 -0
  462. data/set-of-emails/maildir/dos/us-facebook-01.eml +40 -0
  463. data/set-of-emails/maildir/dos/us-google-01.eml +70 -0
  464. data/set-of-emails/maildir/dos/us-outlook-01.eml +72 -0
  465. data/set-of-emails/maildir/dos/us-receivingses-01.eml +74 -0
  466. data/set-of-emails/maildir/dos/us-sendgrid-01.eml +95 -0
  467. data/set-of-emails/maildir/dos/us-verizon-01.eml +31 -0
  468. data/set-of-emails/maildir/dos/us-yahoo-01.eml +78 -0
  469. data/set-of-emails/maildir/dos/us-zoho-01.eml +40 -0
  470. data/set-of-emails/maildir/dos/v5sendmail-01.eml +24 -0
  471. data/set-of-emails/maildir/dos/x1-01.eml +61 -0
  472. data/set-of-emails/maildir/dos/x2-01.eml +41 -0
  473. data/set-of-emails/maildir/dos/x3-01.eml +61 -0
  474. data/set-of-emails/maildir/dos/x4-01.eml +90 -0
  475. data/set-of-emails/maildir/dos/x5-01.eml +155 -0
  476. data/set-of-emails/maildir/err/make-test-01.eml +70 -0
  477. data/set-of-emails/maildir/err/make-test-02.eml +70 -0
  478. data/set-of-emails/maildir/err/make-test-03.eml +64 -0
  479. data/set-of-emails/maildir/err/make-test-04.eml +64 -0
  480. data/set-of-emails/maildir/err/make-test-05.eml +66 -0
  481. data/set-of-emails/maildir/err/make-test-06.eml +118 -0
  482. data/set-of-emails/maildir/err/make-test-07.eml +26 -0
  483. data/set-of-emails/maildir/err/make-test-08.eml +67 -0
  484. data/set-of-emails/maildir/err/make-test-09.eml +55 -0
  485. data/set-of-emails/maildir/err/make-test-10.eml +69 -0
  486. data/set-of-emails/maildir/err/make-test-11.eml +64 -0
  487. data/set-of-emails/maildir/err/make-test-12.eml +66 -0
  488. data/set-of-emails/maildir/err/make-test-13.eml +67 -0
  489. data/set-of-emails/maildir/err/make-test-14.eml +66 -0
  490. data/set-of-emails/maildir/err/make-test-15.eml +70 -0
  491. data/set-of-emails/maildir/err/make-test-16.eml +68 -0
  492. data/set-of-emails/maildir/err/make-test-17.eml +68 -0
  493. data/set-of-emails/maildir/err/make-test-18.eml +68 -0
  494. data/set-of-emails/maildir/err/make-test-19.eml +69 -0
  495. data/set-of-emails/maildir/err/make-test-20.eml +67 -0
  496. data/set-of-emails/maildir/err/make-test-21.eml +69 -0
  497. data/set-of-emails/maildir/err/make-test-22.eml +66 -0
  498. data/set-of-emails/maildir/err/make-test-23.eml +70 -0
  499. data/set-of-emails/maildir/err/make-test-24.eml +69 -0
  500. data/set-of-emails/maildir/err/make-test-25.eml +67 -0
  501. data/set-of-emails/maildir/err/make-test-26.eml +69 -0
  502. data/set-of-emails/maildir/err/make-test-27.eml +69 -0
  503. data/set-of-emails/maildir/err/make-test-28.eml +66 -0
  504. data/set-of-emails/maildir/err/make-test-29.eml +68 -0
  505. data/set-of-emails/maildir/err/make-test-30.eml +68 -0
  506. data/set-of-emails/maildir/err/make-test-31.eml +80 -0
  507. data/set-of-emails/maildir/err/make-test-32.eml +66 -0
  508. data/set-of-emails/maildir/err/make-test-33.eml +68 -0
  509. data/set-of-emails/maildir/err/make-test-34.eml +56 -0
  510. data/set-of-emails/maildir/err/make-test-35.eml +59 -0
  511. data/set-of-emails/maildir/err/make-test-36.eml +53 -0
  512. data/set-of-emails/maildir/err/make-test-37.eml +62 -0
  513. data/set-of-emails/maildir/mac/activehunter-01.eml +1 -2
  514. data/set-of-emails/maildir/mac/apachejames-01.eml +1 -4
  515. data/set-of-emails/maildir/mac/arf-01.eml +1 -3
  516. data/set-of-emails/maildir/mac/courier-01.eml +1 -6
  517. data/set-of-emails/maildir/mac/de-einsundeins-01.eml +1 -1
  518. data/set-of-emails/maildir/mac/de-gmx-01.eml +1 -1
  519. data/set-of-emails/maildir/mac/domino-01.eml +1 -0
  520. data/set-of-emails/maildir/mac/exchange-01.eml +1 -0
  521. data/set-of-emails/maildir/mac/exim-01.eml +1 -1
  522. data/set-of-emails/maildir/mac/google-apps-01.eml +1 -4
  523. data/set-of-emails/maildir/mac/imailserver-01.eml +1 -0
  524. data/set-of-emails/maildir/mac/interscanmss-01.eml +1 -2
  525. data/set-of-emails/maildir/mac/jp-biglobe-01.eml +1 -2
  526. data/set-of-emails/maildir/mac/jp-ezweb-01.eml +1 -1
  527. data/set-of-emails/maildir/mac/jp-kddi-01.eml +1 -2
  528. data/set-of-emails/maildir/mac/mailfoundry-01.eml +1 -2
  529. data/set-of-emails/maildir/mac/mailmarshalsmtp-01.eml +1 -2
  530. data/set-of-emails/maildir/mac/mcafee-01.eml +1 -4
  531. data/set-of-emails/maildir/mac/messagingserver-01.eml +1 -4
  532. data/set-of-emails/maildir/mac/mfilter-01.eml +1 -3
  533. data/set-of-emails/maildir/mac/mxlogic-01.eml +1 -1
  534. data/set-of-emails/maildir/mac/notes-01.eml +1 -2
  535. data/set-of-emails/maildir/mac/opensmtpd-01.eml +1 -0
  536. data/set-of-emails/maildir/mac/postfix-01.eml +1 -3
  537. data/set-of-emails/maildir/mac/qmail-01.eml +1 -1
  538. data/set-of-emails/maildir/mac/rfc3464-01.eml +1 -4
  539. data/set-of-emails/maildir/mac/rfc3834-01.eml +1 -0
  540. data/set-of-emails/maildir/mac/ru-mailru-01.eml +1 -1
  541. data/set-of-emails/maildir/mac/ru-yandex-01.eml +1 -4
  542. data/set-of-emails/maildir/mac/sendmail-01.eml +1 -4
  543. data/set-of-emails/maildir/mac/surfcontrol-01.eml +1 -5
  544. data/set-of-emails/maildir/mac/uk-messagelabs-01.eml +1 -4
  545. data/set-of-emails/maildir/mac/us-amazonses-01.eml +1 -4
  546. data/set-of-emails/maildir/mac/us-aol-01.eml +1 -15
  547. data/set-of-emails/maildir/mac/us-bigfoot-01.eml +1 -4
  548. data/set-of-emails/maildir/mac/us-facebook-01.eml +1 -4
  549. data/set-of-emails/maildir/mac/us-google-01.eml +1 -1
  550. data/set-of-emails/maildir/mac/us-outlook-01.eml +1 -4
  551. data/set-of-emails/maildir/mac/us-receivingses-01.eml +1 -4
  552. data/set-of-emails/maildir/mac/us-sendgrid-01.eml +1 -3
  553. data/set-of-emails/maildir/mac/us-verizon-01.eml +1 -2
  554. data/set-of-emails/maildir/mac/us-yahoo-01.eml +1 -1
  555. data/set-of-emails/maildir/mac/us-zoho-01.eml +1 -2
  556. data/set-of-emails/maildir/mac/v5sendmail-01.eml +1 -0
  557. data/set-of-emails/maildir/mac/x1-01.eml +1 -4
  558. data/set-of-emails/maildir/mac/x2-01.eml +1 -1
  559. data/set-of-emails/maildir/mac/x3-01.eml +1 -3
  560. data/set-of-emails/maildir/mac/x4-01.eml +1 -2
  561. data/set-of-emails/maildir/mac/x5-01.eml +1 -8
  562. data/set-of-emails/maildir/not/is-not-bounce-01.eml +25 -0
  563. data/set-of-emails/to-be-debugged-because/reason-is-onhold/onhold-0001.eml +85 -0
  564. data/set-of-emails/to-be-debugged-because/reason-is-undefined/undefined-0002.eml +27 -0
  565. data/set-of-emails/to-be-debugged-because/reason-is-undefined/undefined-0003.eml +78 -0
  566. data/set-of-emails/to-be-debugged-because/sisimai-cannot-parse-yet/cannot-parse-this-email-0002.eml +25 -0
  567. data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-01.eml +79 -0
  568. data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-02.eml +72 -0
  569. data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-03.eml +68 -0
  570. data/set-of-emails/to-be-debugged-because/something-is-wrong/no-message-id-from-pr-150.eml +75 -0
  571. data/set-of-emails/to-be-parsed-for-test/README.md +20 -0
  572. data/sisimai-java.gemspec +29 -0
  573. data/sisimai.gemspec +28 -0
  574. metadata +680 -0
@@ -0,0 +1,150 @@
1
+ module Sisimai
2
+ # Sisimai::RFC3834 - RFC3834 auto reply message detector
3
+ module RFC3834
4
+ # Imported from p5-Sisimail/lib/Sisimai/RFC3834.pm
5
+ class << self
6
+ # http://tools.ietf.org/html/rfc3834
7
+ Re0 = {
8
+ # http://www.iana.org/assignments/auto-submitted-keywords/auto-submitted-keywords.xhtml
9
+ :'auto-submitted' => %r/\Aauto-(?:generated|replied|notified)/i,
10
+ # https://msdn.microsoft.com/en-us/library/ee219609(v=exchg.80).aspx
11
+ :'x-auto-response-suppress' => %r/(?:OOF|AutoReply)/i,
12
+ :'precedence' => %r/\Aauto_reply\z/,
13
+ :'subject' => %r/\A(?:
14
+ Auto:
15
+ |Out[ ]of[ ]Office:
16
+ )
17
+ /xi,
18
+ }
19
+ Re1 = { :endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/ }
20
+ Re2 = {
21
+ :subject => %r/(?:
22
+ SECURITY[ ]information[ ]for # sudo
23
+ |Mail[ ]failure[ ][-] # Exim
24
+ )
25
+ /x,
26
+ :from => %r/(?:root|postmaster|mailer-daemon)[@]/i,
27
+ :to => %r/root[@]/,
28
+ }
29
+
30
+ def description; 'Detector for auto replied message'; end
31
+ def smtpagent; 'RFC3834'; end
32
+ def pattern; return Re0; end
33
+ def headerlist
34
+ return [
35
+ 'Auto-Submitted',
36
+ 'Precedence',
37
+ 'X-Auto-Response-Suppress',
38
+ ]
39
+ end
40
+
41
+ # Detect auto reply message as RFC3834
42
+ # @param [Hash] mhead Message header of a bounce email
43
+ # @options mhead [String] from From header
44
+ # @options mhead [String] date Date header
45
+ # @options mhead [String] subject Subject header
46
+ # @options mhead [Array] received Received headers
47
+ # @options mhead [String] others Other required headers
48
+ # @param [String] mbody Message body of a bounce email
49
+ # @return [Hash, Undef] Bounce data list and message/rfc822 part
50
+ # or Undef if it failed to parse or the
51
+ # arguments are missing
52
+ def scan(mhead, mbody)
53
+ return nil unless mhead
54
+ return nil unless mbody
55
+ return nil if mhead.keys.size == 0
56
+ return nil if mbody.size == 0
57
+
58
+ leave = 0
59
+ match = 0
60
+
61
+ # DETECT_EXCLUSION_MESSAGE
62
+ Re2.each_key do |e|
63
+ # Exclude message from root@
64
+ next unless mhead.key?(e.to_s)
65
+ next unless mhead[e.to_s]
66
+ next unless mhead[e.to_s] =~ Re2[e]
67
+ leave = 1
68
+ break
69
+ end
70
+ return nil if leave > 0
71
+
72
+ # DETECT_AUTO_REPLY_MESSAGE
73
+ Re0.each_key do |e|
74
+ # RFC3834 Auto-Submitted and other headers
75
+ next unless mhead.key?(e.to_s)
76
+ next unless mhead[e.to_s]
77
+ next unless mhead[e.to_s] =~ Re0[e]
78
+ match += 1
79
+ break
80
+ end
81
+ return nil if match < 1
82
+
83
+ require 'sisimai/mta'
84
+ require 'sisimai/address'
85
+ require 'sisimai/rfc5322'
86
+
87
+ dscontents = []; dscontents << Sisimai::MTA.DELIVERYSTATUS
88
+ hasdivided = mbody.split("\n")
89
+ recipients = 0 # (Integer) The number of 'Final-Recipient' header
90
+ maxmsgline = 5 # (Integer) Max message length(lines)
91
+ haveloaded = 0 # (Integer) The number of lines loaded from message body
92
+ blanklines = 0 # (Integer) Counter for countinuous blank lines
93
+ v = dscontents[-1]
94
+
95
+ # RECIPIENT_ADDRESS
96
+ ['from', 'return-path'].each do |e|
97
+ # Try to get the address of the recipient
98
+ next unless mhead.key?(e)
99
+ next unless mhead[e]
100
+ v['recipient'] = mhead[e]
101
+ break
102
+ end
103
+
104
+ if v['recipient']
105
+ # Clean-up the recipient address
106
+ v['recipient'] = Sisimai::Address.s3s4(v['recipient'])
107
+ recipients += 1
108
+ end
109
+ return nil unless recipients > 0
110
+
111
+ # BODY_PARSER: Get vacation message
112
+ hasdivided.each do |e|
113
+ # Read the first 5 lines except a blank line
114
+ unless e.size > 0
115
+ # Check a blank line
116
+ blanklines += 1
117
+ break if blanklines > 1
118
+ next
119
+ end
120
+ next unless e =~ / /
121
+
122
+ v['diagnosis'] ||= ''
123
+ v['diagnosis'] += e + ' '
124
+ haveloaded += 1
125
+ break if haveloaded >= maxmsgline
126
+ end
127
+ v['diagnosis'] ||= mhead['subject']
128
+
129
+ require 'sisimai/string'
130
+ v['diagnosis'] = Sisimai::String.sweep(v['diagnosis'])
131
+ v['reason'] = 'vacation'
132
+ v['agent'] = self.smtpagent
133
+ v['date'] = mhead['date']
134
+ v['status'] = ''
135
+
136
+ if mhead['received'].size > 0
137
+ # Get localhost and remote host name from Received header.
138
+ r = mhead['received']
139
+ %w|lhost rhost|.each { |a| v[a] ||= '' }
140
+ v['lhost'] = Sisimai::RFC5322.received(r[0]).shift if v['lhost'].empty?
141
+ v['rhost'] = Sisimai::RFC5322.received(r[-1]).pop if v['rhost'].empty?
142
+ end
143
+
144
+ v.each_key { |a| v[a] ||= '' }
145
+ return { 'ds' => dscontents, 'rfc822' => '' }
146
+ end
147
+
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,204 @@
1
+ module Sisimai
2
+ # Sisimai::RFC5322 provide methods for checking email address.
3
+ module RFC5322
4
+ # Imported from p5-Sisimail/lib/Sisimai/RFC5322.pm
5
+ class << self
6
+ HeaderTable = {
7
+ 'messageid' => ['Message-Id'],
8
+ 'subject' => ['Subject'],
9
+ 'listid' => ['List-Id'],
10
+ 'date' => ['Date', 'Posted-Date', 'Posted', 'Resent-Date'],
11
+ 'addresser' => [
12
+ 'From', 'Return-Path', 'Reply-To', 'Errors-To', 'Reverse-Path',
13
+ 'X-Postfix-Sender', 'Envelope-From', 'X-Envelope-From',
14
+ ],
15
+ 'recipient' => [
16
+ 'To', 'Delivered-To', 'Forward-Path', 'Envelope-To',
17
+ 'X-Envelope-To', 'Resent-To', 'Apparently-To'
18
+ ],
19
+ }
20
+
21
+ build_regular_expressions = lambda do
22
+ # See http://www.ietf.org/rfc/rfc5322.txt
23
+ # or http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html ...
24
+ # addr-spec = local-part "@" domain
25
+ # local-part = dot-atom / quoted-string / obs-local-part
26
+ # domain = dot-atom / domain-literal / obs-domain
27
+ # domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS]
28
+ # dcontent = dtext / quoted-pair
29
+ # dtext = NO-WS-CTL / ; Non white space controls
30
+ # %d33-90 / ; The rest of the US-ASCII
31
+ # %d94-126 ; characters not including "[",
32
+ # ; "]", or "\"
33
+ re = { 'rfc5322' => nil, 'ignored' => nil, 'domain' => nil }
34
+ atom = %r([a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)o
35
+ quoted_string = %r/"(?:\\[^\r\n]|[^\\"])*"/o
36
+ domain_literal = %r/\[(?:\\[\x01-\x09\x0B-\x0c\x0e-\x7f]|[\x21-\x5a\x5e-\x7e])*\]/o
37
+ dot_atom = %r/#{atom}(?:[.]#{atom})*/o
38
+ local_part = %r/(?:#{dot_atom}|#{quoted_string})/o
39
+ domain = %r/(?:#{dot_atom}|#{domain_literal})/o
40
+
41
+ re['rfc5322'] = %r/#{local_part}[@]#{domain}/o
42
+ re['ignored'] = %r/#{local_part}[.]*[@]#{domain}/o
43
+ re['domain'] = %r/#{domain}/o
44
+
45
+ return re
46
+ end
47
+
48
+ build_flatten_rfc822header_list = lambda do
49
+ # Convert HEADER: structured hash table to flatten hash table for being
50
+ # called from Sisimai::MTA::*
51
+ fv = {}
52
+ HeaderTable.each_value do |e|
53
+ e.each do |ee|
54
+ fv[ee.downcase] = 1
55
+ end
56
+ end
57
+ return fv
58
+ end
59
+
60
+ Re = build_regular_expressions.call
61
+ HeaderIndex = build_flatten_rfc822header_list.call
62
+
63
+ # Grouped RFC822 headers
64
+ # @param [String] group RFC822 Header group name
65
+ # @return [Array,Hash] RFC822 Header list
66
+ def HEADERFIELDS(group = '')
67
+ return HeaderIndex unless group.size > 0
68
+ return HeaderTable[group] if HeaderTable.key?(group)
69
+ return HeaderTable
70
+ end
71
+
72
+ # Fields that might be long
73
+ # @return [Hash] Long filed(email header) list
74
+ def LONGFIELDS
75
+ return { 'to' => 1, 'from' => 1, 'subject' => 1, 'message-id' => 1 }
76
+ end
77
+
78
+ # Check that the argument is an email address or not
79
+ # @param [String] email Email address string
80
+ # @return [True,False] true: is a email address
81
+ # false: is not an email address
82
+ def is_emailaddress(email)
83
+ return false unless email.is_a?(::String)
84
+ return false if email =~ %r/(?:[\x00-\x1f]|\x1f)/
85
+ return true if email =~ Re['ignored']
86
+ return false
87
+ end
88
+
89
+ # Check that the argument is an domain part of email address or not
90
+ # @param [String] dpart Domain part of the email address
91
+ # @return [True,False] true: Valid domain part
92
+ # false: Not a valid domain part
93
+ def is_domainpart(dpart)
94
+ return false unless dpart.is_a?(::String)
95
+ return false if dpart =~ /(?:[\x00-\x1f]|\x1f)/
96
+ return false if dpart =~ /[@]/
97
+ return true if dpart =~ Re['domain']
98
+ return false
99
+ end
100
+
101
+ # Check that the argument is mailer-daemon or not
102
+ # @param [String] email Email address
103
+ # @return [True,False] true: mailer-daemon
104
+ # false: Not mailer-daemon
105
+ def is_mailerdaemon(email)
106
+ return false unless email.is_a?(::String)
107
+
108
+ re = %r/(?:
109
+ mailer-daemon[@]
110
+ |[<(]mailer-daemon[)>]
111
+ |\Amailer-daemon\z
112
+ |[ ]?mailer-daemon[ ]
113
+ )
114
+ /xi
115
+ return true if email =~ re
116
+ return false
117
+ end
118
+
119
+ # Convert Received headers to a structured data
120
+ # @param [String] argvs Received header
121
+ # @return [Array] Received header as a structured data
122
+ def received(argvs)
123
+ return [] unless argvs.is_a?(::String)
124
+
125
+ hosts = []
126
+ value = { 'from' => '', 'by' => '' }
127
+
128
+ # Received: (qmail 10000 invoked by uid 999); 24 Apr 2013 00:00:00 +0900
129
+ return [] if argvs =~ /qmail[ ]+.+invoked[ ]+/
130
+
131
+ if cr = argvs.match(/\Afrom[ ]+(.+)[ ]+by[ ]+([^ ]+)/)
132
+ # Received: from localhost (localhost)
133
+ # by nijo.example.jp (V8/cf) id s1QB5ma0018057;
134
+ # Wed, 26 Feb 2014 06:05:48 -0500
135
+ value['from'] = cr[1]
136
+ value['by'] = cr[2]
137
+
138
+ elsif cr = argvs.match(/\bby[ ]+([^ ]+)(.+)/)
139
+ # Received: by 10.70.22.98 with SMTP id c2mr1838265pdf.3; Fri, 18 Jul 2014
140
+ # 00:31:02 -0700 (PDT)
141
+ value['from'] = cr[1] + cr[2]
142
+ value['by'] = cr[1]
143
+ end
144
+
145
+ if value['from'] =~ / /
146
+ # Received: from [10.22.22.222] (smtp-gateway.kyoto.ocn.ne.jp [192.0.2.222])
147
+ # (authenticated bits=0)
148
+ # by nijo.example.jp (V8/cf) with ESMTP id s1QB5ka0018055;
149
+ # Wed, 26 Feb 2014 06:05:47 -0500
150
+ received = value['from'].split(' ')
151
+ namelist = []
152
+ addrlist = []
153
+ hostname = ''
154
+ hostaddr = ''
155
+
156
+ received.each do |e|
157
+ # Received: from [10.22.22.222] (smtp-gateway.kyoto.ocn.ne.jp [192.0.2.222])
158
+ if e =~ /\A[\[(]\d+[.]\d+[.]\d+[.]\d+[)\]]\z/
159
+ # [192.0.2.1] or (192.0.2.1)
160
+ e = e.delete('[]()')
161
+ addrlist << e
162
+
163
+ else
164
+ # hostname
165
+ e = e.delete('[]()')
166
+ namelist << e
167
+ end
168
+ end
169
+
170
+ namelist.each do |e|
171
+ # 1. Hostname takes priority over all other IP addresses
172
+ next unless e =~ /[.]/
173
+ hostname = e
174
+ break
175
+ end
176
+
177
+ if hostname.length == 0
178
+ # 2. Use IP address as a remote host name
179
+ addrlist.each do |e|
180
+ # Skip if the address is a private address
181
+ next if e =~ /\A(?:10|127)[.]/
182
+ next if e =~ /\A172[.](?:1[6-9]|2[0-9]|3[0-1])[.]/
183
+ next if e =~ /\A192[.]168[.]/
184
+ hostaddr = e
185
+ break
186
+ end
187
+ end
188
+
189
+ value['from'] = hostname || hostaddr || addrlist[-1]
190
+ end
191
+
192
+ %w[from by].each do |e|
193
+ # Copy entries into hosts
194
+ next unless value[e].length > 0
195
+ value[e] = value[e].delete('[]();?')
196
+ hosts << value[e]
197
+ end
198
+ return hosts
199
+ end
200
+
201
+ end
202
+ end
203
+ end
204
+
@@ -0,0 +1,47 @@
1
+ module Sisimai
2
+ # Sisimai::Rhost detects the bounce reason from the content of Sisimai::Data
3
+ # object as an argument of get() method when the value of rhost of the object
4
+ # is listed in the results of Sisimai::Rhost->list method.
5
+ # This class is called only Sisimai::Data class.
6
+ module Rhost
7
+ class << self
8
+ # Imported from p5-Sisimail/lib/Sisimai/Rhost.pm
9
+ RhostClass = {
10
+ 'aspmx.l.google.com' => 'GoogleApps',
11
+ }
12
+
13
+ # Retrun the list of remote hosts Sisimai support
14
+ # @return [Array] Remote host list
15
+ def list
16
+ return RhostClass.keys
17
+ end
18
+
19
+ # The value of "rhost" is listed in $RhostClass or not
20
+ # @param [String] argvs Remote host name
21
+ # @return [True,False] True: matched
22
+ # False: did not match
23
+ def match(host)
24
+ return false unless host.is_a? ::String
25
+ return true if RhostClass.key?(host.downcase)
26
+ return false
27
+ end
28
+
29
+ # Detect the bounce reason from certain remote hosts
30
+ # @param [Sisimai::Data] argvs Parsed email object
31
+ # @return [String] The value of bounce reason
32
+ def get(argvs)
33
+ return nil unless argvs
34
+ return nil unless argvs.is_a? Sisimai::Data
35
+ return argvs.reason if argvs.reason.size > 0
36
+
37
+ remotehost = argvs.rhost.downcase
38
+ modulename = 'Sisimai::Rhost::' + RhostClass[remotehost]
39
+ rhostclass = modulename.gsub('::', '/').downcase
40
+ require rhostclass
41
+
42
+ reasontext = Module.const_get(modulename).get(argvs)
43
+ return reasontext
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,237 @@
1
+ module Sisimai
2
+ module Rhost
3
+ # Sisimai::Rhost detects the bounce reason from the content of Sisimai::Data
4
+ # object as an argument of get() method when the value of "rhost" of the object
5
+ # is "aspmx.l.google.com". This class is called only Sisimai::Data class.
6
+ module GoogleApps
7
+ class << self
8
+ # Imported from p5-Sisimail/lib/Sisimai/Rhost/GoogleApps.pm
9
+ SMTPErrorSet = {
10
+ 'X.1.1' => [
11
+ {
12
+ 'reason' => 'userunknown',
13
+ 'regexp' => [%r/The email account that you tried to reach does not exist[.]/],
14
+ }
15
+ ],
16
+ 'X.1.2' => [
17
+ {
18
+ 'reason' => 'hostunknown',
19
+ 'regexp' => [%r/We weren't able to find the recipient domain[.]/],
20
+ },
21
+ ],
22
+ 'X.2.1' => [
23
+ {
24
+ 'reason' => 'undefined',
25
+ 'regexp' => [
26
+ %r/The user you are trying to contact is receiving mail too quickly[.]/,
27
+ %r/The user you are trying to contact is receiving mail at a rate/,
28
+ ],
29
+ },
30
+ {
31
+ 'reason' => 'suspend',
32
+ 'regexp' => [%r/The email account that you tried to reach is disabled[.]/],
33
+ },
34
+ ],
35
+ 'X.2.2' => [
36
+ {
37
+ 'reason' => 'mailboxfull',
38
+ 'regexp' => [%r/The email account that you tried to reach is over quota[.]/],
39
+ },
40
+ ],
41
+ 'X.2.3' => [
42
+ {
43
+ 'reason' => 'exceedlimit',
44
+ 'regexp' => [%r/Your message exceeded Google's message size limits[.]/],
45
+ },
46
+ ],
47
+ 'X.3.0' => [
48
+ {
49
+ 'reason' => 'undefined',
50
+ 'regexp' => [
51
+ %r/Mail server temporarily rejected message[.]/,
52
+ %r/Multiple destination domains per transaction is unsupported[.]/,
53
+ ],
54
+ },
55
+ ],
56
+ 'X.4.2' => [
57
+ {
58
+ 'reason' => 'expired',
59
+ 'regexp' => [%r/Timeout [-] closing connection[.]/],
60
+ },
61
+ ],
62
+ 'X.4.5' => [
63
+ {
64
+ 'reason' => 'undefined',
65
+ 'regexp' => [%r/Server busy, try again later[.]/],
66
+ },
67
+ {
68
+ 'reason' => 'exceedlimit',
69
+ 'regexp' => [%r/Daily sending quota exceeded[.]/],
70
+ },
71
+ ],
72
+ 'X.5.0' => [
73
+ {
74
+ 'reason' => 'undefined',
75
+ 'regexp' => [
76
+ %r/SMTP protocol violation, see RFC 2821[.]/,
77
+ %r/SMTP protocol violation, no commands allowed to pipeline after STARTTLS/,
78
+ ],
79
+ },
80
+ ],
81
+ 'X.5.1' => [
82
+ {
83
+ 'reason' => 'syntaxerror',
84
+ 'regexp' => [
85
+ %r/STARTTLS may not be repeated[.]/,
86
+ %r/Too many unrecognized commands, goodbye[.]/,
87
+ %r/Unimplemented command[.]/,
88
+ %r/Unrecognized command[.]/,
89
+ %r|EHLO/HELO first[.]|,
90
+ %r/MAIL first[.]/,
91
+ %r/RCPT first[.]/,
92
+ ],
93
+ },
94
+ {
95
+ 'reason' => 'securityerror',
96
+ 'regexp' => [%r/Authentication Required[.]/],
97
+ },
98
+ ],
99
+ 'X.5.2' => [
100
+ {
101
+ 'reason' => 'undefined',
102
+ 'regexp' => [%r/Cannot Decode response[.]/],
103
+ },
104
+ {
105
+ 'reason' => 'syntaxerror',
106
+ 'regexp' => [%r/Syntax error[.]/],
107
+ },
108
+ ],
109
+ 'X.5.3' => [
110
+ {
111
+ 'reason' => 'undefined',
112
+ 'regexp' => [
113
+ %r/Domain policy size per transaction exceeded[,]/,
114
+ %r/Your message has too many recipients[.]/,
115
+ ],
116
+ },
117
+ ],
118
+ 'X.5.4' => [
119
+ {
120
+ 'reason' => 'syntaxerror',
121
+ 'regexp' => [%r/Optional Argument not permitted for that AUTH mode[.]/],
122
+ },
123
+ ],
124
+ 'X.6.0' => [
125
+ {
126
+ 'reason' => 'contenterror',
127
+ 'regexp' => [
128
+ %r/Mail message is malformed[.]/,
129
+ %r/Message exceeded 50 hops/,
130
+ ],
131
+ },
132
+ ],
133
+ 'X.7.0' => [
134
+ {
135
+ 'reason' => 'blocked',
136
+ 'regexp' => [
137
+ %r/IP not in whitelist for RCPT domain, closing connection[.]/,
138
+ %r/Our system has detected an unusual rate of unsolicited mail originating from your IP address[.]/,
139
+ ],
140
+ },
141
+ {
142
+ 'reason' => 'expired',
143
+ 'regexp' => [
144
+ %r/Temporary System Problem. Try again later[.]/,
145
+ %r/Try again later, closing connection[.]/,
146
+ ],
147
+ },
148
+ {
149
+ 'reason' => 'securityerror',
150
+ 'regexp' => [
151
+ %r/TLS required for RCPT domain, closing connection[.]/,
152
+ %r/No identity changes permitted[.]/,
153
+ %r/Must issue a STARTTLS command first[.]/,
154
+ %r/Too Many Unauthenticated commands[.]/,
155
+ ],
156
+ },
157
+ {
158
+ 'reason' => 'systemerror',
159
+ 'regexp' => [%r/Cannot authenticate due to temporary system problem[.]/],
160
+ },
161
+ {
162
+ 'reason' => 'norelaying',
163
+ 'regexp' => [%r/Mail relay denied[.]/],
164
+ },
165
+ {
166
+ 'reason' => 'rejected',
167
+ 'regexp' => [%r/Mail Sending denied[.]/],
168
+ },
169
+ ],
170
+ 'X.7.1' => [
171
+ {
172
+ 'reason' => 'securityerror',
173
+ 'regexp' => [
174
+ %r/Application-specific password required[.]/,
175
+ %r/Please log in with your web browser and then try again[.]/,
176
+ %r/Username and Password not accepted[.]/,
177
+ ],
178
+ },
179
+ {
180
+ 'reason' => 'mailboxfull',
181
+ 'regexp' => [%r/Email quota exceeded[.]/],
182
+ },
183
+ {
184
+ 'reason' => 'blocked',
185
+ 'regexp' => [
186
+ %r/Our system has detected an unusual rate of unsolicited mail originating from your IP address[.]/,
187
+ %r/The IP you[']re using to send mail is not authorized to send email directly to our servers[.]/,
188
+ ],
189
+ },
190
+ {
191
+ 'reason' => 'contenterror',
192
+ 'regexp' => [%r/Our system has detected that this message is likely unsolicited mail[.]/],
193
+ },
194
+ {
195
+ 'reason' => 'filtered',
196
+ 'regexp' => [%r/The user or domain that you are sending to [(]or from[)] has a policy/],
197
+ },
198
+ {
199
+ 'reason' => 'rejected',
200
+ 'regexp' => [%r/Unauthenticated email is not accepted from this domain[.]/],
201
+ },
202
+ ],
203
+ 'X.7.4' => [
204
+ {
205
+ 'reason' => 'securityerror',
206
+ 'regexp' => [%r/Unrecognized Authentication Type[.]/],
207
+ },
208
+ ],
209
+ }
210
+
211
+ # Detect bounce reason from Google Apps
212
+ # @param [Sisimai::Data] argvs Parsed email object
213
+ # @return [String] The bounce reason for Google Apps
214
+ # @see https://support.google.com/a/answer/3726730?hl=en
215
+ def get(argvs)
216
+ return nil unless argvs
217
+ return nil unless argvs.is_a? Sisimai::Data
218
+ return argvs.reason if argvs.reason.size > 0
219
+
220
+ statuscode = argvs.deliverystatus.sub(/\A\d[.](\d+[.]\d+)\z/, 'X.\1')
221
+ statusmesg = argvs.diagnosticcode
222
+ reasontext = ''
223
+ errortable = SMTPErrorSet[statuscode] || []
224
+
225
+ errortable.each do |e|
226
+ # Try to match
227
+ next unless e['regexp'].find { |a| statusmesg =~ a }
228
+ reasontext = e['reason']
229
+ break if reasontext.size > 0
230
+ end
231
+ return reasontext
232
+ end
233
+
234
+ end
235
+ end
236
+ end
237
+ end