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,306 @@
|
|
1
|
+
module Sisimai
|
2
|
+
module MSP::US
|
3
|
+
# Sisimai::MSP::US::Facebook parses a bounce email which created by Facebook.
|
4
|
+
# Methods in the module are called from only Sisimai::Message.
|
5
|
+
module Facebook
|
6
|
+
# Imported from p5-Sisimail/lib/Sisimai/MSP/US/Facebook.pm
|
7
|
+
class << self
|
8
|
+
require 'sisimai/msp'
|
9
|
+
require 'sisimai/rfc5322'
|
10
|
+
|
11
|
+
Re0 = {
|
12
|
+
:from => %r/\AFacebook [<]mailer-daemon[@]mx[.]facebook[.]com[>]\z/,
|
13
|
+
:subject => %r/\ASorry, your message could not be delivered\z/,
|
14
|
+
}
|
15
|
+
Re1 = {
|
16
|
+
:begin => %r/\AThis message was created automatically by Facebook[.]\z/,
|
17
|
+
:rfc822 => %r/\AContent-Disposition: inline\z/,
|
18
|
+
:endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
|
19
|
+
}
|
20
|
+
|
21
|
+
# http://postmaster.facebook.com/response_codes
|
22
|
+
# NOT TESTD EXCEPT RCP-P2
|
23
|
+
ReFailure = {
|
24
|
+
'userunknown' => [
|
25
|
+
'RCP-P1', # The attempted recipient address does not exist.
|
26
|
+
'INT-P1', # The attempted recipient address does not exist.
|
27
|
+
'INT-P3', # The attempted recpient group address does not exist.
|
28
|
+
'INT-P4', # The attempted recipient address does not exist.
|
29
|
+
],
|
30
|
+
'filtered' => [
|
31
|
+
'RCP-P2', # The attempted recipient's preferences prevent messages from being delivered.
|
32
|
+
'RCP-P3', # The attempted recipient's privacy settings blocked the delivery.
|
33
|
+
],
|
34
|
+
'mesgtoobig' => [
|
35
|
+
'MSG-P1', # The message exceeds Facebook's maximum allowed size.
|
36
|
+
'INT-P2', # The message exceeds Facebook's maximum allowed size.
|
37
|
+
],
|
38
|
+
'contenterror' => [
|
39
|
+
'MSG-P2', # The message contains an attachment type that Facebook does not accept.
|
40
|
+
'MSG-P3', # The message contains multiple instances of a header field that can only be present once. Please see RFC 5322, section 3.6 for more information
|
41
|
+
'POL-P6', # The message contains a url that has been blocked by Facebook.
|
42
|
+
'POL-P7', # The message does not comply with Facebook's abuse policies and will not be accepted.
|
43
|
+
],
|
44
|
+
'securityerror' => [
|
45
|
+
'POL-P1', # Your mail server's IP Address is listed on the Spamhaus PBL.
|
46
|
+
'POL-P2', # Facebook will no longer accept mail from your mail server's IP Address.
|
47
|
+
'POL-P5', # The message contains a virus.
|
48
|
+
'POL-P7', # The message does not comply with Facebook's Domain Authentication requirements.
|
49
|
+
],
|
50
|
+
'notaccept' => [
|
51
|
+
'POL-P3', # Facebook is not accepting messages from your mail server. This will persist for 4 to 8 hours.
|
52
|
+
'POL-P4', # Facebook is not accepting messages from your mail server. This will persist for 24 to 48 hours.
|
53
|
+
'POL-T1', # Facebook is not accepting messages from your mail server, but they may be retried later. This will persist for 1 to 2 hours.
|
54
|
+
'POL-T2', # Facebook is not accepting messages from your mail server, but they may be retried later. This will persist for 4 to 8 hours.
|
55
|
+
'POL-T3', # Facebook is not accepting messages from your mail server, but they may be retried later. This will persist for 24 to 48 hours.
|
56
|
+
],
|
57
|
+
'rejected' => [
|
58
|
+
'DNS-P1', # Your SMTP MAIL FROM domain does not exist.
|
59
|
+
'DNS-P2', # Your SMTP MAIL FROM domain does not have an MX record.
|
60
|
+
'DNS-T1', # Your SMTP MAIL FROM domain exists but does not currently resolve.
|
61
|
+
'DNS-P3', # Your mail server does not have a reverse DNS record.
|
62
|
+
'DNS-T2', # You mail server's reverse DNS record does not currently resolve.
|
63
|
+
],
|
64
|
+
'systemerror' => [
|
65
|
+
'CON-T1', # Facebook's mail server currently has too many connections open to allow another one.
|
66
|
+
],
|
67
|
+
'undefined' => [
|
68
|
+
'RCP-T1', # The attempted recipient address is not currently available due to an internal system issue. This is a temporary condition.
|
69
|
+
'MSG-T1', # The number of recipients on the message exceeds Facebook's allowed maximum.
|
70
|
+
'CON-T2', # Your mail server currently has too many connections open to Facebook's mail servers.
|
71
|
+
'CON-T3', # Your mail server has opened too many new connections to Facebook's mail servers in a short period of time.
|
72
|
+
'CON-T4', # Your mail server has exceeded the maximum number of recipients for its current connection.
|
73
|
+
],
|
74
|
+
'suspend' => [
|
75
|
+
'RCP-T4', # The attempted recipient address is currently deactivated. The user may or may not reactivate it.
|
76
|
+
],
|
77
|
+
}
|
78
|
+
Indicators = Sisimai::MSP.INDICATORS
|
79
|
+
LongFields = Sisimai::RFC5322.LONGFIELDS
|
80
|
+
RFC822Head = Sisimai::RFC5322.HEADERFIELDS
|
81
|
+
|
82
|
+
def description; return 'Facebook: https://www.facebook.com'; end
|
83
|
+
def smtpagent; return 'US::Facebook'; end
|
84
|
+
def headerlist; return []; end
|
85
|
+
def pattern; return Re0; end
|
86
|
+
|
87
|
+
# Parse bounce messages from Facebook
|
88
|
+
# @param [Hash] mhead Message header of a bounce email
|
89
|
+
# @options mhead [String] from From header
|
90
|
+
# @options mhead [String] date Date header
|
91
|
+
# @options mhead [String] subject Subject header
|
92
|
+
# @options mhead [Array] received Received headers
|
93
|
+
# @options mhead [String] others Other required headers
|
94
|
+
# @param [String] mbody Message body of a bounce email
|
95
|
+
# @return [Hash, Nil] Bounce data list and message/rfc822
|
96
|
+
# part or nil if it failed to parse or
|
97
|
+
# the arguments are missing
|
98
|
+
def scan(mhead, mbody)
|
99
|
+
return nil unless mhead
|
100
|
+
return nil unless mbody
|
101
|
+
return nil unless mhead['from'] =~ Re0[:from]
|
102
|
+
return nil unless mhead['subject'] =~ Re0[:subject]
|
103
|
+
|
104
|
+
dscontents = []; dscontents << Sisimai::MSP.DELIVERYSTATUS
|
105
|
+
hasdivided = mbody.split("\n")
|
106
|
+
havepassed = [''];
|
107
|
+
rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
|
108
|
+
rfc822part = '' # (String) message/rfc822-headers part
|
109
|
+
previousfn = '' # (String) Previous field name
|
110
|
+
readcursor = 0 # (Integer) Points the current cursor position
|
111
|
+
recipients = 0 # (Integer) The number of 'Final-Recipient' header
|
112
|
+
fbresponse = '' # (String) Response code from Facebook
|
113
|
+
connvalues = 0 # (Integer) Flag, 1 if all the value of $connheader have been set
|
114
|
+
connheader = {
|
115
|
+
'date' => '', # The value of Arrival-Date header
|
116
|
+
'lhost' => '', # The value of Reporting-MTA header
|
117
|
+
}
|
118
|
+
v = nil
|
119
|
+
|
120
|
+
hasdivided.each do |e|
|
121
|
+
# Save the current line for the next loop
|
122
|
+
havepassed << e; p = havepassed[-2]
|
123
|
+
|
124
|
+
if readcursor == 0
|
125
|
+
# Beginning of the bounce message or delivery status part
|
126
|
+
if e =~ Re1[:begin]
|
127
|
+
readcursor |= Indicators[:'deliverystatus']
|
128
|
+
next
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
if readcursor & Indicators[:'message-rfc822'] == 0
|
133
|
+
# Beginning of the original message part
|
134
|
+
if e =~ Re1[:rfc822]
|
135
|
+
readcursor |= Indicators[:'message-rfc822']
|
136
|
+
next
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
if readcursor & Indicators[:'message-rfc822'] > 0
|
141
|
+
# After "message/rfc822"
|
142
|
+
if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*.+\z/)
|
143
|
+
# Get required headers only
|
144
|
+
lhs = cv[1].downcase
|
145
|
+
previousfn = ''
|
146
|
+
next unless RFC822Head.key?(lhs)
|
147
|
+
|
148
|
+
previousfn = lhs
|
149
|
+
rfc822part += e + "\n"
|
150
|
+
|
151
|
+
elsif e =~ /\A[ \t]+/
|
152
|
+
# Continued line from the previous line
|
153
|
+
next if rfc822next[previousfn]
|
154
|
+
rfc822part += e + "\n" if LongFields.key?(previousfn)
|
155
|
+
|
156
|
+
else
|
157
|
+
# Check the end of headers in rfc822 part
|
158
|
+
next unless LongFields.key?(previousfn)
|
159
|
+
next unless e.empty?
|
160
|
+
rfc822next[previousfn] = true
|
161
|
+
end
|
162
|
+
|
163
|
+
else
|
164
|
+
# Before "message/rfc822"
|
165
|
+
next if readcursor & Indicators[:'deliverystatus'] == 0
|
166
|
+
next if e.empty?
|
167
|
+
|
168
|
+
if connvalues == connheader.keys.size
|
169
|
+
# Reporting-MTA: dns; 10.138.205.200
|
170
|
+
# Arrival-Date: Thu, 23 Jun 2011 02:29:43 -0700
|
171
|
+
v = dscontents[-1]
|
172
|
+
|
173
|
+
if cv = e.match(/\A[Ff]inal-[Rr]ecipient:[ ]*(?:RFC|rfc)822;[ ]*([^ ]+)\z/)
|
174
|
+
# Final-Recipient: RFC822; userunknown@example.jp
|
175
|
+
if v['recipient']
|
176
|
+
# There are multiple recipient addresses in the message body.
|
177
|
+
dscontents << Sisimai::MSP.DELIVERYSTATUS
|
178
|
+
v = dscontents[-1]
|
179
|
+
end
|
180
|
+
v['recipient'] = cv[1]
|
181
|
+
recipients += 1
|
182
|
+
|
183
|
+
elsif cv = e.match(/\A[Xx]-[Aa]ctual-[Rr]ecipient:[ ]*(?:RFC|rfc)822;[ ]*(.+)\z/)
|
184
|
+
# X-Actual-Recipient: RFC822; kijitora@example.co.jp
|
185
|
+
v['alias'] = cv[1]
|
186
|
+
|
187
|
+
elsif cv = e.match(/\A[Aa]ction:[ ]*(.+)\z/)
|
188
|
+
# Action: failed
|
189
|
+
v['action'] = cv[1].downcase
|
190
|
+
|
191
|
+
elsif cv = e.match(/\A[Ss]tatus:[ ]*(\d[.]\d+[.]\d+)/)
|
192
|
+
# Status: 5.1.1
|
193
|
+
# Status:5.2.0
|
194
|
+
# Status: 5.1.0 (permanent failure)
|
195
|
+
v['status'] = cv[1]
|
196
|
+
|
197
|
+
elsif cv = e.match(/\A[Rr]emote-MTA:[ ]*(?:DNS|dns);[ ]*(.+)\z/)
|
198
|
+
# Remote-MTA: DNS; mx.example.jp
|
199
|
+
v['rhost'] = cv[1].downcase
|
200
|
+
|
201
|
+
elsif cv = e.match(/\A[Ll]ast-[Aa]ttempt-[Dd]ate:[ ]*(.+)\z/)
|
202
|
+
# Last-Attempt-Date: Fri, 14 Feb 2014 12:30:08 -0500
|
203
|
+
v['date'] = cv[1]
|
204
|
+
|
205
|
+
else
|
206
|
+
if cv = e.match(/\A[Dd]iagnostic-[Cc]ode:[ ]*(.+?);[ ]*(.+)\z/)
|
207
|
+
# Diagnostic-Code: smtp; 550 5.1.1 RCP-P2
|
208
|
+
# http://postmaster.facebook.com/response_codes?ip=192.0.2.135#rcp Refused due to recipient preferences
|
209
|
+
v['spec'] = cv[1].upcase
|
210
|
+
v['diagnosis'] = cv[2]
|
211
|
+
|
212
|
+
elsif p =~ /\A[Dd]iagnostic-[Cc]ode:[ ]*/ && cv = e.match(/\A[ \t]+(.+)\z/)
|
213
|
+
# Continued line of the value of Diagnostic-Code header
|
214
|
+
v['diagnosis'] ||= ''
|
215
|
+
v['diagnosis'] += ' ' + cv[1]
|
216
|
+
havepassed[-1] = 'Diagnostic-Code: ' + e
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
else
|
221
|
+
if cv = e.match(/\A[Rr]eporting-MTA:[ ]*(?:DNS|dns);[ ]*(.+)\z/)
|
222
|
+
# Reporting-MTA: dns; mx.example.jp
|
223
|
+
next if connheader['lhost'].size > 0
|
224
|
+
connheader['lhost'] = cv[1].downcase
|
225
|
+
connvalues += 1
|
226
|
+
|
227
|
+
elsif cv = e.match(/\A[Aa]rrival-[Dd]ate:[ ]*(.+)\z/)
|
228
|
+
# Arrival-Date: Wed, 29 Apr 2009 16:03:18 +0900
|
229
|
+
next if connheader['date'].size > 0
|
230
|
+
connheader['date'] = cv[1]
|
231
|
+
connvalues += 1
|
232
|
+
end
|
233
|
+
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
return nil if recipients == 0
|
239
|
+
require 'sisimai/string'
|
240
|
+
require 'sisimai/smtp/status'
|
241
|
+
|
242
|
+
dscontents.map do |e|
|
243
|
+
e['lhost'] ||= connheader['lhost']
|
244
|
+
|
245
|
+
if mhead['received'].size > 0
|
246
|
+
# Get localhost and remote host name from Received header.
|
247
|
+
r0 = mhead['received']
|
248
|
+
%w|lhost rhost|.each { |a| e[a] ||= '' }
|
249
|
+
e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
|
250
|
+
e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
|
251
|
+
end
|
252
|
+
e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
|
253
|
+
|
254
|
+
if cv = e['diagnosis'].match(/\b([A-Z]{3})[-]([A-Z])(\d)\b/)
|
255
|
+
# Diagnostic-Code: smtp; 550 5.1.1 RCP-P2
|
256
|
+
lhs = cv[1]
|
257
|
+
rhs = cv[2]
|
258
|
+
num = cv[3]
|
259
|
+
|
260
|
+
fbresponse = sprintf("%s-%s%d", lhs, rhs, num)
|
261
|
+
e['softbounce'] = rhs == 'P' ? 0 : 1
|
262
|
+
end
|
263
|
+
|
264
|
+
catch :SESSION do
|
265
|
+
ReFailure.each_key do |r|
|
266
|
+
# Verify each regular expression of session errors
|
267
|
+
ReFailure[r].each do |rr|
|
268
|
+
# Check each regular expression
|
269
|
+
next unless fbresponse == rr
|
270
|
+
e['reason'] = r
|
271
|
+
throw :SESSION
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
unless e['reason']
|
277
|
+
# http://postmaster.facebook.com/response_codes
|
278
|
+
# Facebook System Resource Issues
|
279
|
+
# These codes indicate a temporary issue internal to Facebook's
|
280
|
+
# system. Administrators observing these issues are not required to
|
281
|
+
# take any action to correct them.
|
282
|
+
if fbresponse =~ /\AINT-T\d+\z/
|
283
|
+
# * INT-Tx
|
284
|
+
#
|
285
|
+
# https://groups.google.com/forum/#!topic/cdmix/eXfi4ddgYLQ
|
286
|
+
# This block has not been tested because we have no email sample
|
287
|
+
# including "INT-T?" error code.
|
288
|
+
e['reason'] = 'systemerror'
|
289
|
+
e['softbounce'] = 1
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
e['status'] = Sisimai::SMTP::Status.find(e['diagnosis'])
|
294
|
+
e['spec'] = e['reason'] == 'mailererror' ? 'X-UNIX' : 'SMTP'
|
295
|
+
e['action'] = 'failed' if e['status'] =~ /\A[45]/
|
296
|
+
e['agent'] = Sisimai::MSP::US::Facebook.smtpagent
|
297
|
+
end
|
298
|
+
|
299
|
+
return { 'ds' => dscontents, 'rfc822' => rfc822part }
|
300
|
+
end
|
301
|
+
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
@@ -0,0 +1,357 @@
|
|
1
|
+
module Sisimai
|
2
|
+
module MSP::US
|
3
|
+
# Sisimai::MSP::US::Google parses a bounce email which created by Gmail.
|
4
|
+
# Methods in the module are called from only Sisimai::Message.
|
5
|
+
module Google
|
6
|
+
# Imported from p5-Sisimail/lib/Sisimai/MSP/US/Google.pm
|
7
|
+
class << self
|
8
|
+
require 'sisimai/msp'
|
9
|
+
require 'sisimai/rfc5322'
|
10
|
+
|
11
|
+
Re0 = {
|
12
|
+
:from => %r/[@]googlemail[.]com[>]?\z/,
|
13
|
+
:subject => %r/Delivery[ ]Status[ ]Notification/,
|
14
|
+
}
|
15
|
+
Re1 = {
|
16
|
+
:begin => %r/Delivery to the following recipient/,
|
17
|
+
:start => %r/Technical details of (?:permanent|temporary) failure:/,
|
18
|
+
:error => %r/The error that the other server returned was:/,
|
19
|
+
:rfc822 => %r{\A(?:
|
20
|
+
-----[ ]Original[ ]message[ ]-----
|
21
|
+
|[ \t]*-----[ ]Message[ ]header[ ]follows[ ]-----
|
22
|
+
)\z
|
23
|
+
}x,
|
24
|
+
:endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
|
25
|
+
}
|
26
|
+
ReFailure = {
|
27
|
+
'expired' => %r{(?:
|
28
|
+
DNS[ ]Error:[ ]Could[ ]not[ ]contact[ ]DNS[ ]servers
|
29
|
+
|Delivery[ ]to[ ]the[ ]following[ ]recipient[ ]has[ ]been[ ]delayed
|
30
|
+
|The[ ]recipient[ ]server[ ]did[ ]not[ ]accept[ ]our[ ]requests[ ]to[ ]connect
|
31
|
+
)
|
32
|
+
}x,
|
33
|
+
'hostunknown' => %r{DNS[ ]Error:[ ](?:
|
34
|
+
Domain[ ]name[ ]not[ ]found
|
35
|
+
|DNS[ ]server[ ]returned[ ]answer[ ]with[ ]no[ ]data
|
36
|
+
)
|
37
|
+
}x,
|
38
|
+
}
|
39
|
+
StateTable = {
|
40
|
+
# Technical details of permanent failure:
|
41
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
42
|
+
# We recommend contacting the other email provider for further information about the
|
43
|
+
# cause of this error. The error that the other server returned was:
|
44
|
+
# 500 Remote server does not support TLS (state 6).
|
45
|
+
'6' => { 'command' => 'MAIL', 'reason' => 'systemerror' },
|
46
|
+
|
47
|
+
# http://www.google.td/support/forum/p/gmail/thread?tid=08a60ebf5db24f7b&hl=en
|
48
|
+
# Technical details of permanent failure:
|
49
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
50
|
+
# We recommend contacting the other email provider for further information about the
|
51
|
+
# cause of this error. The error that the other server returned was:
|
52
|
+
# 535 SMTP AUTH failed with the remote server. (state 8).
|
53
|
+
'8' => { 'command' => 'AUTH', 'reason' => 'systemerror' },
|
54
|
+
|
55
|
+
# http://www.google.co.nz/support/forum/p/gmail/thread?tid=45208164dbca9d24&hl=en
|
56
|
+
# Technical details of temporary failure:
|
57
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
58
|
+
# We recommend contacting the other email provider for further information about the
|
59
|
+
# cause of this error. The error that the other server returned was:
|
60
|
+
# 454 454 TLS missing certificate: error:0200100D:system library:fopen:Permission denied (#4.3.0) (state 9).
|
61
|
+
'9' => { 'command' => 'AUTH', 'reason' => 'systemerror' },
|
62
|
+
|
63
|
+
# http://www.google.com/support/forum/p/gmail/thread?tid=5cfab8c76ec88638&hl=en
|
64
|
+
# Technical details of permanent failure:
|
65
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
66
|
+
# We recommend contacting the other email provider for further information about the
|
67
|
+
# cause of this error. The error that the other server returned was:
|
68
|
+
# 500 Remote server does not support SMTP Authenticated Relay (state 12).
|
69
|
+
'12' => { 'command' => 'AUTH', 'reason' => 'relayingdenied' },
|
70
|
+
|
71
|
+
# Technical details of permanent failure:
|
72
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
73
|
+
# We recommend contacting the other email provider for further information about the
|
74
|
+
# cause of this error. The error that the other server returned was:
|
75
|
+
# 550 550 5.7.1 <****@gmail.com>... Access denied (state 13).
|
76
|
+
'13' => { 'command' => 'EHLO', 'reason' => 'blocked' },
|
77
|
+
|
78
|
+
# Technical details of permanent failure:
|
79
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
80
|
+
# We recommend contacting the other email provider for further information about the
|
81
|
+
# cause of this error. The error that the other server returned was:
|
82
|
+
# 550 550 5.1.1 <******@*********.**>... User Unknown (state 14).
|
83
|
+
# 550 550 5.2.2 <*****@****.**>... Mailbox Full (state 14).
|
84
|
+
#
|
85
|
+
'14' => { 'command' => 'RCPT', 'reason' => 'userunknown' },
|
86
|
+
|
87
|
+
# http://www.google.cz/support/forum/p/gmail/thread?tid=7090cbfd111a24f9&hl=en
|
88
|
+
# Technical details of permanent failure:
|
89
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
90
|
+
# We recommend contacting the other email provider for further information about the
|
91
|
+
# cause of this error. The error that the other server returned was:
|
92
|
+
# 550 550 5.7.1 SPF unauthorized mail is prohibited. (state 15).
|
93
|
+
# 554 554 Error: no valid recipients (state 15).
|
94
|
+
'15' => { 'command' => 'DATA', 'reason' => 'filtered' },
|
95
|
+
|
96
|
+
# http://www.google.com/support/forum/p/Google%20Apps/thread?tid=0aac163bc9c65d8e&hl=en
|
97
|
+
# Technical details of permanent failure:
|
98
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
99
|
+
# We recommend contacting the other email provider for further information about the
|
100
|
+
# cause of this error. The error that the other server returned was:
|
101
|
+
# 550 550 <****@***.**> No such user here (state 17).
|
102
|
+
# 550 550 #5.1.0 Address rejected ***@***.*** (state 17).
|
103
|
+
'17' => { 'command' => 'DATA', 'reason' => 'filtered' },
|
104
|
+
|
105
|
+
# Technical details of permanent failure:
|
106
|
+
# Google tried to deliver your message, but it was rejected by the recipient domain.
|
107
|
+
# We recommend contacting the other email provider for further information about the
|
108
|
+
# cause of this error. The error that the other server returned was:
|
109
|
+
# 550 550 Unknown user *****@***.**.*** (state 18).
|
110
|
+
'18' => { 'command' => 'DATA', 'reason' => 'filtered' },
|
111
|
+
}
|
112
|
+
Indicators = Sisimai::MSP.INDICATORS
|
113
|
+
LongFields = Sisimai::RFC5322.LONGFIELDS
|
114
|
+
RFC822Head = Sisimai::RFC5322.HEADERFIELDS
|
115
|
+
|
116
|
+
def description; return 'Google Gmail: https://mail.google.com'; end
|
117
|
+
def smtpagent; return 'US::Google'; end
|
118
|
+
def headerlist; return ['X-Failed-Recipients']; end
|
119
|
+
def pattern; return Re0; end
|
120
|
+
|
121
|
+
# Parse bounce messages from Google Gmail
|
122
|
+
# @param [Hash] mhead Message header of a bounce email
|
123
|
+
# @options mhead [String] from From header
|
124
|
+
# @options mhead [String] date Date header
|
125
|
+
# @options mhead [String] subject Subject header
|
126
|
+
# @options mhead [Array] received Received headers
|
127
|
+
# @options mhead [String] others Other required headers
|
128
|
+
# @param [String] mbody Message body of a bounce email
|
129
|
+
# @return [Hash, Nil] Bounce data list and message/rfc822
|
130
|
+
# part or nil if it failed to parse or
|
131
|
+
# the arguments are missing
|
132
|
+
def scan(mhead, mbody)
|
133
|
+
return nil unless mhead
|
134
|
+
return nil unless mbody
|
135
|
+
|
136
|
+
# Google Mail
|
137
|
+
# From: Mail Delivery Subsystem <mailer-daemon@googlemail.com>
|
138
|
+
# Received: from vw-in-f109.1e100.net [74.125.113.109] by ...
|
139
|
+
#
|
140
|
+
# * Check the body part
|
141
|
+
# This is an automatically generated Delivery Status Notification
|
142
|
+
# Delivery to the following recipient failed permanently:
|
143
|
+
#
|
144
|
+
# recipient-address-here@example.jp
|
145
|
+
#
|
146
|
+
# Technical details of permanent failure:
|
147
|
+
# Google tried to deliver your message, but it was rejected by the
|
148
|
+
# recipient domain. We recommend contacting the other email provider
|
149
|
+
# for further information about the cause of this error. The error
|
150
|
+
# that the other server returned was:
|
151
|
+
# 550 550 <recipient-address-heare@example.jp>: User unknown (state 14).
|
152
|
+
#
|
153
|
+
# -- OR --
|
154
|
+
# THIS IS A WARNING MESSAGE ONLY.
|
155
|
+
#
|
156
|
+
# YOU DO NOT NEED TO RESEND YOUR MESSAGE.
|
157
|
+
#
|
158
|
+
# Delivery to the following recipient has been delayed:
|
159
|
+
#
|
160
|
+
# mailboxfull@example.jp
|
161
|
+
#
|
162
|
+
# Message will be retried for 2 more day(s)
|
163
|
+
#
|
164
|
+
# Technical details of temporary failure:
|
165
|
+
# Google tried to deliver your message, but it was rejected by the recipient
|
166
|
+
# domain. We recommend contacting the other email provider for further infor-
|
167
|
+
# mation about the cause of this error. The error that the other server re-
|
168
|
+
# turned was: 450 450 4.2.2 <mailboxfull@example.jp>... Mailbox Full (state 14).
|
169
|
+
#
|
170
|
+
# -- OR --
|
171
|
+
#
|
172
|
+
# Delivery to the following recipient failed permanently:
|
173
|
+
#
|
174
|
+
# userunknown@example.jp
|
175
|
+
#
|
176
|
+
# Technical details of permanent failure:=20
|
177
|
+
# Google tried to deliver your message, but it was rejected by the server for=
|
178
|
+
# the recipient domain example.jp by mx.example.jp. [192.0.2.59].
|
179
|
+
#
|
180
|
+
# The error that the other server returned was:
|
181
|
+
# 550 5.1.1 <userunknown@example.jp>... User Unknown
|
182
|
+
#
|
183
|
+
return nil unless mhead['from'] =~ Re0[:from]
|
184
|
+
return nil unless mhead['subject'] =~ Re0[:subject]
|
185
|
+
|
186
|
+
require 'sisimai/address'
|
187
|
+
dscontents = []; dscontents << Sisimai::MSP.DELIVERYSTATUS
|
188
|
+
hasdivided = mbody.split("\n")
|
189
|
+
rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
|
190
|
+
rfc822part = '' # (String) message/rfc822-headers part
|
191
|
+
previousfn = '' # (String) Previous field name
|
192
|
+
readcursor = 0 # (Integer) Points the current cursor position
|
193
|
+
recipients = 0 # (Integer) The number of 'Final-Recipient' header
|
194
|
+
statecode0 = 0 # (Integer) The value of (state *) in the error message
|
195
|
+
v = nil
|
196
|
+
|
197
|
+
hasdivided.each do |e|
|
198
|
+
if readcursor == 0
|
199
|
+
# Beginning of the bounce message or delivery status part
|
200
|
+
if e =~ Re1[:begin]
|
201
|
+
readcursor |= Indicators[:'deliverystatus']
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
if readcursor & Indicators[:'message-rfc822'] == 0
|
206
|
+
# Beginning of the original message part
|
207
|
+
if e =~ Re1[:rfc822]
|
208
|
+
readcursor |= Indicators[:'message-rfc822']
|
209
|
+
next
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
if readcursor & Indicators[:'message-rfc822'] > 0
|
214
|
+
# After "message/rfc822"
|
215
|
+
if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*.+\z/)
|
216
|
+
# Skip if DKIM-Signature header
|
217
|
+
next if e =~ /\ADKIM-Signature[:]/
|
218
|
+
|
219
|
+
# Get required headers only
|
220
|
+
lhs = cv[1].downcase
|
221
|
+
previousfn = ''
|
222
|
+
next unless RFC822Head.key?(lhs)
|
223
|
+
|
224
|
+
previousfn = lhs
|
225
|
+
rfc822part += e + "\n"
|
226
|
+
|
227
|
+
elsif e =~ /\A[ \t]+/
|
228
|
+
# Continued line from the previous line
|
229
|
+
next if rfc822next[previousfn]
|
230
|
+
rfc822part += e + "\n" if LongFields.key?(previousfn)
|
231
|
+
|
232
|
+
else
|
233
|
+
# Check the end of headers in rfc822 part
|
234
|
+
next unless LongFields.key?(previousfn)
|
235
|
+
next unless e.empty?
|
236
|
+
rfc822next[previousfn] = true
|
237
|
+
end
|
238
|
+
|
239
|
+
else
|
240
|
+
# Before "message/rfc822"
|
241
|
+
next if readcursor & Indicators[:'deliverystatus'] == 0
|
242
|
+
next if e.empty?
|
243
|
+
|
244
|
+
# Technical details of permanent failure:=20
|
245
|
+
# Google tried to deliver your message, but it was rejected by the recipient =
|
246
|
+
# domain. We recommend contacting the other email provider for further inform=
|
247
|
+
# ation about the cause of this error. The error that the other server return=
|
248
|
+
# ed was: 554 554 5.7.0 Header error (state 18).
|
249
|
+
#
|
250
|
+
# -- OR --
|
251
|
+
#
|
252
|
+
# Technical details of permanent failure:=20
|
253
|
+
# Google tried to deliver your message, but it was rejected by the server for=
|
254
|
+
# the recipient domain example.jp by mx.example.jp. [192.0.2.49].
|
255
|
+
#
|
256
|
+
# The error that the other server returned was:
|
257
|
+
# 550 5.1.1 <userunknown@example.jp>... User Unknown
|
258
|
+
#
|
259
|
+
v = dscontents[-1]
|
260
|
+
|
261
|
+
if cv = e.match(/\A[ \t]+([^ ]+[@][^ ]+)\z/)
|
262
|
+
# kijitora@example.jp: 550 5.2.2 <kijitora@example>... Mailbox Full
|
263
|
+
if v['recipient']
|
264
|
+
# There are multiple recipient addresses in the message body.
|
265
|
+
dscontents << Sisimai::MSP.DELIVERYSTATUS
|
266
|
+
v = dscontents[-1]
|
267
|
+
end
|
268
|
+
|
269
|
+
addr0 = Sisimai::Address.s3s4(cv[1])
|
270
|
+
if Sisimai::RFC5322.is_emailaddress(addr0)
|
271
|
+
v['recipient'] = addr0
|
272
|
+
recipients += 1
|
273
|
+
end
|
274
|
+
|
275
|
+
else
|
276
|
+
if cv = e.match(/Technical details of (.+) failure:/)
|
277
|
+
# Technical details of permanent failure:
|
278
|
+
# Technical details of temporary failure:
|
279
|
+
v['softbounce'] = cv[1] == 'permanent' ? 0 : 1
|
280
|
+
end
|
281
|
+
v['diagnosis'] ||= ''
|
282
|
+
v['diagnosis'] += e + ' '
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
return nil if recipients == 0
|
288
|
+
require 'sisimai/string'
|
289
|
+
require 'sisimai/smtp/status'
|
290
|
+
|
291
|
+
dscontents.map do |e|
|
292
|
+
e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
|
293
|
+
|
294
|
+
unless e['rhost']
|
295
|
+
# Get the value of remote host
|
296
|
+
if cv = e['diagnosis'].match(/[ \t]+by[ \t]+([^ ]+)[.][ \t]+\[(\d+[.]\d+[.]\d+[.]\d+)\][.]/)
|
297
|
+
# Google tried to deliver your message, but it was rejected by
|
298
|
+
# the server for the recipient domain example.jp by mx.example.jp. [192.0.2.153].
|
299
|
+
hostname = cv[1]
|
300
|
+
ipv4addr = cv[2]
|
301
|
+
if hostname =~ /[-0-9a-zA-Z]+[.][a-zA-Z]+\z/
|
302
|
+
# Maybe valid hostname
|
303
|
+
e['rhost'] = hostname.downcase
|
304
|
+
else
|
305
|
+
# Use IP address instead
|
306
|
+
e['rhost'] = ipv4addr
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
if mhead['received'].size > 0
|
312
|
+
# Get localhost and remote host name from Received header.
|
313
|
+
r0 = mhead['received']
|
314
|
+
%w|lhost rhost|.each { |a| e[a] ||= '' }
|
315
|
+
e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
|
316
|
+
e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
|
317
|
+
end
|
318
|
+
|
319
|
+
if cv = e['diagnosis'].match(/[(]state[ ](\d+)[)][.]/)
|
320
|
+
statecode0 = cv[1]
|
321
|
+
end
|
322
|
+
if StateTable[statecode0]
|
323
|
+
# (state *)
|
324
|
+
e['reason'] = StateTable[statecode0]['reason']
|
325
|
+
e['command'] = StateTable[statecode0]['command']
|
326
|
+
|
327
|
+
else
|
328
|
+
# No state code
|
329
|
+
ReFailure.each_key do |r|
|
330
|
+
# Verify each regular expression of session errors
|
331
|
+
next unless e['diagnosis'] =~ ReFailure[r]
|
332
|
+
e['reason'] = r
|
333
|
+
break
|
334
|
+
end
|
335
|
+
end
|
336
|
+
e['status'] = Sisimai::SMTP::Status.find(e['diagnosis'])
|
337
|
+
|
338
|
+
if e['reason']
|
339
|
+
# Set pseudo status code
|
340
|
+
if e['status'] =~ /\A[45][.][1-7][.][1-9]\z/
|
341
|
+
# Override bounce reason
|
342
|
+
e['reason'] = Sisimai::SMTP::Status.name(e['status'])
|
343
|
+
end
|
344
|
+
end
|
345
|
+
e['spec'] = e['reason'] == 'mailererror' ? 'X-UNIX' : 'SMTP'
|
346
|
+
e['action'] = 'failed' if e['status'] =~ /\A[45]/
|
347
|
+
e['agent'] = Sisimai::MSP::US::Google.smtpagent
|
348
|
+
end
|
349
|
+
|
350
|
+
return { 'ds' => dscontents, 'rfc822' => rfc822part }
|
351
|
+
end
|
352
|
+
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|