sisimai 4.14.2
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 +165 -0
- data/.travis.yml +21 -0
- data/ANALYTICAL-PRECISION +54 -0
- data/Changes +5 -0
- data/Developers.mk +129 -0
- data/Gemfile +9 -0
- data/LICENSE +26 -0
- data/Makefile +56 -0
- data/README.md +300 -0
- data/Rakefile +7 -0
- data/Repository.mk +69 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/sisimai.rb +60 -0
- data/lib/sisimai/address.rb +218 -0
- data/lib/sisimai/arf.rb +343 -0
- data/lib/sisimai/data.rb +413 -0
- data/lib/sisimai/data/json.rb +36 -0
- data/lib/sisimai/data/yaml.rb +32 -0
- data/lib/sisimai/datetime.rb +518 -0
- data/lib/sisimai/mail.rb +82 -0
- data/lib/sisimai/mail/maildir.rb +85 -0
- data/lib/sisimai/mail/mbox.rb +69 -0
- data/lib/sisimai/mail/stdin.rb +52 -0
- data/lib/sisimai/mda.rb +152 -0
- data/lib/sisimai/message.rb +510 -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/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/outlook.rb +243 -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 +55 -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 +217 -0
- data/lib/sisimai/reason.rb +235 -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 +74 -0
- data/lib/sisimai/reason/mailboxfull.rb +118 -0
- data/lib/sisimai/reason/mailererror.rb +55 -0
- data/lib/sisimai/reason/mesgtoobig.rb +77 -0
- data/lib/sisimai/reason/networkerror.rb +57 -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 +81 -0
- data/lib/sisimai/smtp/status.rb +755 -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/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/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-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-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.gemspec +25 -0
- metadata +647 -0
@@ -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
|
+
['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
|
+
|
@@ -0,0 +1,243 @@
|
|
1
|
+
module Sisimai
|
2
|
+
module MSP::US
|
3
|
+
# Sisimai::MSP::US::Outlook parses a bounce email which created by Microsoft
|
4
|
+
# Outlook.com. Methods in the module are called from only Sisimai::Message.
|
5
|
+
module Outlook
|
6
|
+
# Imported from p5-Sisimail/lib/Sisimai/MSP/US/Outlook.pm
|
7
|
+
class << self
|
8
|
+
require 'sisimai/msp'
|
9
|
+
require 'sisimai/rfc5322'
|
10
|
+
|
11
|
+
Re0 = {
|
12
|
+
:from => %r/postmaster[@]/,
|
13
|
+
:subject => %r/Delivery Status Notification/,
|
14
|
+
:received => %r/.+[.]hotmail[.]com\b/,
|
15
|
+
}
|
16
|
+
Re1 = {
|
17
|
+
:begin => %r/\AThis is an automatically generated Delivery Status Notification/,
|
18
|
+
:error => %r/\A[.]+ while talking to .+[:]\z/,
|
19
|
+
:rfc822 => %r|\AContent-Type: message/rfc822\z|,
|
20
|
+
:endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
|
21
|
+
}
|
22
|
+
ReFailure = {
|
23
|
+
'hostunknown' => %r/The mail could not be delivered to the recipient because the domain is not reachable/,
|
24
|
+
'userunknown' => %r/Requested action not taken: mailbox unavailable/,
|
25
|
+
}
|
26
|
+
Indicators = Sisimai::MSP.INDICATORS
|
27
|
+
LongFields = Sisimai::RFC5322.LONGFIELDS
|
28
|
+
RFC822Head = Sisimai::RFC5322.HEADERFIELDS
|
29
|
+
|
30
|
+
def description; return 'Microsoft Outlook.com: https://www.outlook.com/'; end
|
31
|
+
def smtpagent; return 'US::Outlook'; end
|
32
|
+
|
33
|
+
# X-Message-Delivery: Vj0xLjE7RD0wO0dEPTA7U0NMPTk7bD0xO3VzPTE=
|
34
|
+
# X-Message-Info: AuEzbeVr9u5fkDpn2vR5iCu5wb6HBeY4iruBjnutBzpStnUabbM...
|
35
|
+
def headerlist; return ['X-Message-Delivery', 'X-Message-Info']; end
|
36
|
+
def pattern; return Re0; end
|
37
|
+
|
38
|
+
# Parse bounce messages from Microsoft Outlook.com
|
39
|
+
# @param [Hash] mhead Message header of a bounce email
|
40
|
+
# @options mhead [String] from From header
|
41
|
+
# @options mhead [String] date Date header
|
42
|
+
# @options mhead [String] subject Subject header
|
43
|
+
# @options mhead [Array] received Received headers
|
44
|
+
# @options mhead [String] others Other required headers
|
45
|
+
# @param [String] mbody Message body of a bounce email
|
46
|
+
# @return [Hash, Nil] Bounce data list and message/rfc822
|
47
|
+
# part or nil if it failed to parse or
|
48
|
+
# the arguments are missing
|
49
|
+
def scan(mhead, mbody)
|
50
|
+
return nil unless mhead
|
51
|
+
return nil unless mbody
|
52
|
+
|
53
|
+
match = 0
|
54
|
+
match += 1 if mhead['subject'] =~ Re0[:subject]
|
55
|
+
match += 1 if mhead['x-message-delivery']
|
56
|
+
match += 1 if mhead['x-message-info']
|
57
|
+
match += 1 if mhead['received'].find { |a| a =~ Re0[:received] }
|
58
|
+
return nil if match < 2
|
59
|
+
|
60
|
+
require 'sisimai/rfc5322'
|
61
|
+
dscontents = []; dscontents << Sisimai::MSP.DELIVERYSTATUS
|
62
|
+
hasdivided = mbody.split("\n")
|
63
|
+
havepassed = [''];
|
64
|
+
rfc822next = { 'from' => false, 'to' => false, 'subject' => false }
|
65
|
+
rfc822part = '' # (String) message/rfc822-headers part
|
66
|
+
previousfn = '' # (String) Previous field name
|
67
|
+
readcursor = 0 # (Integer) Points the current cursor position
|
68
|
+
recipients = 0 # (Integer) The number of 'Final-Recipient' header
|
69
|
+
connvalues = 0 # (Integer) Flag, 1 if all the value of $connheader have been set
|
70
|
+
connheader = {
|
71
|
+
'date' => '', # The value of Arrival-Date header
|
72
|
+
'lhost' => '', # The value of Reporting-MTA header
|
73
|
+
}
|
74
|
+
v = nil
|
75
|
+
|
76
|
+
hasdivided.each do |e|
|
77
|
+
# Save the current line for the next loop
|
78
|
+
havepassed << e; p = havepassed[-2]
|
79
|
+
|
80
|
+
if readcursor == 0
|
81
|
+
# Beginning of the bounce message or delivery status part
|
82
|
+
if e =~ Re1[:begin]
|
83
|
+
readcursor |= Indicators[:'deliverystatus']
|
84
|
+
next
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
if readcursor & Indicators[:'message-rfc822'] == 0
|
89
|
+
# Beginning of the original message part
|
90
|
+
if e =~ Re1[:rfc822]
|
91
|
+
readcursor |= Indicators[:'message-rfc822']
|
92
|
+
next
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
if readcursor & Indicators[:'message-rfc822'] > 0
|
97
|
+
# After "message/rfc822"
|
98
|
+
if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*.+\z/)
|
99
|
+
# Get required headers only
|
100
|
+
lhs = cv[1].downcase
|
101
|
+
previousfn = ''
|
102
|
+
next unless RFC822Head.key?(lhs)
|
103
|
+
|
104
|
+
previousfn = lhs
|
105
|
+
rfc822part += e + "\n"
|
106
|
+
|
107
|
+
elsif e =~ /\A[ \t]+/
|
108
|
+
# Continued line from the previous line
|
109
|
+
next if rfc822next[previousfn]
|
110
|
+
rfc822part += e + "\n" if LongFields.key?(previousfn)
|
111
|
+
|
112
|
+
else
|
113
|
+
# Check the end of headers in rfc822 part
|
114
|
+
next unless LongFields.key?(previousfn)
|
115
|
+
next unless e.empty?
|
116
|
+
rfc822next[previousfn] = true
|
117
|
+
end
|
118
|
+
|
119
|
+
else
|
120
|
+
# Before "message/rfc822"
|
121
|
+
next if readcursor & Indicators[:'deliverystatus'] == 0
|
122
|
+
next if e.empty?
|
123
|
+
|
124
|
+
if connvalues == connheader.keys.size
|
125
|
+
# This is an automatically generated Delivery Status Notification.
|
126
|
+
#
|
127
|
+
# Delivery to the following recipients failed.
|
128
|
+
#
|
129
|
+
# kijitora@example.jp
|
130
|
+
#
|
131
|
+
# Final-Recipient: rfc822;kijitora@example.jp
|
132
|
+
# Action: failed
|
133
|
+
# Status: 5.2.2
|
134
|
+
# Diagnostic-Code: smtp;550 5.2.2 <kijitora@example.jp>... Mailbox Full
|
135
|
+
v = dscontents[-1]
|
136
|
+
|
137
|
+
if cv = e.match(/\A[Ff]inal-[Rr]ecipient:[ ]*(?:RFC|rfc)822;[ ]*([^ ]+)\z/)
|
138
|
+
# Final-Recipient: rfc822;kijitora@example.jp
|
139
|
+
if v['recipient']
|
140
|
+
# There are multiple recipient addresses in the message body.
|
141
|
+
dscontents << Sisimai::MSP.DELIVERYSTATUS
|
142
|
+
v = dscontents[-1]
|
143
|
+
end
|
144
|
+
v['recipient'] = cv[1]
|
145
|
+
recipients += 1
|
146
|
+
|
147
|
+
elsif cv = e.match(/\A[Aa]ction:[ ]*(.+)\z/)
|
148
|
+
# Action: failed
|
149
|
+
v['action'] = cv[1].downcase
|
150
|
+
|
151
|
+
elsif cv = e.match(/\A[Ss]tatus:[ ]*(\d[.]\d+[.]\d+)/)
|
152
|
+
# Status:5.2.0
|
153
|
+
v['status'] = cv[1]
|
154
|
+
|
155
|
+
else
|
156
|
+
if cv = e.match(/\A[Dd]iagnostic-[Cc]ode:[ ]*(.+?);[ ]*(.+)\z/)
|
157
|
+
# Diagnostic-Code: SMTP; 550 5.1.1 <userunknown@example.jp>... User Unknown
|
158
|
+
v['spec'] = cv[1].upcase
|
159
|
+
v['diagnosis'] = cv[2]
|
160
|
+
|
161
|
+
elsif p =~ /\A[Dd]iagnostic-[Cc]ode:[ ]*/ && cv = e.match(/\A[ \t]+(.+)\z/)
|
162
|
+
# Continued line of the value of Diagnostic-Code header
|
163
|
+
v['diagnosis'] ||= ''
|
164
|
+
v['diagnosis'] += ' ' + cv[1]
|
165
|
+
havepassed[-1] = 'Diagnostic-Code: ' + e
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
else
|
170
|
+
# Reporting-MTA: dns;BLU004-OMC3S13.hotmail.example.com
|
171
|
+
# Received-From-MTA: dns;BLU436-SMTP66
|
172
|
+
# Arrival-Date: Fri, 21 Nov 2014 14:17:34 -0800
|
173
|
+
if cv = e.match(/\A[Rr]eporting-MTA:[ ]*(?:DNS|dns);[ ]*(.+)\z/)
|
174
|
+
# Reporting-MTA: dns;BLU004-OMC3S13.hotmail.example.com
|
175
|
+
next if connheader['lhost'].size > 0
|
176
|
+
connheader['lhost'] = cv[1].downcase
|
177
|
+
connvalues += 1
|
178
|
+
|
179
|
+
elsif cv = e.match(/\A[Aa]rrival-[Dd]ate:[ ]*(.+)\z/)
|
180
|
+
# Arrival-Date: Wed, 29 Apr 2009 16:03:18 +0900
|
181
|
+
next if connheader['date'].size > 0
|
182
|
+
connheader['date'] = cv[1]
|
183
|
+
connvalues += 1
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
return nil if recipients == 0
|
190
|
+
require 'sisimai/string'
|
191
|
+
require 'sisimai/smtp/status'
|
192
|
+
|
193
|
+
dscontents.map do |e|
|
194
|
+
# Set default values if each value is empty.
|
195
|
+
connheader.each_key { |a| e[a] ||= connheader[a] || '' }
|
196
|
+
|
197
|
+
if mhead['received'].size > 0
|
198
|
+
# Get localhost and remote host name from Received header.
|
199
|
+
r0 = mhead['received']
|
200
|
+
['lhost', 'rhost'].each { |a| e[a] ||= '' }
|
201
|
+
e['lhost'] = Sisimai::RFC5322.received(r0[0]).shift if e['lhost'].empty?
|
202
|
+
e['rhost'] = Sisimai::RFC5322.received(r0[-1]).pop if e['rhost'].empty?
|
203
|
+
end
|
204
|
+
|
205
|
+
e['spec'] ||= 'SMTP'
|
206
|
+
e['agent'] = Sisimai::MSP::US::Outlook.smtpagent
|
207
|
+
e['diagnosis'] = Sisimai::String.sweep(e['diagnosis']) || ''
|
208
|
+
|
209
|
+
if e['diagnosis'].empty?
|
210
|
+
# No message in 'diagnosis'
|
211
|
+
if e['action'] == 'delayed'
|
212
|
+
# Set pseudo diagnostic code message for delaying
|
213
|
+
e['diagnosis'] = 'Delivery to the following recipients has been delayed.'
|
214
|
+
|
215
|
+
else
|
216
|
+
# Set pseudo diagnostic code message
|
217
|
+
e['diagnosis'] = 'Unable to deliver message to the following recipients, '
|
218
|
+
e['diagnosis'] += 'due to being unable to connect successfully to the destination mail server.'
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
ReFailure.each_key do |r|
|
223
|
+
# Verify each regular expression of session errors
|
224
|
+
next unless e['diagnosis'] =~ ReFailure[r]
|
225
|
+
e['reason'] = r
|
226
|
+
break
|
227
|
+
end
|
228
|
+
|
229
|
+
if e['status'].empty? || e['status'] =~ /\A\d[.]0[.]0\z/
|
230
|
+
# There is no value of Status header or the value is 5.0.0, 4.0.0
|
231
|
+
pseudostatus = Sisimai::SMTP::Status.find(e['diagnosis'])
|
232
|
+
e['status'] = pseudostatus if pseudostatus.size > 0
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
return { 'ds' => dscontents, 'rfc822' => rfc822part }
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|