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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.rubocop.yml +182 -0
- data/.travis.yml +18 -0
- data/ANALYTICAL-PRECISION +56 -0
- data/Changes +36 -0
- data/Developers.mk +129 -0
- data/Gemfile +15 -0
- data/LICENSE +25 -0
- data/Makefile +70 -0
- data/README.md +361 -0
- data/Rakefile +12 -0
- data/Repository.mk +69 -0
- data/appveyor.yml +23 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/sisimai.rb +95 -0
- data/lib/sisimai/address.rb +224 -0
- data/lib/sisimai/arf.rb +338 -0
- data/lib/sisimai/data.rb +409 -0
- data/lib/sisimai/data/json.rb +40 -0
- data/lib/sisimai/data/yaml.rb +32 -0
- data/lib/sisimai/datetime.rb +511 -0
- data/lib/sisimai/mail.rb +82 -0
- data/lib/sisimai/mail/maildir.rb +82 -0
- data/lib/sisimai/mail/mbox.rb +69 -0
- data/lib/sisimai/mail/stdin.rb +53 -0
- data/lib/sisimai/mda.rb +152 -0
- data/lib/sisimai/message.rb +525 -0
- data/lib/sisimai/mime.rb +127 -0
- data/lib/sisimai/msp.rb +54 -0
- data/lib/sisimai/msp/de/einsundeins.rb +174 -0
- data/lib/sisimai/msp/de/gmx.rb +197 -0
- data/lib/sisimai/msp/jp/biglobe.rb +179 -0
- data/lib/sisimai/msp/jp/ezweb.rb +292 -0
- data/lib/sisimai/msp/jp/kddi.rb +195 -0
- data/lib/sisimai/msp/ru/mailru.rb +306 -0
- data/lib/sisimai/msp/ru/yandex.rb +241 -0
- data/lib/sisimai/msp/uk/messagelabs.rb +250 -0
- data/lib/sisimai/msp/us/amazonses.rb +248 -0
- data/lib/sisimai/msp/us/amazonworkmail.rb +224 -0
- data/lib/sisimai/msp/us/aol.rb +234 -0
- data/lib/sisimai/msp/us/bigfoot.rb +243 -0
- data/lib/sisimai/msp/us/facebook.rb +306 -0
- data/lib/sisimai/msp/us/google.rb +357 -0
- data/lib/sisimai/msp/us/office365.rb +273 -0
- data/lib/sisimai/msp/us/outlook.rb +242 -0
- data/lib/sisimai/msp/us/receivingses.rb +247 -0
- data/lib/sisimai/msp/us/sendgrid.rb +257 -0
- data/lib/sisimai/msp/us/verizon.rb +311 -0
- data/lib/sisimai/msp/us/yahoo.rb +178 -0
- data/lib/sisimai/msp/us/zoho.rb +198 -0
- data/lib/sisimai/mta.rb +54 -0
- data/lib/sisimai/mta/activehunter.rb +155 -0
- data/lib/sisimai/mta/apachejames.rb +194 -0
- data/lib/sisimai/mta/courier.rb +307 -0
- data/lib/sisimai/mta/domino.rb +209 -0
- data/lib/sisimai/mta/exchange.rb +314 -0
- data/lib/sisimai/mta/exim.rb +549 -0
- data/lib/sisimai/mta/imailserver.rb +227 -0
- data/lib/sisimai/mta/interscanmss.rb +167 -0
- data/lib/sisimai/mta/mailfoundry.rb +173 -0
- data/lib/sisimai/mta/mailmarshalsmtp.rb +206 -0
- data/lib/sisimai/mta/mcafee.rb +201 -0
- data/lib/sisimai/mta/messagingserver.rb +241 -0
- data/lib/sisimai/mta/mfilter.rb +190 -0
- data/lib/sisimai/mta/mxlogic.rb +283 -0
- data/lib/sisimai/mta/notes.rb +206 -0
- data/lib/sisimai/mta/opensmtpd.rb +225 -0
- data/lib/sisimai/mta/postfix.rb +306 -0
- data/lib/sisimai/mta/qmail.rb +335 -0
- data/lib/sisimai/mta/sendmail.rb +317 -0
- data/lib/sisimai/mta/surfcontrol.rb +193 -0
- data/lib/sisimai/mta/userdefined.rb +148 -0
- data/lib/sisimai/mta/v5sendmail.rb +232 -0
- data/lib/sisimai/mta/x1.rb +156 -0
- data/lib/sisimai/mta/x2.rb +157 -0
- data/lib/sisimai/mta/x3.rb +171 -0
- data/lib/sisimai/mta/x4.rb +365 -0
- data/lib/sisimai/mta/x5.rb +208 -0
- data/lib/sisimai/order.rb +220 -0
- data/lib/sisimai/reason.rb +234 -0
- data/lib/sisimai/reason/blocked.rb +105 -0
- data/lib/sisimai/reason/contenterror.rb +53 -0
- data/lib/sisimai/reason/exceedlimit.rb +60 -0
- data/lib/sisimai/reason/expired.rb +53 -0
- data/lib/sisimai/reason/filtered.rb +98 -0
- data/lib/sisimai/reason/hasmoved.rb +45 -0
- data/lib/sisimai/reason/hostunknown.rb +79 -0
- data/lib/sisimai/reason/mailboxfull.rb +118 -0
- data/lib/sisimai/reason/mailererror.rb +55 -0
- data/lib/sisimai/reason/mesgtoobig.rb +82 -0
- data/lib/sisimai/reason/networkerror.rb +58 -0
- data/lib/sisimai/reason/norelaying.rb +71 -0
- data/lib/sisimai/reason/notaccept.rb +63 -0
- data/lib/sisimai/reason/onhold.rb +45 -0
- data/lib/sisimai/reason/rejected.rb +101 -0
- data/lib/sisimai/reason/securityerror.rb +72 -0
- data/lib/sisimai/reason/spamdetected.rb +172 -0
- data/lib/sisimai/reason/suspend.rb +58 -0
- data/lib/sisimai/reason/systemerror.rb +69 -0
- data/lib/sisimai/reason/systemfull.rb +45 -0
- data/lib/sisimai/reason/toomanyconn.rb +73 -0
- data/lib/sisimai/reason/userunknown.rb +194 -0
- data/lib/sisimai/rfc2606.rb +24 -0
- data/lib/sisimai/rfc3464.rb +497 -0
- data/lib/sisimai/rfc3834.rb +150 -0
- data/lib/sisimai/rfc5322.rb +204 -0
- data/lib/sisimai/rhost.rb +47 -0
- data/lib/sisimai/rhost/googleapps.rb +237 -0
- data/lib/sisimai/smtp.rb +58 -0
- data/lib/sisimai/smtp/reply.rb +84 -0
- data/lib/sisimai/smtp/status.rb +758 -0
- data/lib/sisimai/string.rb +65 -0
- data/lib/sisimai/time.rb +11 -0
- data/lib/sisimai/version.rb +4 -0
- data/set-of-emails/README.md +35 -0
- data/set-of-emails/mailbox/mbox-0 +2467 -0
- data/set-of-emails/mailbox/mbox-1 +71 -0
- data/set-of-emails/maildir/bsd/README.md +261 -0
- data/set-of-emails/maildir/bsd/activehunter-01.eml +54 -0
- data/set-of-emails/maildir/bsd/activehunter-02.eml +53 -0
- data/set-of-emails/maildir/bsd/apachejames-01.eml +46 -0
- data/set-of-emails/maildir/bsd/arf-01.eml +66 -0
- data/set-of-emails/maildir/bsd/arf-02.eml +68 -0
- data/set-of-emails/maildir/bsd/arf-03.eml +56 -0
- data/set-of-emails/maildir/bsd/arf-04.eml +89 -0
- data/set-of-emails/maildir/bsd/arf-05.eml +82 -0
- data/set-of-emails/maildir/bsd/arf-06.eml +166 -0
- data/set-of-emails/maildir/bsd/arf-07.eml +59 -0
- data/set-of-emails/maildir/bsd/arf-08.eml +103 -0
- data/set-of-emails/maildir/bsd/arf-09.eml +104 -0
- data/set-of-emails/maildir/bsd/arf-10.eml +56 -0
- data/set-of-emails/maildir/bsd/arf-11.eml +37 -0
- data/set-of-emails/maildir/bsd/arf-12.eml +40 -0
- data/set-of-emails/maildir/bsd/arf-13.eml +76 -0
- data/set-of-emails/maildir/bsd/arf-14.eml +333 -0
- data/set-of-emails/maildir/bsd/arf-15.eml +66 -0
- data/set-of-emails/maildir/bsd/courier-01.eml +79 -0
- data/set-of-emails/maildir/bsd/courier-02.eml +83 -0
- data/set-of-emails/maildir/bsd/courier-03.eml +85 -0
- data/set-of-emails/maildir/bsd/courier-04.eml +87 -0
- data/set-of-emails/maildir/bsd/de-einsundeins-01.eml +38 -0
- data/set-of-emails/maildir/bsd/de-gmx-01.eml +52 -0
- data/set-of-emails/maildir/bsd/de-gmx-02.eml +51 -0
- data/set-of-emails/maildir/bsd/de-gmx-03.eml +56 -0
- data/set-of-emails/maildir/bsd/de-gmx-04.eml +51 -0
- data/set-of-emails/maildir/bsd/domino-01.eml +33 -0
- data/set-of-emails/maildir/bsd/domino-02.eml +83 -0
- data/set-of-emails/maildir/bsd/exchange-01.eml +31 -0
- data/set-of-emails/maildir/bsd/exchange-02.eml +67 -0
- data/set-of-emails/maildir/bsd/exchange-03.eml +52 -0
- data/set-of-emails/maildir/bsd/exchange-04.eml +28 -0
- data/set-of-emails/maildir/bsd/exchange-05.eml +56 -0
- data/set-of-emails/maildir/bsd/exchange-06.eml +151 -0
- data/set-of-emails/maildir/bsd/exim-01.eml +46 -0
- data/set-of-emails/maildir/bsd/exim-02.eml +41 -0
- data/set-of-emails/maildir/bsd/exim-03.eml +42 -0
- data/set-of-emails/maildir/bsd/exim-04.eml +46 -0
- data/set-of-emails/maildir/bsd/exim-05.eml +49 -0
- data/set-of-emails/maildir/bsd/exim-06.eml +44 -0
- data/set-of-emails/maildir/bsd/exim-07.eml +28 -0
- data/set-of-emails/maildir/bsd/exim-08.eml +42 -0
- data/set-of-emails/maildir/bsd/exim-09.eml +169 -0
- data/set-of-emails/maildir/bsd/exim-10.eml +718 -0
- data/set-of-emails/maildir/bsd/exim-11.eml +718 -0
- data/set-of-emails/maildir/bsd/exim-12.eml +75 -0
- data/set-of-emails/maildir/bsd/exim-13.eml +145 -0
- data/set-of-emails/maildir/bsd/exim-14.eml +32 -0
- data/set-of-emails/maildir/bsd/exim-15.eml +49 -0
- data/set-of-emails/maildir/bsd/exim-16.eml +98 -0
- data/set-of-emails/maildir/bsd/exim-17.eml +50 -0
- data/set-of-emails/maildir/bsd/exim-18.eml +96 -0
- data/set-of-emails/maildir/bsd/exim-19.eml +52 -0
- data/set-of-emails/maildir/bsd/exim-20.eml +159 -0
- data/set-of-emails/maildir/bsd/exim-21.eml +150 -0
- data/set-of-emails/maildir/bsd/exim-22.eml +50 -0
- data/set-of-emails/maildir/bsd/exim-23.eml +57 -0
- data/set-of-emails/maildir/bsd/exim-24.eml +107 -0
- data/set-of-emails/maildir/bsd/exim-25.eml +18 -0
- data/set-of-emails/maildir/bsd/exim-26.eml +111 -0
- data/set-of-emails/maildir/bsd/exim-27.eml +120 -0
- data/set-of-emails/maildir/bsd/exim-28.eml +148 -0
- data/set-of-emails/maildir/bsd/google-apps-01.eml +66 -0
- data/set-of-emails/maildir/bsd/imailserver-01.eml +27 -0
- data/set-of-emails/maildir/bsd/imailserver-02.eml +36 -0
- data/set-of-emails/maildir/bsd/imailserver-03.eml +28 -0
- data/set-of-emails/maildir/bsd/imailserver-04.eml +15 -0
- data/set-of-emails/maildir/bsd/imailserver-05.eml +92 -0
- data/set-of-emails/maildir/bsd/imailserver-06.eml +29 -0
- data/set-of-emails/maildir/bsd/interscanmss-01.eml +49 -0
- data/set-of-emails/maildir/bsd/interscanmss-02.eml +259 -0
- data/set-of-emails/maildir/bsd/jp-biglobe-01.eml +43 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-01.eml +36 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-02.eml +65 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-03.eml +35 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-04.eml +38 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-05.eml +38 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-06.eml +33 -0
- data/set-of-emails/maildir/bsd/jp-kddi-01.eml +49 -0
- data/set-of-emails/maildir/bsd/jp-kddi-02.eml +54 -0
- data/set-of-emails/maildir/bsd/jp-kddi-03.eml +54 -0
- data/set-of-emails/maildir/bsd/mailfoundry-01.eml +50 -0
- data/set-of-emails/maildir/bsd/mailfoundry-02.eml +49 -0
- data/set-of-emails/maildir/bsd/mailmarshalsmtp-01.eml +43 -0
- data/set-of-emails/maildir/bsd/mcafee-01.eml +63 -0
- data/set-of-emails/maildir/bsd/mcafee-02.eml +65 -0
- data/set-of-emails/maildir/bsd/mcafee-03.eml +59 -0
- data/set-of-emails/maildir/bsd/messagingserver-01.eml +102 -0
- data/set-of-emails/maildir/bsd/messagingserver-02.eml +72 -0
- data/set-of-emails/maildir/bsd/messagingserver-03.eml +70 -0
- data/set-of-emails/maildir/bsd/messagingserver-04.eml +102 -0
- data/set-of-emails/maildir/bsd/messagingserver-05.eml +98 -0
- data/set-of-emails/maildir/bsd/messagingserver-06.eml +101 -0
- data/set-of-emails/maildir/bsd/messagingserver-07.eml +129 -0
- data/set-of-emails/maildir/bsd/mfilter-01.eml +49 -0
- data/set-of-emails/maildir/bsd/mfilter-02.eml +48 -0
- data/set-of-emails/maildir/bsd/mfilter-03.eml +43 -0
- data/set-of-emails/maildir/bsd/mxlogic-01.eml +47 -0
- data/set-of-emails/maildir/bsd/mxlogic-02.eml +44 -0
- data/set-of-emails/maildir/bsd/mxlogic-03.eml +46 -0
- data/set-of-emails/maildir/bsd/notes-01.eml +42 -0
- data/set-of-emails/maildir/bsd/notes-02.eml +42 -0
- data/set-of-emails/maildir/bsd/notes-03.eml +38 -0
- data/set-of-emails/maildir/bsd/notes-04.eml +181 -0
- data/set-of-emails/maildir/bsd/opensmtpd-01.eml +33 -0
- data/set-of-emails/maildir/bsd/opensmtpd-02.eml +33 -0
- data/set-of-emails/maildir/bsd/opensmtpd-03.eml +36 -0
- data/set-of-emails/maildir/bsd/opensmtpd-04.eml +40 -0
- data/set-of-emails/maildir/bsd/opensmtpd-05.eml +36 -0
- data/set-of-emails/maildir/bsd/postfix-01.eml +60 -0
- data/set-of-emails/maildir/bsd/postfix-02.eml +78 -0
- data/set-of-emails/maildir/bsd/postfix-03.eml +71 -0
- data/set-of-emails/maildir/bsd/postfix-04.eml +89 -0
- data/set-of-emails/maildir/bsd/postfix-05.eml +78 -0
- data/set-of-emails/maildir/bsd/postfix-06.eml +72 -0
- data/set-of-emails/maildir/bsd/postfix-07.eml +74 -0
- data/set-of-emails/maildir/bsd/postfix-08.eml +78 -0
- data/set-of-emails/maildir/bsd/postfix-09.eml +76 -0
- data/set-of-emails/maildir/bsd/postfix-10.eml +73 -0
- data/set-of-emails/maildir/bsd/postfix-11.eml +86 -0
- data/set-of-emails/maildir/bsd/postfix-12.eml +71 -0
- data/set-of-emails/maildir/bsd/postfix-13.eml +81 -0
- data/set-of-emails/maildir/bsd/postfix-14.eml +68 -0
- data/set-of-emails/maildir/bsd/postfix-15.eml +69 -0
- data/set-of-emails/maildir/bsd/postfix-16.eml +73 -0
- data/set-of-emails/maildir/bsd/postfix-17.eml +68 -0
- data/set-of-emails/maildir/bsd/postfix-18.eml +121 -0
- data/set-of-emails/maildir/bsd/postfix-19.eml +105 -0
- data/set-of-emails/maildir/bsd/postfix-20.eml +231 -0
- data/set-of-emails/maildir/bsd/postfix-21.eml +60 -0
- data/set-of-emails/maildir/bsd/qmail-01.eml +40 -0
- data/set-of-emails/maildir/bsd/qmail-02.eml +35 -0
- data/set-of-emails/maildir/bsd/qmail-03.eml +22 -0
- data/set-of-emails/maildir/bsd/qmail-04.eml +31 -0
- data/set-of-emails/maildir/bsd/qmail-05.eml +31 -0
- data/set-of-emails/maildir/bsd/qmail-06.eml +39 -0
- data/set-of-emails/maildir/bsd/qmail-07.eml +22 -0
- data/set-of-emails/maildir/bsd/qmail-08.eml +23 -0
- data/set-of-emails/maildir/bsd/qmail-09.eml +103 -0
- data/set-of-emails/maildir/bsd/rfc3464-01.eml +60 -0
- data/set-of-emails/maildir/bsd/rfc3464-02.eml +43 -0
- data/set-of-emails/maildir/bsd/rfc3464-03.eml +40 -0
- data/set-of-emails/maildir/bsd/rfc3464-04.eml +50 -0
- data/set-of-emails/maildir/bsd/rfc3464-05.eml +63 -0
- data/set-of-emails/maildir/bsd/rfc3464-06.eml +48 -0
- data/set-of-emails/maildir/bsd/rfc3464-07.eml +88 -0
- data/set-of-emails/maildir/bsd/rfc3464-08.eml +70 -0
- data/set-of-emails/maildir/bsd/rfc3464-09.eml +93 -0
- data/set-of-emails/maildir/bsd/rfc3464-10.eml +467 -0
- data/set-of-emails/maildir/bsd/rfc3464-11.eml +1171 -0
- data/set-of-emails/maildir/bsd/rfc3464-12.eml +101 -0
- data/set-of-emails/maildir/bsd/rfc3464-13.eml +131 -0
- data/set-of-emails/maildir/bsd/rfc3464-14.eml +121 -0
- data/set-of-emails/maildir/bsd/rfc3464-15.eml +144 -0
- data/set-of-emails/maildir/bsd/rfc3464-16.eml +36 -0
- data/set-of-emails/maildir/bsd/rfc3464-17.eml +109 -0
- data/set-of-emails/maildir/bsd/rfc3464-18.eml +149 -0
- data/set-of-emails/maildir/bsd/rfc3464-19.eml +65 -0
- data/set-of-emails/maildir/bsd/rfc3464-20.eml +145 -0
- data/set-of-emails/maildir/bsd/rfc3464-21.eml +146 -0
- data/set-of-emails/maildir/bsd/rfc3464-22.eml +105 -0
- data/set-of-emails/maildir/bsd/rfc3464-23.eml +21 -0
- data/set-of-emails/maildir/bsd/rfc3464-24.eml +27 -0
- data/set-of-emails/maildir/bsd/rfc3464-25.eml +33 -0
- data/set-of-emails/maildir/bsd/rfc3464-26.eml +98 -0
- data/set-of-emails/maildir/bsd/rfc3464-27.eml +180 -0
- data/set-of-emails/maildir/bsd/rfc3464-28.eml +122 -0
- data/set-of-emails/maildir/bsd/rfc3834-01.eml +37 -0
- data/set-of-emails/maildir/bsd/rfc3834-02.eml +51 -0
- data/set-of-emails/maildir/bsd/rfc3834-03.eml +33 -0
- data/set-of-emails/maildir/bsd/ru-mailru-01.eml +54 -0
- data/set-of-emails/maildir/bsd/ru-mailru-02.eml +54 -0
- data/set-of-emails/maildir/bsd/ru-mailru-03.eml +62 -0
- data/set-of-emails/maildir/bsd/ru-mailru-04.eml +54 -0
- data/set-of-emails/maildir/bsd/ru-yandex-01.eml +102 -0
- data/set-of-emails/maildir/bsd/ru-yandex-02.eml +113 -0
- data/set-of-emails/maildir/bsd/ru-yandex-03.eml +101 -0
- data/set-of-emails/maildir/bsd/sendmail-01.eml +70 -0
- data/set-of-emails/maildir/bsd/sendmail-02.eml +82 -0
- data/set-of-emails/maildir/bsd/sendmail-03.eml +76 -0
- data/set-of-emails/maildir/bsd/sendmail-04.eml +63 -0
- data/set-of-emails/maildir/bsd/sendmail-05.eml +64 -0
- data/set-of-emails/maildir/bsd/sendmail-06.eml +67 -0
- data/set-of-emails/maildir/bsd/sendmail-07.eml +65 -0
- data/set-of-emails/maildir/bsd/sendmail-08.eml +62 -0
- data/set-of-emails/maildir/bsd/sendmail-09.eml +60 -0
- data/set-of-emails/maildir/bsd/sendmail-10.eml +82 -0
- data/set-of-emails/maildir/bsd/sendmail-11.eml +60 -0
- data/set-of-emails/maildir/bsd/sendmail-12.eml +62 -0
- data/set-of-emails/maildir/bsd/sendmail-13.eml +66 -0
- data/set-of-emails/maildir/bsd/sendmail-14.eml +64 -0
- data/set-of-emails/maildir/bsd/sendmail-15.eml +60 -0
- data/set-of-emails/maildir/bsd/sendmail-16.eml +69 -0
- data/set-of-emails/maildir/bsd/sendmail-17.eml +68 -0
- data/set-of-emails/maildir/bsd/sendmail-18.eml +64 -0
- data/set-of-emails/maildir/bsd/sendmail-19.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-20.eml +120 -0
- data/set-of-emails/maildir/bsd/sendmail-21.eml +69 -0
- data/set-of-emails/maildir/bsd/sendmail-22.eml +73 -0
- data/set-of-emails/maildir/bsd/sendmail-23.eml +137 -0
- data/set-of-emails/maildir/bsd/sendmail-24.eml +66 -0
- data/set-of-emails/maildir/bsd/sendmail-25.eml +70 -0
- data/set-of-emails/maildir/bsd/sendmail-26.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-27.eml +69 -0
- data/set-of-emails/maildir/bsd/sendmail-28.eml +69 -0
- data/set-of-emails/maildir/bsd/sendmail-29.eml +70 -0
- data/set-of-emails/maildir/bsd/sendmail-30.eml +68 -0
- data/set-of-emails/maildir/bsd/sendmail-31.eml +80 -0
- data/set-of-emails/maildir/bsd/sendmail-32.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-33.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-34.eml +75 -0
- data/set-of-emails/maildir/bsd/sendmail-35.eml +70 -0
- data/set-of-emails/maildir/bsd/sendmail-36.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-37.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-38.eml +167 -0
- data/set-of-emails/maildir/bsd/surfcontrol-01.eml +79 -0
- data/set-of-emails/maildir/bsd/surfcontrol-02.eml +70 -0
- data/set-of-emails/maildir/bsd/surfcontrol-03.eml +70 -0
- data/set-of-emails/maildir/bsd/uk-messagelabs-01.eml +76 -0
- data/set-of-emails/maildir/bsd/us-amazonses-01.eml +59 -0
- data/set-of-emails/maildir/bsd/us-amazonses-02.eml +177 -0
- data/set-of-emails/maildir/bsd/us-amazonses-03.eml +55 -0
- data/set-of-emails/maildir/bsd/us-amazonses-04.eml +55 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-01.eml +156 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-02.eml +160 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-03.eml +161 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-04.eml +156 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-05.eml +157 -0
- data/set-of-emails/maildir/bsd/us-aol-01.eml +1258 -0
- data/set-of-emails/maildir/bsd/us-aol-02.eml +1257 -0
- data/set-of-emails/maildir/bsd/us-aol-03.eml +1264 -0
- data/set-of-emails/maildir/bsd/us-aol-04.eml +1260 -0
- data/set-of-emails/maildir/bsd/us-bigfoot-01.eml +64 -0
- data/set-of-emails/maildir/bsd/us-facebook-01.eml +40 -0
- data/set-of-emails/maildir/bsd/us-facebook-02.eml +42 -0
- data/set-of-emails/maildir/bsd/us-google-01.eml +70 -0
- data/set-of-emails/maildir/bsd/us-google-02.eml +50 -0
- data/set-of-emails/maildir/bsd/us-google-03.eml +51 -0
- data/set-of-emails/maildir/bsd/us-google-04.eml +82 -0
- data/set-of-emails/maildir/bsd/us-google-05.eml +50 -0
- data/set-of-emails/maildir/bsd/us-google-06.eml +56 -0
- data/set-of-emails/maildir/bsd/us-google-07.eml +42 -0
- data/set-of-emails/maildir/bsd/us-google-08.eml +59 -0
- data/set-of-emails/maildir/bsd/us-google-09.eml +76 -0
- data/set-of-emails/maildir/bsd/us-google-10.eml +69 -0
- data/set-of-emails/maildir/bsd/us-google-11.eml +68 -0
- data/set-of-emails/maildir/bsd/us-google-12.eml +76 -0
- data/set-of-emails/maildir/bsd/us-google-13.eml +79 -0
- data/set-of-emails/maildir/bsd/us-google-14.eml +304 -0
- data/set-of-emails/maildir/bsd/us-office365-01.eml +102 -0
- data/set-of-emails/maildir/bsd/us-outlook-01.eml +72 -0
- data/set-of-emails/maildir/bsd/us-outlook-02.eml +72 -0
- data/set-of-emails/maildir/bsd/us-outlook-03.eml +72 -0
- data/set-of-emails/maildir/bsd/us-outlook-04.eml +79 -0
- data/set-of-emails/maildir/bsd/us-outlook-05.eml +85 -0
- data/set-of-emails/maildir/bsd/us-outlook-06.eml +75 -0
- data/set-of-emails/maildir/bsd/us-outlook-07.eml +70 -0
- data/set-of-emails/maildir/bsd/us-receivingses-01.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-02.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-03.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-04.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-05.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-06.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-07.eml +74 -0
- data/set-of-emails/maildir/bsd/us-sendgrid-01.eml +95 -0
- data/set-of-emails/maildir/bsd/us-sendgrid-02.eml +98 -0
- data/set-of-emails/maildir/bsd/us-sendgrid-03.eml +100 -0
- data/set-of-emails/maildir/bsd/us-verizon-01.eml +31 -0
- data/set-of-emails/maildir/bsd/us-yahoo-01.eml +78 -0
- data/set-of-emails/maildir/bsd/us-yahoo-02.eml +79 -0
- data/set-of-emails/maildir/bsd/us-yahoo-03.eml +93 -0
- data/set-of-emails/maildir/bsd/us-yahoo-04.eml +94 -0
- data/set-of-emails/maildir/bsd/us-yahoo-05.eml +94 -0
- data/set-of-emails/maildir/bsd/us-zoho-01.eml +40 -0
- data/set-of-emails/maildir/bsd/us-zoho-02.eml +38 -0
- data/set-of-emails/maildir/bsd/us-zoho-03.eml +37 -0
- data/set-of-emails/maildir/bsd/us-zoho-04.eml +47 -0
- data/set-of-emails/maildir/bsd/us-zoho-05.eml +37 -0
- data/set-of-emails/maildir/bsd/v5sendmail-01.eml +24 -0
- data/set-of-emails/maildir/bsd/v5sendmail-02.eml +26 -0
- data/set-of-emails/maildir/bsd/v5sendmail-03.eml +29 -0
- data/set-of-emails/maildir/bsd/v5sendmail-04.eml +29 -0
- data/set-of-emails/maildir/bsd/v5sendmail-05.eml +42 -0
- data/set-of-emails/maildir/bsd/v5sendmail-06.eml +28 -0
- data/set-of-emails/maildir/bsd/v5sendmail-07.eml +35 -0
- data/set-of-emails/maildir/bsd/x1-01.eml +61 -0
- data/set-of-emails/maildir/bsd/x1-02.eml +62 -0
- data/set-of-emails/maildir/bsd/x2-01.eml +41 -0
- data/set-of-emails/maildir/bsd/x2-02.eml +46 -0
- data/set-of-emails/maildir/bsd/x2-03.eml +34 -0
- data/set-of-emails/maildir/bsd/x2-04.eml +0 -0
- data/set-of-emails/maildir/bsd/x2-05.eml +98 -0
- data/set-of-emails/maildir/bsd/x3-01.eml +61 -0
- data/set-of-emails/maildir/bsd/x3-02.eml +64 -0
- data/set-of-emails/maildir/bsd/x3-03.eml +59 -0
- data/set-of-emails/maildir/bsd/x3-04.eml +106 -0
- data/set-of-emails/maildir/bsd/x4-01.eml +92 -0
- data/set-of-emails/maildir/bsd/x4-02.eml +112 -0
- data/set-of-emails/maildir/bsd/x4-03.eml +245 -0
- data/set-of-emails/maildir/bsd/x4-04.eml +81 -0
- data/set-of-emails/maildir/bsd/x4-05.eml +121 -0
- data/set-of-emails/maildir/bsd/x4-06.eml +32 -0
- data/set-of-emails/maildir/bsd/x4-07.eml +153 -0
- data/set-of-emails/maildir/bsd/x5-01.eml +155 -0
- data/set-of-emails/maildir/dos/activehunter-01.eml +54 -0
- data/set-of-emails/maildir/dos/apachejames-01.eml +46 -0
- data/set-of-emails/maildir/dos/arf-01.eml +66 -0
- data/set-of-emails/maildir/dos/courier-01.eml +79 -0
- data/set-of-emails/maildir/dos/de-einsundeins-01.eml +38 -0
- data/set-of-emails/maildir/dos/de-gmx-01.eml +52 -0
- data/set-of-emails/maildir/dos/domino-01.eml +33 -0
- data/set-of-emails/maildir/dos/exchange-01.eml +31 -0
- data/set-of-emails/maildir/dos/exim-01.eml +46 -0
- data/set-of-emails/maildir/dos/google-apps-01.eml +66 -0
- data/set-of-emails/maildir/dos/imailserver-01.eml +27 -0
- data/set-of-emails/maildir/dos/interscanmss-01.eml +49 -0
- data/set-of-emails/maildir/dos/jp-biglobe-01.eml +43 -0
- data/set-of-emails/maildir/dos/jp-ezweb-01.eml +36 -0
- data/set-of-emails/maildir/dos/jp-kddi-01.eml +49 -0
- data/set-of-emails/maildir/dos/mailfoundry-01.eml +50 -0
- data/set-of-emails/maildir/dos/mailmarshalsmtp-01.eml +43 -0
- data/set-of-emails/maildir/dos/mcafee-01.eml +63 -0
- data/set-of-emails/maildir/dos/messagingserver-01.eml +102 -0
- data/set-of-emails/maildir/dos/mfilter-01.eml +49 -0
- data/set-of-emails/maildir/dos/mxlogic-01.eml +47 -0
- data/set-of-emails/maildir/dos/notes-01.eml +42 -0
- data/set-of-emails/maildir/dos/opensmtpd-01.eml +33 -0
- data/set-of-emails/maildir/dos/postfix-01.eml +60 -0
- data/set-of-emails/maildir/dos/qmail-01.eml +40 -0
- data/set-of-emails/maildir/dos/rfc3464-01.eml +59 -0
- data/set-of-emails/maildir/dos/rfc3834-01.eml +37 -0
- data/set-of-emails/maildir/dos/ru-mailru-01.eml +54 -0
- data/set-of-emails/maildir/dos/ru-yandex-01.eml +102 -0
- data/set-of-emails/maildir/dos/sendmail-01.eml +69 -0
- data/set-of-emails/maildir/dos/surfcontrol-01.eml +79 -0
- data/set-of-emails/maildir/dos/uk-messagelabs-01.eml +76 -0
- data/set-of-emails/maildir/dos/us-amazonses-01.eml +59 -0
- data/set-of-emails/maildir/dos/us-aol-01.eml +1258 -0
- data/set-of-emails/maildir/dos/us-bigfoot-01.eml +64 -0
- data/set-of-emails/maildir/dos/us-facebook-01.eml +40 -0
- data/set-of-emails/maildir/dos/us-google-01.eml +70 -0
- data/set-of-emails/maildir/dos/us-outlook-01.eml +72 -0
- data/set-of-emails/maildir/dos/us-receivingses-01.eml +74 -0
- data/set-of-emails/maildir/dos/us-sendgrid-01.eml +95 -0
- data/set-of-emails/maildir/dos/us-verizon-01.eml +31 -0
- data/set-of-emails/maildir/dos/us-yahoo-01.eml +78 -0
- data/set-of-emails/maildir/dos/us-zoho-01.eml +40 -0
- data/set-of-emails/maildir/dos/v5sendmail-01.eml +24 -0
- data/set-of-emails/maildir/dos/x1-01.eml +61 -0
- data/set-of-emails/maildir/dos/x2-01.eml +41 -0
- data/set-of-emails/maildir/dos/x3-01.eml +61 -0
- data/set-of-emails/maildir/dos/x4-01.eml +90 -0
- data/set-of-emails/maildir/dos/x5-01.eml +155 -0
- data/set-of-emails/maildir/err/make-test-01.eml +70 -0
- data/set-of-emails/maildir/err/make-test-02.eml +70 -0
- data/set-of-emails/maildir/err/make-test-03.eml +64 -0
- data/set-of-emails/maildir/err/make-test-04.eml +64 -0
- data/set-of-emails/maildir/err/make-test-05.eml +66 -0
- data/set-of-emails/maildir/err/make-test-06.eml +118 -0
- data/set-of-emails/maildir/err/make-test-07.eml +26 -0
- data/set-of-emails/maildir/err/make-test-08.eml +67 -0
- data/set-of-emails/maildir/err/make-test-09.eml +55 -0
- data/set-of-emails/maildir/err/make-test-10.eml +69 -0
- data/set-of-emails/maildir/err/make-test-11.eml +64 -0
- data/set-of-emails/maildir/err/make-test-12.eml +66 -0
- data/set-of-emails/maildir/err/make-test-13.eml +67 -0
- data/set-of-emails/maildir/err/make-test-14.eml +66 -0
- data/set-of-emails/maildir/err/make-test-15.eml +70 -0
- data/set-of-emails/maildir/err/make-test-16.eml +68 -0
- data/set-of-emails/maildir/err/make-test-17.eml +68 -0
- data/set-of-emails/maildir/err/make-test-18.eml +68 -0
- data/set-of-emails/maildir/err/make-test-19.eml +69 -0
- data/set-of-emails/maildir/err/make-test-20.eml +67 -0
- data/set-of-emails/maildir/err/make-test-21.eml +69 -0
- data/set-of-emails/maildir/err/make-test-22.eml +66 -0
- data/set-of-emails/maildir/err/make-test-23.eml +70 -0
- data/set-of-emails/maildir/err/make-test-24.eml +69 -0
- data/set-of-emails/maildir/err/make-test-25.eml +67 -0
- data/set-of-emails/maildir/err/make-test-26.eml +69 -0
- data/set-of-emails/maildir/err/make-test-27.eml +69 -0
- data/set-of-emails/maildir/err/make-test-28.eml +66 -0
- data/set-of-emails/maildir/err/make-test-29.eml +68 -0
- data/set-of-emails/maildir/err/make-test-30.eml +68 -0
- data/set-of-emails/maildir/err/make-test-31.eml +80 -0
- data/set-of-emails/maildir/err/make-test-32.eml +66 -0
- data/set-of-emails/maildir/err/make-test-33.eml +68 -0
- data/set-of-emails/maildir/err/make-test-34.eml +56 -0
- data/set-of-emails/maildir/err/make-test-35.eml +59 -0
- data/set-of-emails/maildir/err/make-test-36.eml +53 -0
- data/set-of-emails/maildir/err/make-test-37.eml +62 -0
- data/set-of-emails/maildir/mac/activehunter-01.eml +1 -2
- data/set-of-emails/maildir/mac/apachejames-01.eml +1 -4
- data/set-of-emails/maildir/mac/arf-01.eml +1 -3
- data/set-of-emails/maildir/mac/courier-01.eml +1 -6
- data/set-of-emails/maildir/mac/de-einsundeins-01.eml +1 -1
- data/set-of-emails/maildir/mac/de-gmx-01.eml +1 -1
- data/set-of-emails/maildir/mac/domino-01.eml +1 -0
- data/set-of-emails/maildir/mac/exchange-01.eml +1 -0
- data/set-of-emails/maildir/mac/exim-01.eml +1 -1
- data/set-of-emails/maildir/mac/google-apps-01.eml +1 -4
- data/set-of-emails/maildir/mac/imailserver-01.eml +1 -0
- data/set-of-emails/maildir/mac/interscanmss-01.eml +1 -2
- data/set-of-emails/maildir/mac/jp-biglobe-01.eml +1 -2
- data/set-of-emails/maildir/mac/jp-ezweb-01.eml +1 -1
- data/set-of-emails/maildir/mac/jp-kddi-01.eml +1 -2
- data/set-of-emails/maildir/mac/mailfoundry-01.eml +1 -2
- data/set-of-emails/maildir/mac/mailmarshalsmtp-01.eml +1 -2
- data/set-of-emails/maildir/mac/mcafee-01.eml +1 -4
- data/set-of-emails/maildir/mac/messagingserver-01.eml +1 -4
- data/set-of-emails/maildir/mac/mfilter-01.eml +1 -3
- data/set-of-emails/maildir/mac/mxlogic-01.eml +1 -1
- data/set-of-emails/maildir/mac/notes-01.eml +1 -2
- data/set-of-emails/maildir/mac/opensmtpd-01.eml +1 -0
- data/set-of-emails/maildir/mac/postfix-01.eml +1 -3
- data/set-of-emails/maildir/mac/qmail-01.eml +1 -1
- data/set-of-emails/maildir/mac/rfc3464-01.eml +1 -4
- data/set-of-emails/maildir/mac/rfc3834-01.eml +1 -0
- data/set-of-emails/maildir/mac/ru-mailru-01.eml +1 -1
- data/set-of-emails/maildir/mac/ru-yandex-01.eml +1 -4
- data/set-of-emails/maildir/mac/sendmail-01.eml +1 -4
- data/set-of-emails/maildir/mac/surfcontrol-01.eml +1 -5
- data/set-of-emails/maildir/mac/uk-messagelabs-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-amazonses-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-aol-01.eml +1 -15
- data/set-of-emails/maildir/mac/us-bigfoot-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-facebook-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-google-01.eml +1 -1
- data/set-of-emails/maildir/mac/us-outlook-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-receivingses-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-sendgrid-01.eml +1 -3
- data/set-of-emails/maildir/mac/us-verizon-01.eml +1 -2
- data/set-of-emails/maildir/mac/us-yahoo-01.eml +1 -1
- data/set-of-emails/maildir/mac/us-zoho-01.eml +1 -2
- data/set-of-emails/maildir/mac/v5sendmail-01.eml +1 -0
- data/set-of-emails/maildir/mac/x1-01.eml +1 -4
- data/set-of-emails/maildir/mac/x2-01.eml +1 -1
- data/set-of-emails/maildir/mac/x3-01.eml +1 -3
- data/set-of-emails/maildir/mac/x4-01.eml +1 -2
- data/set-of-emails/maildir/mac/x5-01.eml +1 -8
- data/set-of-emails/maildir/not/is-not-bounce-01.eml +25 -0
- data/set-of-emails/to-be-debugged-because/reason-is-onhold/onhold-0001.eml +85 -0
- data/set-of-emails/to-be-debugged-because/reason-is-undefined/undefined-0002.eml +27 -0
- data/set-of-emails/to-be-debugged-because/reason-is-undefined/undefined-0003.eml +78 -0
- data/set-of-emails/to-be-debugged-because/sisimai-cannot-parse-yet/cannot-parse-this-email-0002.eml +25 -0
- data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-01.eml +79 -0
- data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-02.eml +72 -0
- data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-03.eml +68 -0
- data/set-of-emails/to-be-debugged-because/something-is-wrong/no-message-id-from-pr-150.eml +75 -0
- data/set-of-emails/to-be-parsed-for-test/README.md +20 -0
- data/sisimai-java.gemspec +29 -0
- data/sisimai.gemspec +28 -0
- metadata +680 -0
@@ -0,0 +1,156 @@
|
|
1
|
+
module Sisimai
|
2
|
+
module MTA
|
3
|
+
# Sisimai::MTA::X1 parses a bounce email which created by Unknown MTA #1.
|
4
|
+
# Methods in the module are called from only Sisimai::Message.
|
5
|
+
module X1
|
6
|
+
# Imported from p5-Sisimail/lib/Sisimai/MTA/X1.pm
|
7
|
+
class << self
|
8
|
+
require 'sisimai/mta'
|
9
|
+
require 'sisimai/rfc5322'
|
10
|
+
|
11
|
+
Re0 = {
|
12
|
+
:from => %r/["]Mail Deliver System["] /,
|
13
|
+
:subject => %r/\AReturned Mail: /,
|
14
|
+
}
|
15
|
+
Re1 = {
|
16
|
+
:begin => %r/\AThe original message was received at (.+)\z/,
|
17
|
+
:endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
|
18
|
+
:rfc822 => %r/\AReceived: from \d+[.]\d+[.]\d+[.]\d/,
|
19
|
+
}
|
20
|
+
Indicators = Sisimai::MTA.INDICATORS
|
21
|
+
LongFields = Sisimai::RFC5322.LONGFIELDS
|
22
|
+
RFC822Head = Sisimai::RFC5322.HEADERFIELDS
|
23
|
+
|
24
|
+
def description; return 'Unknown MTA #1'; end
|
25
|
+
def smtpagent; return 'X1'; end
|
26
|
+
def headerlist; return []; end
|
27
|
+
def pattern; return Re0; end
|
28
|
+
|
29
|
+
# Parse bounce messages from Unknown MTA #1
|
30
|
+
# @param [Hash] mhead Message header of a bounce email
|
31
|
+
# @options mhead [String] from From header
|
32
|
+
# @options mhead [String] date Date header
|
33
|
+
# @options mhead [String] subject Subject header
|
34
|
+
# @options mhead [Array] received Received headers
|
35
|
+
# @options mhead [String] others Other required headers
|
36
|
+
# @param [String] mbody Message body of a bounce email
|
37
|
+
# @return [Hash, Nil] Bounce data list and message/rfc822
|
38
|
+
# part or nil if it failed to parse or
|
39
|
+
# the arguments are missing
|
40
|
+
def scan(mhead, mbody)
|
41
|
+
return nil unless mhead
|
42
|
+
return nil unless mbody
|
43
|
+
return nil unless mhead['subject'] =~ Re0[:subject]
|
44
|
+
return nil unless mhead['from'] =~ Re0[:from]
|
45
|
+
|
46
|
+
dscontents = []; dscontents << Sisimai::MTA.DELIVERYSTATUS
|
47
|
+
hasdivided = mbody.split("\n")
|
48
|
+
rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
|
49
|
+
rfc822part = '' # (String) message/rfc822-headers part
|
50
|
+
previousfn = '' # (String) Previous field name
|
51
|
+
readcursor = 0 # (Integer) Points the current cursor position
|
52
|
+
recipients = 0 # (Integer) The number of 'Final-Recipient' header
|
53
|
+
datestring = '' # (String) Date string
|
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
|
+
# The original message was received at Thu, 29 Apr 2010 23:34:45 +0900 (JST)
|
102
|
+
# from shironeko@example.jp
|
103
|
+
#
|
104
|
+
# ---The following addresses had delivery errors---
|
105
|
+
#
|
106
|
+
# kijitora@example.co.jp [User unknown]
|
107
|
+
v = dscontents[-1]
|
108
|
+
|
109
|
+
if cv = e.match(/\A([^ ]+?[@][^ ]+?)[ ]+\[(.+)\]\z/)
|
110
|
+
# kijitora@example.co.jp [User unknown]
|
111
|
+
if v['recipient']
|
112
|
+
# There are multiple recipient addresses in the message body.
|
113
|
+
dscontents << Sisimai::MTA.DELIVERYSTATUS
|
114
|
+
v = dscontents[-1]
|
115
|
+
end
|
116
|
+
v['recipient'] = cv[1]
|
117
|
+
v['diagnosis'] = cv[2]
|
118
|
+
recipients += 1
|
119
|
+
|
120
|
+
elsif cv = e.match(Re1[:begin])
|
121
|
+
# The original message was received at Thu, 29 Apr 2010 23:34:45 +0900 (JST)
|
122
|
+
datestring = cv[1]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
return nil if recipients == 0
|
128
|
+
require 'sisimai/string'
|
129
|
+
require 'sisimai/smtp/status'
|
130
|
+
|
131
|
+
dscontents.map do |e|
|
132
|
+
e['agent'] = Sisimai::MTA::X1.smtpagent
|
133
|
+
|
134
|
+
if mhead['received'].size > 0
|
135
|
+
# Get localhost and remote host name from Received header.
|
136
|
+
r0 = mhead['received']
|
137
|
+
%w|lhost rhost|.each { |a| e[a] ||= '' }
|
138
|
+
e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
|
139
|
+
e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
|
140
|
+
end
|
141
|
+
e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
|
142
|
+
e['status'] = Sisimai::SMTP::Status.find(e['diagnosis'])
|
143
|
+
e['spec'] = e['reason'] == 'mailererror' ? 'X-UNIX' : 'SMTP'
|
144
|
+
e['action'] = 'failed' if e['status'] =~ /\A[45]/
|
145
|
+
e['date'] = datestring || ''
|
146
|
+
e.each_key { |a| e[a] ||= '' }
|
147
|
+
end
|
148
|
+
|
149
|
+
return { 'ds' => dscontents, 'rfc822' => rfc822part }
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
@@ -0,0 +1,157 @@
|
|
1
|
+
module Sisimai
|
2
|
+
module MTA
|
3
|
+
# Sisimai::MTA::X2 parses a bounce email which created by Unknown MTA #2.
|
4
|
+
# Methods in the module are called from only Sisimai::Message.
|
5
|
+
module X2
|
6
|
+
# Imported from p5-Sisimail/lib/Sisimai/MTA/X2.pm
|
7
|
+
class << self
|
8
|
+
require 'sisimai/mta'
|
9
|
+
require 'sisimai/rfc5322'
|
10
|
+
|
11
|
+
Re0 = {
|
12
|
+
:from => %r/MAILER-DAEMON[@]/,
|
13
|
+
:subject => %r{\A(?>
|
14
|
+
Delivery[ ]failure
|
15
|
+
|fail(?:ure|ed)[ ]delivery
|
16
|
+
)
|
17
|
+
}x,
|
18
|
+
}
|
19
|
+
Re1 = {
|
20
|
+
:begin => %r/\AUnable to deliver message to the following address/,
|
21
|
+
:rfc822 => %r/\A--- Original message follows/,
|
22
|
+
:endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
|
23
|
+
}
|
24
|
+
Indicators = Sisimai::MTA.INDICATORS
|
25
|
+
LongFields = Sisimai::RFC5322.LONGFIELDS
|
26
|
+
RFC822Head = Sisimai::RFC5322.HEADERFIELDS
|
27
|
+
|
28
|
+
def description; return 'Unknown MTA #2'; end
|
29
|
+
def smtpagent; return 'X2'; end
|
30
|
+
def headerlist; return []; end
|
31
|
+
def pattern; return Re0; end
|
32
|
+
|
33
|
+
# Parse bounce messages from Unknown MTA #2
|
34
|
+
# @param [Hash] mhead Message header of a bounce email
|
35
|
+
# @options mhead [String] from From header
|
36
|
+
# @options mhead [String] date Date header
|
37
|
+
# @options mhead [String] subject Subject header
|
38
|
+
# @options mhead [Array] received Received headers
|
39
|
+
# @options mhead [String] others Other required headers
|
40
|
+
# @param [String] mbody Message body of a bounce email
|
41
|
+
# @return [Hash, Nil] Bounce data list and message/rfc822
|
42
|
+
# part or nil if it failed to parse or
|
43
|
+
# the arguments are missing
|
44
|
+
def scan(mhead, mbody)
|
45
|
+
return nil unless mhead
|
46
|
+
return nil unless mbody
|
47
|
+
return nil unless mhead['subject'] =~ Re0[:subject]
|
48
|
+
return nil unless mhead['from'] =~ Re0[:from]
|
49
|
+
|
50
|
+
dscontents = []; dscontents << Sisimai::MTA.DELIVERYSTATUS
|
51
|
+
hasdivided = mbody.split("\n")
|
52
|
+
rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
|
53
|
+
rfc822part = '' # (String) message/rfc822-headers part
|
54
|
+
previousfn = '' # (String) Previous field name
|
55
|
+
readcursor = 0 # (Integer) Points the current cursor position
|
56
|
+
recipients = 0 # (Integer) The number of 'Final-Recipient' header
|
57
|
+
v = nil
|
58
|
+
|
59
|
+
hasdivided.each do |e|
|
60
|
+
if readcursor == 0
|
61
|
+
# Beginning of the bounce message or delivery status part
|
62
|
+
if e =~ Re1[:begin]
|
63
|
+
readcursor |= Indicators[:'deliverystatus']
|
64
|
+
next
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
if readcursor & Indicators[:'message-rfc822'] == 0
|
69
|
+
# Beginning of the original message part
|
70
|
+
if e =~ Re1[:rfc822]
|
71
|
+
readcursor |= Indicators[:'message-rfc822']
|
72
|
+
next
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
if readcursor & Indicators[:'message-rfc822'] > 0
|
77
|
+
# After "message/rfc822"
|
78
|
+
if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*.+\z/)
|
79
|
+
# Get required headers only
|
80
|
+
lhs = cv[1].downcase
|
81
|
+
previousfn = ''
|
82
|
+
next unless RFC822Head.key?(lhs)
|
83
|
+
|
84
|
+
previousfn = lhs
|
85
|
+
rfc822part += e + "\n"
|
86
|
+
|
87
|
+
elsif e =~ /\A[ \t]+/
|
88
|
+
# Continued line from the previous line
|
89
|
+
next if rfc822next[previousfn]
|
90
|
+
rfc822part += e + "\n" if LongFields.key?(previousfn)
|
91
|
+
|
92
|
+
else
|
93
|
+
# Check the end of headers in rfc822 part
|
94
|
+
next unless LongFields.key?(previousfn)
|
95
|
+
next unless e.empty?
|
96
|
+
rfc822next[previousfn] = true
|
97
|
+
end
|
98
|
+
|
99
|
+
else
|
100
|
+
# Before "message/rfc822"
|
101
|
+
next if readcursor & Indicators[:'deliverystatus'] == 0
|
102
|
+
next if e.empty?
|
103
|
+
|
104
|
+
# Message from example.com.
|
105
|
+
# Unable to deliver message to the following address(es).
|
106
|
+
#
|
107
|
+
# <kijitora@example.com>:
|
108
|
+
# This user doesn't have a example.com account (kijitora@example.com) [0]
|
109
|
+
v = dscontents[-1]
|
110
|
+
|
111
|
+
if cv = e.match(/\A[<]([^ ]+[@][^ ]+)[>]:\z/)
|
112
|
+
# <kijitora@example.com>:
|
113
|
+
if v['recipient']
|
114
|
+
# There are multiple recipient addresses in the message body.
|
115
|
+
dscontents << Sisimai::MTA.DELIVERYSTATUS
|
116
|
+
v = dscontents[-1]
|
117
|
+
end
|
118
|
+
v['recipient'] = cv[1]
|
119
|
+
recipients += 1
|
120
|
+
|
121
|
+
else
|
122
|
+
# This user doesn't have a example.com account (kijitora@example.com) [0]
|
123
|
+
v['diagnosis'] ||= ''
|
124
|
+
v['diagnosis'] += ' ' + e
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
return nil if recipients == 0
|
130
|
+
require 'sisimai/string'
|
131
|
+
require 'sisimai/smtp/status'
|
132
|
+
|
133
|
+
dscontents.map do |e|
|
134
|
+
e['agent'] = Sisimai::MTA::X2.smtpagent
|
135
|
+
|
136
|
+
if mhead['received'].size > 0
|
137
|
+
# Get localhost and remote host name from Received header.
|
138
|
+
r0 = mhead['received']
|
139
|
+
%w|lhost rhost|.each { |a| e[a] ||= '' }
|
140
|
+
e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
|
141
|
+
e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
|
142
|
+
end
|
143
|
+
e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
|
144
|
+
e['status'] = Sisimai::SMTP::Status.find(e['diagnosis'])
|
145
|
+
e['spec'] = e['reason'] == 'mailererror' ? 'X-UNIX' : 'SMTP'
|
146
|
+
e['action'] = 'failed' if e['status'] =~ /\A[45]/
|
147
|
+
e.each_key { |a| e[a] ||= '' }
|
148
|
+
end
|
149
|
+
|
150
|
+
return { 'ds' => dscontents, 'rfc822' => rfc822part }
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
@@ -0,0 +1,171 @@
|
|
1
|
+
module Sisimai
|
2
|
+
module MTA
|
3
|
+
# Sisimai::MTA::X3 parses a bounce email which created by Unknown MTA #3.
|
4
|
+
# Methods in the module are called from only Sisimai::Message.
|
5
|
+
module X3
|
6
|
+
# Imported from p5-Sisimail/lib/Sisimai/MTA/X3.pm
|
7
|
+
class << self
|
8
|
+
require 'sisimai/mta'
|
9
|
+
require 'sisimai/rfc5322'
|
10
|
+
|
11
|
+
Re0 = {
|
12
|
+
:from => %r/\AMail Delivery System/,
|
13
|
+
:subject => %r/\ADelivery status notification/,
|
14
|
+
}
|
15
|
+
Re1 = {
|
16
|
+
:begin => %r/\A[ \t]+This is an automatically generated Delivery Status Notification/,
|
17
|
+
:rfc822 => %r|\AContent-Type: message/rfc822|,
|
18
|
+
:endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
|
19
|
+
}
|
20
|
+
Indicators = Sisimai::MTA.INDICATORS
|
21
|
+
LongFields = Sisimai::RFC5322.LONGFIELDS
|
22
|
+
RFC822Head = Sisimai::RFC5322.HEADERFIELDS
|
23
|
+
|
24
|
+
def description; return 'Unknown MTA #3'; end
|
25
|
+
def smtpagent; return 'X3'; end
|
26
|
+
def headerlist; return []; end
|
27
|
+
def pattern; return Re0; end
|
28
|
+
|
29
|
+
# Parse bounce messages from Unknown MTA #3
|
30
|
+
# @param [Hash] mhead Message header of a bounce email
|
31
|
+
# @options mhead [String] from From header
|
32
|
+
# @options mhead [String] date Date header
|
33
|
+
# @options mhead [String] subject Subject header
|
34
|
+
# @options mhead [Array] received Received headers
|
35
|
+
# @options mhead [String] others Other required headers
|
36
|
+
# @param [String] mbody Message body of a bounce email
|
37
|
+
# @return [Hash, Nil] Bounce data list and message/rfc822
|
38
|
+
# part or nil if it failed to parse or
|
39
|
+
# the arguments are missing
|
40
|
+
def scan(mhead, mbody)
|
41
|
+
return nil unless mhead
|
42
|
+
return nil unless mbody
|
43
|
+
return nil unless mhead['subject'] =~ Re0[:subject]
|
44
|
+
return nil unless mhead['from'] =~ Re0[:from]
|
45
|
+
|
46
|
+
dscontents = []; dscontents << Sisimai::MTA.DELIVERYSTATUS
|
47
|
+
hasdivided = mbody.split("\n")
|
48
|
+
rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
|
49
|
+
rfc822part = '' # (String) message/rfc822-headers part
|
50
|
+
previousfn = '' # (String) Previous field name
|
51
|
+
readcursor = 0 # (Integer) Points the current cursor position
|
52
|
+
recipients = 0 # (Integer) The number of 'Final-Recipient' header
|
53
|
+
v = nil
|
54
|
+
|
55
|
+
hasdivided.each do |e|
|
56
|
+
if readcursor == 0
|
57
|
+
# Beginning of the bounce message or delivery status part
|
58
|
+
if e =~ Re1[:begin]
|
59
|
+
readcursor |= Indicators[:'deliverystatus']
|
60
|
+
next
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if readcursor & Indicators[:'message-rfc822'] == 0
|
65
|
+
# Beginning of the original message part
|
66
|
+
if e =~ Re1[:rfc822]
|
67
|
+
readcursor |= Indicators[:'message-rfc822']
|
68
|
+
next
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
if readcursor & Indicators[:'message-rfc822'] > 0
|
73
|
+
# After "message/rfc822"
|
74
|
+
if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*.+\z/)
|
75
|
+
# Get required headers only
|
76
|
+
lhs = cv[1].downcase
|
77
|
+
previousfn = ''
|
78
|
+
next unless RFC822Head.key?(lhs)
|
79
|
+
|
80
|
+
previousfn = lhs
|
81
|
+
rfc822part += e + "\n"
|
82
|
+
|
83
|
+
elsif e =~ /\A[ \t]+/
|
84
|
+
# Continued line from the previous line
|
85
|
+
next if rfc822next[previousfn]
|
86
|
+
rfc822part += e + "\n" if LongFields.key?(previousfn)
|
87
|
+
|
88
|
+
else
|
89
|
+
# Check the end of headers in rfc822 part
|
90
|
+
next unless LongFields.key?(previousfn)
|
91
|
+
next unless e.empty?
|
92
|
+
rfc822next[previousfn] = true
|
93
|
+
end
|
94
|
+
|
95
|
+
else
|
96
|
+
# Before "message/rfc822"
|
97
|
+
next if readcursor & Indicators[:'deliverystatus'] == 0
|
98
|
+
next if e.empty?
|
99
|
+
|
100
|
+
# ============================================================================
|
101
|
+
# This is an automatically generated Delivery Status Notification.
|
102
|
+
#
|
103
|
+
# Delivery to the following recipients failed permanently:
|
104
|
+
#
|
105
|
+
# * kijitora@example.com
|
106
|
+
#
|
107
|
+
#
|
108
|
+
# ============================================================================
|
109
|
+
# Technical details:
|
110
|
+
#
|
111
|
+
# SMTP:RCPT host 192.0.2.8: 553 5.3.0 <kijitora@example.com>... No such user here
|
112
|
+
#
|
113
|
+
#
|
114
|
+
# ============================================================================
|
115
|
+
v = dscontents[-1]
|
116
|
+
|
117
|
+
if cv = e.match(/\A[ \t]+[*][ ]([^ ]+[@][^ ]+)\z/)
|
118
|
+
# * kijitora@example.com
|
119
|
+
if v['recipient']
|
120
|
+
# There are multiple recipient addresses in the message body.
|
121
|
+
dscontents << Sisimai::MTA.DELIVERYSTATUS
|
122
|
+
v = dscontents[-1]
|
123
|
+
end
|
124
|
+
v['recipient'] = cv[1]
|
125
|
+
recipients += 1
|
126
|
+
|
127
|
+
else
|
128
|
+
# Detect error message
|
129
|
+
if cv = e.match(/\ASMTP:([^ ]+)[ ](.+)\z/)
|
130
|
+
# SMTP:RCPT host 192.0.2.8: 553 5.3.0 <kijitora@example.com>... No such user here
|
131
|
+
v['command'] = cv[1].upcase
|
132
|
+
v['diagnosis'] = cv[2]
|
133
|
+
|
134
|
+
elsif cv = e.match(/\ARouting: (.+)/)
|
135
|
+
# Routing: Could not find a gateway for kijitora@example.co.jp
|
136
|
+
v['diagnosis'] = cv[1]
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
return nil if recipients == 0
|
143
|
+
require 'sisimai/string'
|
144
|
+
require 'sisimai/smtp/status'
|
145
|
+
|
146
|
+
dscontents.map do |e|
|
147
|
+
e['agent'] = Sisimai::MTA::X3.smtpagent
|
148
|
+
|
149
|
+
if mhead['received'].size > 0
|
150
|
+
# Get localhost and remote host name from Received header.
|
151
|
+
r0 = mhead['received']
|
152
|
+
%w|lhost rhost|.each { |a| e[a] ||= '' }
|
153
|
+
e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
|
154
|
+
e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
|
155
|
+
end
|
156
|
+
e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
|
157
|
+
e['status'] = Sisimai::SMTP::Status.find(e['diagnosis'])
|
158
|
+
e['spec'] = e['reason'] == 'mailererror' ? 'X-UNIX' : 'SMTP'
|
159
|
+
e['action'] = 'failed' if e['status'] =~ /\A[45]/
|
160
|
+
e.each_key { |a| e[a] ||= '' }
|
161
|
+
end
|
162
|
+
|
163
|
+
return { 'ds' => dscontents, 'rfc822' => rfc822part }
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|