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,227 @@
1
+ module Sisimai
2
+ module MTA
3
+ # Sisimai::MTA::IMailServer parses a bounce email which created by Ipswitch
4
+ # IMail Server. Methods in the module are called from only Sisimai::Message.
5
+ module IMailServer
6
+ # Imported from p5-Sisimail/lib/Sisimai/MTA/IMailServer.pm
7
+ class << self
8
+ require 'sisimai/mta'
9
+ require 'sisimai/rfc5322'
10
+
11
+ Re0 = {
12
+ :'x-mailer' => %r/\A[<]SMTP32 v[\d.]+[>]\z/,
13
+ :'subject' => %r/\AUndeliverable Mail\z/,
14
+ }
15
+ Re1 = {
16
+ :begin => %r/\A\z/, # Blank line
17
+ :error => %r/Body of message generated response:/,
18
+ :rfc822 => %r/\AOriginal message follows[.]\z/,
19
+ :endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
20
+ }
21
+ ReSMTP = {
22
+ 'conn' => %r{(?:
23
+ SMTP[ ]connection[ ]failed,
24
+ |Unexpected[ ]connection[ ]response[ ]from[ ]server:
25
+ )
26
+ },
27
+ 'ehlo' => %r|Unexpected response to EHLO/HELO:|,
28
+ 'mail' => %r|Server response to MAIL FROM:|,
29
+ 'rcpt' => %r|Additional RCPT TO generated following response:|,
30
+ 'data' => %r|DATA command generated response:|,
31
+ }
32
+ ReFailure = {
33
+ 'hostunknown' => %r{
34
+ Unknown[ ]host
35
+ },
36
+ 'userunknown' => %r{\A(?:
37
+ Unknown[ ]user
38
+ |Invalid[ ]final[ ]delivery[ ]userid # Filtered ?
39
+ )
40
+ }x,
41
+ 'mailboxfull' => %r{
42
+ \AUser[ ]mailbox[ ]exceeds[ ]allowed[ ]size
43
+ }x,
44
+ 'securityerr' => %r{
45
+ \ARequested[ ]action[ ]not[ ]taken:[ ]virus[ ]detected
46
+ }x,
47
+ 'undefined' => %r{
48
+ \Aundeliverable[ ]to[ ]
49
+ }x,
50
+ 'expired' => %r{
51
+ \ADelivery[ ]failed[ ]\d+[ ]attempts
52
+ }x,
53
+ }
54
+ Indicators = Sisimai::MTA.INDICATORS
55
+ LongFields = Sisimai::RFC5322.LONGFIELDS
56
+ RFC822Head = Sisimai::RFC5322.HEADERFIELDS
57
+
58
+ def description; return 'IPSWITCH IMail Server'; end
59
+ def smtpagent; return 'IMailServer'; end
60
+ def headerlist; return ['X-Mailer']; end
61
+ def pattern; return Re0; end
62
+
63
+ # Parse bounce messages from IMailServer
64
+ # @param [Hash] mhead Message header of a bounce email
65
+ # @options mhead [String] from From header
66
+ # @options mhead [String] date Date header
67
+ # @options mhead [String] subject Subject header
68
+ # @options mhead [Array] received Received headers
69
+ # @options mhead [String] others Other required headers
70
+ # @param [String] mbody Message body of a bounce email
71
+ # @return [Hash, Nil] Bounce data list and message/rfc822
72
+ # part or nil if it failed to parse or
73
+ # the arguments are missing
74
+ def scan(mhead, mbody)
75
+ return nil unless mhead
76
+ return nil unless mbody
77
+
78
+ match = 0
79
+ match += 1 if mhead['subject'] =~ Re0[:subject]
80
+ match += 1 if mhead['x-mailer'] && mhead['x-mailer'] =~ Re0[:'x-mailer']
81
+ return nil if match == 0
82
+
83
+ dscontents = []; dscontents << Sisimai::MTA.DELIVERYSTATUS
84
+ hasdivided = mbody.split("\n")
85
+ rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
86
+ rfc822part = '' # (String) message/rfc822-headers part
87
+ previousfn = '' # (String) Previous field name
88
+ readcursor = 0 # (Integer) Points the current cursor position
89
+ recipients = 0 # (Integer) The number of 'Final-Recipient' header
90
+ v = nil
91
+
92
+ hasdivided.each do |e|
93
+ if readcursor == 0
94
+ # Beginning of the bounce message or delivery status part
95
+ if e =~ Re1[:begin]
96
+ readcursor |= Indicators[:'deliverystatus']
97
+ next
98
+ end
99
+ end
100
+
101
+ if readcursor & Indicators[:'message-rfc822'] == 0
102
+ # Beginning of the original message part
103
+ if e =~ Re1[:rfc822]
104
+ readcursor |= Indicators[:'message-rfc822']
105
+ next
106
+ end
107
+ end
108
+
109
+ if readcursor & Indicators[:'message-rfc822'] > 0
110
+ # After "message/rfc822"
111
+ if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*.+\z/)
112
+ # Get required headers only
113
+ lhs = cv[1].downcase
114
+ previousfn = ''
115
+ next unless RFC822Head.key?(lhs)
116
+
117
+ previousfn = lhs
118
+ rfc822part += e + "\n"
119
+
120
+ elsif e =~ /\A[ \t]+/
121
+ # Continued line from the previous line
122
+ next if rfc822next[previousfn]
123
+ rfc822part += e + "\n" if LongFields.key?(previousfn)
124
+
125
+ else
126
+ # Check the end of headers in rfc822 part
127
+ next unless LongFields.key?(previousfn)
128
+ next unless e.empty?
129
+ rfc822next[previousfn] = true
130
+ end
131
+
132
+ else
133
+ # Before "message/rfc822"
134
+ break if readcursor & Indicators[:'message-rfc822'] > 0
135
+
136
+ # Unknown user: kijitora@example.com
137
+ #
138
+ # Original message follows.
139
+ v = dscontents[-1]
140
+
141
+ if cv = e.match(/\A(.+)[ ](.+)[:][ \t]*([^ ]+[@][^ ]+)\z/)
142
+ # Unknown user: kijitora@example.com
143
+ if v['recipient']
144
+ # There are multiple recipient addresses in the message body.
145
+ dscontents << Sisimai::MTA.DELIVERYSTATUS
146
+ v = dscontents[-1]
147
+ end
148
+ v['diagnosis'] = cv[1] + ' ' + cv[2]
149
+ v['recipient'] = cv[3]
150
+ recipients += 1
151
+
152
+ elsif cv = e.match(/\Aundeliverable[ ]+to[ ]+(.+)\z/)
153
+ # undeliverable to kijitora@example.com
154
+ if v['recipient']
155
+ # There are multiple recipient addresses in the message body.
156
+ dscontents << Sisimai::MTA.DELIVERYSTATUS
157
+ v = dscontents[-1]
158
+ end
159
+ v['recipient'] = cv[1]
160
+ recipients += 1
161
+
162
+ else
163
+ # Other error message text
164
+ v['alterrors'] += ' ' + e if v['alterrors']
165
+ if e =~ Re1[:error]
166
+ # Body of message generated response:
167
+ v['alterrors'] = e
168
+ end
169
+ end
170
+ end
171
+ end
172
+
173
+ return nil if recipients == 0
174
+ require 'sisimai/string'
175
+ require 'sisimai/smtp/status'
176
+
177
+ dscontents.map do |e|
178
+ # Set default values if each value is empty.
179
+ e['agent'] = Sisimai::MTA::IMailServer.smtpagent
180
+
181
+ if mhead['received'].size > 0
182
+ # Get localhost and remote host name from Received header.
183
+ r0 = mhead['received']
184
+ %w|lhost rhost|.each { |a| e[a] ||= '' }
185
+ e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
186
+ e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
187
+ end
188
+
189
+ if e['alterrors'] && e['alterrors'].size > 0
190
+ # Copy alternative error message
191
+ if e['diagnosis']
192
+ e['diagnosis'] = e['alterrors'] + ' ' + e['diagnosis']
193
+ else
194
+ e['diagnosis'] = e['alterrors']
195
+ end
196
+ e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
197
+ e.delete('alterrors')
198
+ end
199
+ e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
200
+
201
+ ReSMTP.each_key do |r|
202
+ # Detect SMTP command from the message
203
+ next unless e['diagnosis'] =~ ReSMTP[r]
204
+ e['command'] = r.upcase
205
+ break
206
+ end
207
+
208
+ ReFailure.each_key do |r|
209
+ # Verify each regular expression of session errors
210
+ next unless e['diagnosis'] =~ ReFailure[r]
211
+ e['reason'] = r
212
+ break
213
+ end
214
+
215
+ e['status'] = Sisimai::SMTP::Status.find(e['diagnosis'])
216
+ e['spec'] = e['reason'] == 'mailererror' ? 'X-UNIX' : 'SMTP'
217
+ e['action'] = 'failed' if e['status'] =~ /\A[45]/
218
+ e.each_key { |a| e[a] ||= '' }
219
+ end
220
+
221
+ return { 'ds' => dscontents, 'rfc822' => rfc822part }
222
+ end
223
+
224
+ end
225
+ end
226
+ end
227
+ end
@@ -0,0 +1,167 @@
1
+ module Sisimai
2
+ module MTA
3
+ # Sisimai::MTA::InterScanMSS parses a bounce email which created by Trend
4
+ # Micro InterScan Messaging Security Suite. Methods in the module are called
5
+ # from only Sisimai::Message.
6
+ module InterScanMSS
7
+ # Imported from p5-Sisimail/lib/Sisimai/MTA/InterScanMSS.pm
8
+ class << self
9
+ require 'sisimai/mta'
10
+ require 'sisimai/rfc5322'
11
+
12
+ Re0 = {
13
+ :from => %r/InterScan MSS/,
14
+ :received => %r/[ ][(]InterScanMSS[)][ ]with[ ]/,
15
+ :subject => [
16
+ 'Mail could not be delivered',
17
+ # メッセージを配信できません。
18
+ '=?iso-2022-jp?B?GyRCJWElQyU7ITwlOCRyR1s/LiRHJC0kXiQ7JHMhIxsoQg==?=',
19
+ # メール配信に失敗しました
20
+ '=?iso-2022-jp?B?GyRCJWEhPCVrR1s/LiRLPDpHVCQ3JF4kNyQ/GyhCDQo=?=',
21
+ ],
22
+ }
23
+ Re1 = {
24
+ :begin => %r|\AContent-type: text/plain|,
25
+ :rfc822 => %r|\AContent-type: message/rfc822|,
26
+ :endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
27
+ }
28
+ Indicators = Sisimai::MTA.INDICATORS
29
+ LongFields = Sisimai::RFC5322.LONGFIELDS
30
+ RFC822Head = Sisimai::RFC5322.HEADERFIELDS
31
+
32
+ def description; return 'Trend Micro InterScan Messaging Security Suite'; end
33
+ def smtpagent; return 'InterScanMSS'; end
34
+ def headerlist; return []; end
35
+ def pattern; return Re0; end
36
+
37
+ # Parse bounce messages from InterScanMSS
38
+ # @param [Hash] mhead Message header of a bounce email
39
+ # @options mhead [String] from From header
40
+ # @options mhead [String] date Date header
41
+ # @options mhead [String] subject Subject header
42
+ # @options mhead [Array] received Received headers
43
+ # @options mhead [String] others Other required headers
44
+ # @param [String] mbody Message body of a bounce email
45
+ # @return [Hash, Nil] Bounce data list and message/rfc822
46
+ # part or nil if it failed to parse or
47
+ # the arguments are missing
48
+ def scan(mhead, mbody)
49
+ return nil unless mhead
50
+ return nil unless mbody
51
+
52
+ match = 0
53
+ match += 1 if mhead['from'] =~ Re0[:from]
54
+ match += 1 if Re0[:subject].find { |a| mhead['subject'] == a }
55
+ return nil if match == 0
56
+
57
+ dscontents = []; dscontents << Sisimai::MTA.DELIVERYSTATUS
58
+ hasdivided = mbody.split("\n")
59
+ rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
60
+ rfc822part = '' # (String) message/rfc822-headers part
61
+ previousfn = '' # (String) Previous field name
62
+ readcursor = 0 # (Integer) Points the current cursor position
63
+ recipients = 0 # (Integer) The number of 'Final-Recipient' header
64
+ v = nil
65
+
66
+ hasdivided.each do |e|
67
+ if readcursor == 0
68
+ # Beginning of the bounce message or delivery status part
69
+ if e =~ Re1[:begin]
70
+ readcursor |= Indicators[:'deliverystatus']
71
+ next
72
+ end
73
+ end
74
+
75
+ if readcursor & Indicators[:'message-rfc822'] == 0
76
+ # Beginning of the original message part
77
+ if e =~ Re1[:rfc822]
78
+ readcursor |= Indicators[:'message-rfc822']
79
+ next
80
+ end
81
+ end
82
+
83
+ if readcursor & Indicators[:'message-rfc822'] > 0
84
+ # After "message/rfc822"
85
+ if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*.+\z/)
86
+ # Get required headers only
87
+ lhs = cv[1].downcase
88
+ previousfn = ''
89
+ next unless RFC822Head.key?(lhs)
90
+
91
+ previousfn = lhs
92
+ rfc822part += e + "\n"
93
+
94
+ elsif e =~ /\A[ \t]+/
95
+ # Continued line from the previous line
96
+ next if rfc822next[previousfn]
97
+ rfc822part += e + "\n" if LongFields.key?(previousfn)
98
+
99
+ else
100
+ # Check the end of headers in rfc822 part
101
+ next unless LongFields.key?(previousfn)
102
+ next unless e.empty?
103
+ rfc822next[previousfn] = true
104
+ end
105
+
106
+ else
107
+ # Before "message/rfc822"
108
+ next if readcursor & Indicators[:'deliverystatus'] == 0
109
+ next if e.empty?
110
+
111
+ # Sent <<< RCPT TO:<kijitora@example.co.jp>
112
+ # Received >>> 550 5.1.1 <kijitora@example.co.jp>... user unknown
113
+ v = dscontents[-1]
114
+
115
+ if cv = e.match(/\A.+[<>]{3}[ \t]+.+[<]([^ ]+[@][^ ]+)[>]\z/) ||
116
+ cv = e.match(/\A.+[<>]{3}[ \t]+.+[<]([^ ]+[@][^ ]+)[>]/)
117
+ # Sent <<< RCPT TO:<kijitora@example.co.jp>
118
+ # Received >>> 550 5.1.1 <kijitora@example.co.jp>... user unknown
119
+ cr = cv[1]
120
+ if v['recipient'] && cr != v['recipient']
121
+ # There are multiple recipient addresses in the message body.
122
+ dscontents << Sisimai::MTA.DELIVERYSTATUS
123
+ v = dscontents[-1]
124
+ end
125
+ v['recipient'] = cr
126
+ recipients = dscontents.size
127
+ end
128
+
129
+ if cv = e.match(/\ASent[ ]+[<]{3}[ ]+([A-Z]{4})[ ]/)
130
+ # Sent <<< RCPT TO:<kijitora@example.co.jp>
131
+ v['command'] = cv[1]
132
+
133
+ elsif cv = e.match(/\AReceived[ ]+[>]{3}[ ]+(\d{3}[ ]+.+)\z/)
134
+ # Received >>> 550 5.1.1 <kijitora@example.co.jp>... user unknown
135
+ v['diagnosis'] = cv[1]
136
+ end
137
+ end
138
+ end
139
+
140
+ return nil if recipients == 0
141
+ require 'sisimai/string'
142
+ require 'sisimai/smtp/status'
143
+
144
+ dscontents.map do |e|
145
+ e['agent'] = Sisimai::MTA::InterScanMSS.smtpagent
146
+ if mhead['received'].size > 0
147
+ # Get localhost and remote host name from Received header.
148
+ r0 = mhead['received']
149
+ %w|lhost rhost|.each { |a| e[a] ||= '' }
150
+ e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
151
+ e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
152
+ end
153
+ e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
154
+ e['status'] = Sisimai::SMTP::Status.find(e['diagnosis'])
155
+ e['spec'] = e['reason'] == 'mailererror' ? 'X-UNIX' : 'SMTP'
156
+ e['action'] = 'failed' if e['status'] =~ /\A[45]/
157
+ e.each_key { |a| e[a] ||= '' }
158
+ end
159
+
160
+ return { 'ds' => dscontents, 'rfc822' => rfc822part }
161
+ end
162
+
163
+ end
164
+ end
165
+ end
166
+ end
167
+
@@ -0,0 +1,173 @@
1
+ module Sisimai
2
+ module MTA
3
+ # Sisimai::MTA::MailFoundry parses a bounce email which created by MailFoundry.
4
+ # Methods in the module are called from only Sisimai::Message.
5
+ module MailFoundry
6
+ # Imported from p5-Sisimail/lib/Sisimai/MTA/MailFoundry.pm
7
+ class << self
8
+ require 'sisimai/mta'
9
+ require 'sisimai/rfc5322'
10
+
11
+ Re0 = {
12
+ :subject => %r/\AMessage delivery has failed\z/,
13
+ :received => %r/[(]MAILFOUNDRY[)] id /,
14
+ }
15
+ Re1 = {
16
+ :begin => %r/\AThis is a MIME encoded message\z/,
17
+ :error => %r/\ADelivery failed for the following reason:\z/,
18
+ :rfc822 => %r|\AContent-Type: message/rfc822\z|,
19
+ :endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
20
+ }
21
+ Indicators = Sisimai::MTA.INDICATORS
22
+ LongFields = Sisimai::RFC5322.LONGFIELDS
23
+ RFC822Head = Sisimai::RFC5322.HEADERFIELDS
24
+
25
+ def description; return 'MailFoundry'; end
26
+ def smtpagent; return 'MailFoundry'; end
27
+ def headerlist; return []; end
28
+ def pattern; return Re0; end
29
+
30
+ # Parse bounce messages from MailFoundry
31
+ # @param [Hash] mhead Message header of a bounce email
32
+ # @options mhead [String] from From header
33
+ # @options mhead [String] date Date header
34
+ # @options mhead [String] subject Subject header
35
+ # @options mhead [Array] received Received headers
36
+ # @options mhead [String] others Other required headers
37
+ # @param [String] mbody Message body of a bounce email
38
+ # @return [Hash, Nil] Bounce data list and message/rfc822
39
+ # part or nil if it failed to parse or
40
+ # the arguments are missing
41
+ def scan(mhead, mbody)
42
+ return nil unless mhead
43
+ return nil unless mbody
44
+ return nil unless mhead['subject'] =~ Re0[:subject]
45
+ return nil unless mhead['received'].find { |a| a =~ Re0[:received] }
46
+
47
+ dscontents = []; dscontents << Sisimai::MTA.DELIVERYSTATUS
48
+ hasdivided = mbody.split("\n")
49
+ rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
50
+ rfc822part = '' # (String) message/rfc822-headers part
51
+ previousfn = '' # (String) Previous field name
52
+ readcursor = 0 # (Integer) Points the current cursor position
53
+ recipients = 0 # (Integer) The number of 'Final-Recipient' header
54
+ v = nil
55
+
56
+ hasdivided.each do |e|
57
+ if readcursor == 0
58
+ # Beginning of the bounce message or delivery status part
59
+ if e =~ Re1[:begin]
60
+ readcursor |= Indicators[:'deliverystatus']
61
+ next
62
+ end
63
+ end
64
+
65
+ if readcursor & Indicators[:'message-rfc822'] == 0
66
+ # Beginning of the original message part
67
+ if e =~ Re1[:rfc822]
68
+ readcursor |= Indicators[:'message-rfc822']
69
+ next
70
+ end
71
+ end
72
+
73
+ if readcursor & Indicators[:'message-rfc822'] > 0
74
+ # After "message/rfc822"
75
+ if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*.+\z/)
76
+ # Get required headers only
77
+ lhs = cv[1].downcase
78
+ previousfn = ''
79
+ next unless RFC822Head.key?(lhs)
80
+
81
+ previousfn = lhs
82
+ rfc822part += e + "\n"
83
+
84
+ elsif e =~ /\A[ \t]+/
85
+ # Continued line from the previous line
86
+ next if rfc822next[previousfn]
87
+ rfc822part += e + "\n" if LongFields.key?(previousfn)
88
+
89
+ else
90
+ # Check the end of headers in rfc822 part
91
+ next unless LongFields.key?(previousfn)
92
+ next unless e.empty?
93
+ rfc822next[previousfn] = true
94
+ end
95
+
96
+ else
97
+ # Before "message/rfc822"
98
+ next if readcursor & Indicators[:'deliverystatus'] == 0
99
+ next if e.empty?
100
+
101
+ # Unable to deliver message to: <kijitora@example.org>
102
+ # Delivery failed for the following reason:
103
+ # Server mx22.example.org[192.0.2.222] failed with: 550 <kijitora@example.org> No such user here
104
+ #
105
+ # This has been a permanent failure. No further delivery attempts will be made.
106
+ v = dscontents[-1]
107
+
108
+ if cv = e.match(/\AUnable to deliver message to: [<]([^ ]+[@][^ ]+)[>]\z/)
109
+ # Unable to deliver message to: <kijitora@example.org>
110
+ if v['recipient']
111
+ # There are multiple recipient addresses in the message body.
112
+ dscontents << Sisimai::MTA.DELIVERYSTATUS
113
+ v = dscontents[-1]
114
+ end
115
+ v['recipient'] = cv[1]
116
+ recipients += 1
117
+
118
+ else
119
+ # Error message
120
+ if e =~ Re1[:error]
121
+ # Delivery failed for the following reason:
122
+ v['diagnosis'] = e
123
+
124
+ else
125
+ # Detect error message
126
+ next if e.empty?
127
+ next if v['diagnosis'].nil? || v['diagnosis'].empty?
128
+ next if e =~ /\A[-]+/
129
+
130
+ if e =~ /\AThis has been a permanent failure/
131
+ # This has been a permanent failure. No further delivery attempts will be made.
132
+ v['softbounce'] = 0
133
+
134
+ else
135
+ # Server mx22.example.org[192.0.2.222] failed with: 550 <kijitora@example.org> No such user here
136
+ v['diagnosis'] ||= ''
137
+ v['diagnosis'] += ' ' + e
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
143
+
144
+ return nil if recipients == 0
145
+ require 'sisimai/string'
146
+ require 'sisimai/smtp/status'
147
+
148
+ dscontents.map do |e|
149
+ e['agent'] = Sisimai::MTA::MailFoundry.smtpagent
150
+
151
+ if mhead['received'].size > 0
152
+ # Get localhost and remote host name from Received header.
153
+ r0 = mhead['received']
154
+ %w|lhost rhost|.each { |a| e[a] ||= '' }
155
+ e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
156
+ e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
157
+ end
158
+ e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
159
+
160
+ e['status'] = Sisimai::SMTP::Status.find(e['diagnosis'])
161
+ e['spec'] = e['reason'] == 'mailererror' ? 'X-UNIX' : 'SMTP'
162
+ e['action'] = 'failed' if e['status'] =~ /\A[45]/
163
+ e.each_key { |a| e[a] ||= '' }
164
+ end
165
+
166
+ return { 'ds' => dscontents, 'rfc822' => rfc822part }
167
+ end
168
+
169
+ end
170
+ end
171
+ end
172
+ end
173
+