sisimai 4.19.0 → 4.20.0
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 +4 -4
- data/.travis.yml +1 -0
- data/ANALYTICAL-PRECISION +8 -6
- data/Changes +15 -0
- data/Developers.mk +13 -1
- data/Makefile +3 -3
- data/README-JA.md +35 -6
- data/README.md +44 -25
- data/Repository.mk +1 -1
- data/lib/sisimai.rb +92 -32
- data/lib/sisimai/address.rb +1 -1
- data/lib/sisimai/arf.rb +1 -1
- data/lib/sisimai/ced.rb +24 -0
- data/lib/sisimai/ced/us/amazonses.rb +270 -0
- data/lib/sisimai/ced/us/sendgrid.rb +86 -0
- data/lib/sisimai/data.rb +19 -4
- data/lib/sisimai/data/json.rb +4 -4
- data/lib/sisimai/data/yaml.rb +3 -2
- data/lib/sisimai/mail/maildir.rb +1 -1
- data/lib/sisimai/mail/mbox.rb +1 -1
- data/lib/sisimai/message.rb +43 -510
- data/lib/sisimai/message/email.rb +556 -0
- data/lib/sisimai/message/json.rb +201 -0
- data/lib/sisimai/msp.rb +4 -31
- data/lib/sisimai/msp/de/einsundeins.rb +1 -1
- data/lib/sisimai/msp/de/gmx.rb +1 -1
- data/lib/sisimai/msp/jp/biglobe.rb +1 -1
- data/lib/sisimai/msp/jp/ezweb.rb +1 -1
- data/lib/sisimai/msp/jp/kddi.rb +1 -1
- data/lib/sisimai/msp/ru/mailru.rb +1 -1
- data/lib/sisimai/msp/ru/yandex.rb +1 -1
- data/lib/sisimai/msp/uk/messagelabs.rb +1 -1
- data/lib/sisimai/msp/us/amazonses.rb +1 -1
- data/lib/sisimai/msp/us/amazonworkmail.rb +1 -1
- data/lib/sisimai/msp/us/aol.rb +1 -1
- data/lib/sisimai/msp/us/bigfoot.rb +1 -1
- data/lib/sisimai/msp/us/facebook.rb +1 -1
- data/lib/sisimai/msp/us/google.rb +1 -1
- data/lib/sisimai/msp/us/office365.rb +1 -1
- data/lib/sisimai/msp/us/outlook.rb +1 -1
- data/lib/sisimai/msp/us/receivingses.rb +1 -1
- data/lib/sisimai/msp/us/sendgrid.rb +1 -1
- data/lib/sisimai/msp/us/verizon.rb +1 -1
- data/lib/sisimai/msp/us/yahoo.rb +1 -1
- data/lib/sisimai/msp/us/zoho.rb +1 -1
- data/lib/sisimai/mta.rb +4 -32
- data/lib/sisimai/mta/activehunter.rb +1 -1
- data/lib/sisimai/mta/apachejames.rb +1 -1
- data/lib/sisimai/mta/courier.rb +1 -1
- data/lib/sisimai/mta/domino.rb +1 -1
- data/lib/sisimai/mta/exchange2003.rb +1 -1
- data/lib/sisimai/mta/exchange2007.rb +1 -1
- data/lib/sisimai/mta/exim.rb +1 -1
- data/lib/sisimai/mta/imailserver.rb +1 -1
- data/lib/sisimai/mta/interscanmss.rb +1 -1
- data/lib/sisimai/mta/mailfoundry.rb +1 -1
- data/lib/sisimai/mta/mailmarshalsmtp.rb +1 -1
- data/lib/sisimai/mta/mcafee.rb +1 -1
- data/lib/sisimai/mta/messagingserver.rb +1 -1
- data/lib/sisimai/mta/mfilter.rb +1 -1
- data/lib/sisimai/mta/mxlogic.rb +1 -1
- data/lib/sisimai/mta/notes.rb +1 -1
- data/lib/sisimai/mta/opensmtpd.rb +2 -2
- data/lib/sisimai/mta/postfix.rb +1 -1
- data/lib/sisimai/mta/qmail.rb +1 -1
- data/lib/sisimai/mta/sendmail.rb +2 -1
- data/lib/sisimai/mta/surfcontrol.rb +1 -1
- data/lib/sisimai/mta/userdefined.rb +1 -1
- data/lib/sisimai/mta/v5sendmail.rb +1 -1
- data/lib/sisimai/mta/x1.rb +1 -1
- data/lib/sisimai/mta/x2.rb +1 -1
- data/lib/sisimai/mta/x3.rb +1 -1
- data/lib/sisimai/mta/x4.rb +1 -1
- data/lib/sisimai/mta/x5.rb +1 -1
- data/lib/sisimai/order.rb +7 -216
- data/lib/sisimai/order/email.rb +231 -0
- data/lib/sisimai/order/json.rb +56 -0
- data/lib/sisimai/reason/hostunknown.rb +1 -0
- data/lib/sisimai/reason/norelaying.rb +2 -0
- data/lib/sisimai/reason/notaccept.rb +5 -1
- data/lib/sisimai/rfc3464.rb +1 -1
- data/lib/sisimai/skeleton.rb +43 -0
- data/lib/sisimai/smtp.rb +11 -48
- data/lib/sisimai/smtp/error.rb +3 -1
- data/lib/sisimai/string.rb +1 -0
- data/lib/sisimai/version.rb +1 -1
- data/set-of-emails/jsonapi/ced-us-amazonses-01.json +1 -0
- data/set-of-emails/jsonapi/ced-us-amazonses-02.json +11 -0
- data/set-of-emails/jsonapi/ced-us-amazonses-03.json +1 -0
- data/set-of-emails/jsonapi/ced-us-amazonses-04.json +1 -0
- data/set-of-emails/jsonapi/ced-us-amazonses-05.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-01.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-02.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-03.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-04.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-05.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-06.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-07.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-08.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-09.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-10.json +1 -0
- data/set-of-emails/jsonapi/ced-us-sendgrid-11.json +1 -0
- data/set-of-emails/maildir/bsd/README.md +50 -50
- data/set-of-emails/maildir/bsd/ced-us-amazonses-01.eml +47 -0
- data/set-of-emails/maildir/bsd/ced-us-amazonses-02.eml +51 -0
- data/set-of-emails/maildir/bsd/ced-us-amazonses-03.eml +47 -0
- data/set-of-emails/maildir/bsd/ced-us-amazonses-04.eml +46 -0
- data/set-of-emails/maildir/bsd/ced-us-amazonses-05.eml +46 -0
- data/set-of-emails/maildir/bsd/{de-einsundeins-01.eml → msp-de-einsundeins-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{de-gmx-01.eml → msp-de-gmx-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{de-gmx-02.eml → msp-de-gmx-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{de-gmx-03.eml → msp-de-gmx-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{de-gmx-04.eml → msp-de-gmx-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-biglobe-01.eml → msp-jp-biglobe-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-ezweb-01.eml → msp-jp-ezweb-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-ezweb-02.eml → msp-jp-ezweb-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-ezweb-03.eml → msp-jp-ezweb-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-ezweb-04.eml → msp-jp-ezweb-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-ezweb-05.eml → msp-jp-ezweb-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-ezweb-06.eml → msp-jp-ezweb-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-kddi-01.eml → msp-jp-kddi-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-kddi-02.eml → msp-jp-kddi-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{jp-kddi-03.eml → msp-jp-kddi-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{ru-mailru-01.eml → msp-ru-mailru-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{ru-mailru-02.eml → msp-ru-mailru-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{ru-mailru-03.eml → msp-ru-mailru-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{ru-mailru-04.eml → msp-ru-mailru-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{ru-yandex-01.eml → msp-ru-yandex-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{ru-yandex-02.eml → msp-ru-yandex-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{ru-yandex-03.eml → msp-ru-yandex-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{uk-messagelabs-01.eml → msp-uk-messagelabs-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonses-01.eml → msp-us-amazonses-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonses-02.eml → msp-us-amazonses-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonses-03.eml → msp-us-amazonses-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonses-04.eml → msp-us-amazonses-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonses-05.eml → msp-us-amazonses-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonses-06.eml → msp-us-amazonses-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonses-07.eml → msp-us-amazonses-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonses-08.eml → msp-us-amazonses-08.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonworkmail-01.eml → msp-us-amazonworkmail-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonworkmail-02.eml → msp-us-amazonworkmail-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonworkmail-03.eml → msp-us-amazonworkmail-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonworkmail-04.eml → msp-us-amazonworkmail-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonworkmail-05.eml → msp-us-amazonworkmail-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonworkmail-06.eml → msp-us-amazonworkmail-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-amazonworkmail-07.eml → msp-us-amazonworkmail-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-aol-01.eml → msp-us-aol-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-aol-02.eml → msp-us-aol-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-aol-03.eml → msp-us-aol-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-aol-04.eml → msp-us-aol-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-bigfoot-01.eml → msp-us-bigfoot-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-facebook-01.eml → msp-us-facebook-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-facebook-02.eml → msp-us-facebook-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-01.eml → msp-us-google-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-02.eml → msp-us-google-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-03.eml → msp-us-google-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-04.eml → msp-us-google-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-05.eml → msp-us-google-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-06.eml → msp-us-google-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-07.eml → msp-us-google-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-08.eml → msp-us-google-08.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-09.eml → msp-us-google-09.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-10.eml → msp-us-google-10.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-11.eml → msp-us-google-11.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-12.eml → msp-us-google-12.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-13.eml → msp-us-google-13.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-14.eml → msp-us-google-14.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-15.eml → msp-us-google-15.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-16.eml → msp-us-google-16.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-google-17.eml → msp-us-google-17.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-office365-01.eml → msp-us-office365-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-office365-02.eml → msp-us-office365-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-outlook-01.eml → msp-us-outlook-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-outlook-02.eml → msp-us-outlook-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-outlook-03.eml → msp-us-outlook-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-outlook-04.eml → msp-us-outlook-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-outlook-05.eml → msp-us-outlook-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-outlook-06.eml → msp-us-outlook-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-outlook-07.eml → msp-us-outlook-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-receivingses-01.eml → msp-us-receivingses-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-receivingses-02.eml → msp-us-receivingses-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-receivingses-03.eml → msp-us-receivingses-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-receivingses-04.eml → msp-us-receivingses-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-receivingses-05.eml → msp-us-receivingses-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-receivingses-06.eml → msp-us-receivingses-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-receivingses-07.eml → msp-us-receivingses-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-sendgrid-01.eml → msp-us-sendgrid-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-sendgrid-02.eml → msp-us-sendgrid-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-sendgrid-03.eml → msp-us-sendgrid-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-verizon-01.eml → msp-us-verizon-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/msp-us-verizon-02.eml +46 -0
- data/set-of-emails/maildir/bsd/{us-yahoo-01.eml → msp-us-yahoo-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-yahoo-02.eml → msp-us-yahoo-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-yahoo-03.eml → msp-us-yahoo-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-yahoo-04.eml → msp-us-yahoo-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-yahoo-05.eml → msp-us-yahoo-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-zoho-01.eml → msp-us-zoho-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-zoho-02.eml → msp-us-zoho-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-zoho-03.eml → msp-us-zoho-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-zoho-04.eml → msp-us-zoho-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{us-zoho-05.eml → msp-us-zoho-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/mta-README.md +319 -0
- data/set-of-emails/maildir/bsd/{activehunter-01.eml → mta-activehunter-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{activehunter-02.eml → mta-activehunter-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{apachejames-01.eml → mta-apachejames-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{courier-01.eml → mta-courier-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{courier-02.eml → mta-courier-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{courier-03.eml → mta-courier-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{courier-04.eml → mta-courier-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{domino-01.eml → mta-domino-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{domino-02.eml → mta-domino-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2003-01.eml → mta-exchange2003-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2003-02.eml → mta-exchange2003-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2003-03.eml → mta-exchange2003-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2003-04.eml → mta-exchange2003-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2003-05.eml → mta-exchange2003-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2003-06.eml → mta-exchange2003-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2007-01.eml → mta-exchange2007-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2007-02.eml → mta-exchange2007-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange2007-03.eml → mta-exchange2007-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-01.eml → mta-exim-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-02.eml → mta-exim-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-03.eml → mta-exim-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-04.eml → mta-exim-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-05.eml → mta-exim-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-06.eml → mta-exim-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-07.eml → mta-exim-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-08.eml → mta-exim-08.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-09.eml → mta-exim-09.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-10.eml → mta-exim-10.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-11.eml → mta-exim-11.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-12.eml → mta-exim-12.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-13.eml → mta-exim-13.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-14.eml → mta-exim-14.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-15.eml → mta-exim-15.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-16.eml → mta-exim-16.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-17.eml → mta-exim-17.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-18.eml → mta-exim-18.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-19.eml → mta-exim-19.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-20.eml → mta-exim-20.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-21.eml → mta-exim-21.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-22.eml → mta-exim-22.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-23.eml → mta-exim-23.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-24.eml → mta-exim-24.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-25.eml → mta-exim-25.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-26.eml → mta-exim-26.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-27.eml → mta-exim-27.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-28.eml → mta-exim-28.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exim-29.eml → mta-exim-29.eml} +0 -0
- data/set-of-emails/maildir/bsd/{imailserver-01.eml → mta-imailserver-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{imailserver-02.eml → mta-imailserver-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{imailserver-03.eml → mta-imailserver-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{imailserver-04.eml → mta-imailserver-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{imailserver-05.eml → mta-imailserver-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{imailserver-06.eml → mta-imailserver-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{interscanmss-01.eml → mta-interscanmss-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{interscanmss-02.eml → mta-interscanmss-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mailfoundry-01.eml → mta-mailfoundry-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mailfoundry-02.eml → mta-mailfoundry-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mailmarshalsmtp-01.eml → mta-mailmarshalsmtp-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mcafee-01.eml → mta-mcafee-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mcafee-02.eml → mta-mcafee-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mcafee-03.eml → mta-mcafee-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{messagingserver-01.eml → mta-messagingserver-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{messagingserver-02.eml → mta-messagingserver-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{messagingserver-03.eml → mta-messagingserver-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{messagingserver-04.eml → mta-messagingserver-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{messagingserver-05.eml → mta-messagingserver-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{messagingserver-06.eml → mta-messagingserver-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{messagingserver-07.eml → mta-messagingserver-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mfilter-01.eml → mta-mfilter-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mfilter-02.eml → mta-mfilter-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mfilter-03.eml → mta-mfilter-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mxlogic-01.eml → mta-mxlogic-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mxlogic-02.eml → mta-mxlogic-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{mxlogic-03.eml → mta-mxlogic-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{notes-01.eml → mta-notes-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{notes-02.eml → mta-notes-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{notes-03.eml → mta-notes-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{notes-04.eml → mta-notes-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{opensmtpd-01.eml → mta-opensmtpd-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{opensmtpd-02.eml → mta-opensmtpd-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{opensmtpd-03.eml → mta-opensmtpd-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{opensmtpd-04.eml → mta-opensmtpd-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{opensmtpd-05.eml → mta-opensmtpd-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/mta-opensmtpd-06.eml +67 -0
- data/set-of-emails/maildir/bsd/{postfix-01.eml → mta-postfix-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-02.eml → mta-postfix-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-03.eml → mta-postfix-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-04.eml → mta-postfix-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-05.eml → mta-postfix-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-06.eml → mta-postfix-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-07.eml → mta-postfix-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-08.eml → mta-postfix-08.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-09.eml → mta-postfix-09.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-10.eml → mta-postfix-10.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-11.eml → mta-postfix-11.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-12.eml → mta-postfix-12.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-13.eml → mta-postfix-13.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-14.eml → mta-postfix-14.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-15.eml → mta-postfix-15.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-16.eml → mta-postfix-16.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-17.eml → mta-postfix-17.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-18.eml → mta-postfix-18.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-19.eml → mta-postfix-19.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-20.eml → mta-postfix-20.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-21.eml → mta-postfix-21.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-22.eml → mta-postfix-22.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-23.eml → mta-postfix-23.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-24.eml → mta-postfix-24.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-25.eml → mta-postfix-25.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-26.eml → mta-postfix-26.eml} +0 -0
- data/set-of-emails/maildir/bsd/{postfix-27.eml → mta-postfix-27.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-01.eml → mta-qmail-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-02.eml → mta-qmail-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-03.eml → mta-qmail-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-04.eml → mta-qmail-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-05.eml → mta-qmail-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-06.eml → mta-qmail-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-07.eml → mta-qmail-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-08.eml → mta-qmail-08.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-09.eml → mta-qmail-09.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-10.eml → mta-qmail-10.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-11.eml → mta-qmail-11.eml} +0 -0
- data/set-of-emails/maildir/bsd/{qmail-12.eml → mta-qmail-12.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-01.eml → mta-sendmail-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-02.eml → mta-sendmail-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-03.eml → mta-sendmail-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-04.eml → mta-sendmail-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-05.eml → mta-sendmail-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-06.eml → mta-sendmail-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-07.eml → mta-sendmail-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-08.eml → mta-sendmail-08.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-09.eml → mta-sendmail-09.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-10.eml → mta-sendmail-10.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-11.eml → mta-sendmail-11.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-12.eml → mta-sendmail-12.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-13.eml → mta-sendmail-13.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-14.eml → mta-sendmail-14.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-15.eml → mta-sendmail-15.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-16.eml → mta-sendmail-16.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-17.eml → mta-sendmail-17.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-18.eml → mta-sendmail-18.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-19.eml → mta-sendmail-19.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-20.eml → mta-sendmail-20.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-21.eml → mta-sendmail-21.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-22.eml → mta-sendmail-22.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-23.eml → mta-sendmail-23.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-24.eml → mta-sendmail-24.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-25.eml → mta-sendmail-25.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-26.eml → mta-sendmail-26.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-27.eml → mta-sendmail-27.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-28.eml → mta-sendmail-28.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-29.eml → mta-sendmail-29.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-30.eml → mta-sendmail-30.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-31.eml → mta-sendmail-31.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-32.eml → mta-sendmail-32.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-33.eml → mta-sendmail-33.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-34.eml → mta-sendmail-34.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-35.eml → mta-sendmail-35.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-36.eml → mta-sendmail-36.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-37.eml → mta-sendmail-37.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-38.eml → mta-sendmail-38.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-39.eml → mta-sendmail-39.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-40.eml → mta-sendmail-40.eml} +0 -0
- data/set-of-emails/maildir/bsd/{sendmail-41.eml → mta-sendmail-41.eml} +0 -0
- data/set-of-emails/maildir/bsd/mta-sendmail-42.eml +64 -0
- data/set-of-emails/maildir/bsd/{surfcontrol-01.eml → mta-surfcontrol-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{surfcontrol-02.eml → mta-surfcontrol-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{surfcontrol-03.eml → mta-surfcontrol-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{v5sendmail-01.eml → mta-v5sendmail-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{v5sendmail-02.eml → mta-v5sendmail-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{v5sendmail-03.eml → mta-v5sendmail-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{v5sendmail-04.eml → mta-v5sendmail-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{v5sendmail-05.eml → mta-v5sendmail-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{v5sendmail-06.eml → mta-v5sendmail-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{v5sendmail-07.eml → mta-v5sendmail-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x1-01.eml → mta-x1-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x1-02.eml → mta-x1-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x2-01.eml → mta-x2-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x2-02.eml → mta-x2-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x2-03.eml → mta-x2-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x2-04.eml → mta-x2-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x2-05.eml → mta-x2-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x3-01.eml → mta-x3-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x3-02.eml → mta-x3-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x3-03.eml → mta-x3-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x3-04.eml → mta-x3-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x4-01.eml → mta-x4-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x4-02.eml → mta-x4-02.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x4-03.eml → mta-x4-03.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x4-04.eml → mta-x4-04.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x4-05.eml → mta-x4-05.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x4-06.eml → mta-x4-06.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x4-07.eml → mta-x4-07.eml} +0 -0
- data/set-of-emails/maildir/bsd/{x5-01.eml → mta-x5-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{exchange-online-01.eml → rhost-exchange-online-01.eml} +0 -0
- data/set-of-emails/maildir/bsd/{google-apps-01.eml → rhost-google-apps-01.eml} +0 -0
- data/set-of-emails/maildir/dos/ced-us-amazonses-01.eml +47 -0
- data/set-of-emails/maildir/dos/{de-einsundeins-01.eml → msp-de-einsundeins-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{de-gmx-01.eml → msp-de-gmx-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{jp-biglobe-01.eml → msp-jp-biglobe-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{jp-ezweb-01.eml → msp-jp-ezweb-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{jp-kddi-01.eml → msp-jp-kddi-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{ru-mailru-01.eml → msp-ru-mailru-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{ru-yandex-01.eml → msp-ru-yandex-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{uk-messagelabs-01.eml → msp-uk-messagelabs-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-amazonses-01.eml → msp-us-amazonses-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-amazonworkmail-01.eml → msp-us-amazonworkmail-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-aol-01.eml → msp-us-aol-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-bigfoot-01.eml → msp-us-bigfoot-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-facebook-01.eml → msp-us-facebook-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-google-01.eml → msp-us-google-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-office365-01.eml → msp-us-office365-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-outlook-01.eml → msp-us-outlook-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-receivingses-01.eml → msp-us-receivingses-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-sendgrid-01.eml → msp-us-sendgrid-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-verizon-01.eml → msp-us-verizon-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-yahoo-01.eml → msp-us-yahoo-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{us-zoho-01.eml → msp-us-zoho-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{activehunter-01.eml → mta-activehunter-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{apachejames-01.eml → mta-apachejames-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{courier-01.eml → mta-courier-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{domino-01.eml → mta-domino-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{exchange-01.eml → mta-exchange-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{exchange2003-01.eml → mta-exchange2003-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{exchange2007-01.eml → mta-exchange2007-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{exim-01.eml → mta-exim-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{imailserver-01.eml → mta-imailserver-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{interscanmss-01.eml → mta-interscanmss-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{mailfoundry-01.eml → mta-mailfoundry-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{mailmarshalsmtp-01.eml → mta-mailmarshalsmtp-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{mcafee-01.eml → mta-mcafee-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{messagingserver-01.eml → mta-messagingserver-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{mfilter-01.eml → mta-mfilter-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{mxlogic-01.eml → mta-mxlogic-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{notes-01.eml → mta-notes-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{opensmtpd-01.eml → mta-opensmtpd-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{postfix-01.eml → mta-postfix-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{qmail-01.eml → mta-qmail-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{sendmail-01.eml → mta-sendmail-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{surfcontrol-01.eml → mta-surfcontrol-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{v5sendmail-01.eml → mta-v5sendmail-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{x1-01.eml → mta-x1-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{x2-01.eml → mta-x2-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{x3-01.eml → mta-x3-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{x4-01.eml → mta-x4-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{x5-01.eml → mta-x5-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{exchange-online-01.eml → rhost-exchange-online-01.eml} +0 -0
- data/set-of-emails/maildir/dos/{google-apps-01.eml → rhost-google-apps-01.eml} +0 -0
- data/set-of-emails/maildir/mac/ced-us-amazonses-01.eml +1 -1
- data/set-of-emails/maildir/mac/{de-einsundeins-01.eml → msp-de-einsundeins-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{de-gmx-01.eml → msp-de-gmx-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{jp-biglobe-01.eml → msp-jp-biglobe-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{jp-ezweb-01.eml → msp-jp-ezweb-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{jp-kddi-01.eml → msp-jp-kddi-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{ru-mailru-01.eml → msp-ru-mailru-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{ru-yandex-01.eml → msp-ru-yandex-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{uk-messagelabs-01.eml → msp-uk-messagelabs-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-amazonses-01.eml → msp-us-amazonses-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-amazonworkmail-01.eml → msp-us-amazonworkmail-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-aol-01.eml → msp-us-aol-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-bigfoot-01.eml → msp-us-bigfoot-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-facebook-01.eml → msp-us-facebook-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-google-01.eml → msp-us-google-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-office365-01.eml → msp-us-office365-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-outlook-01.eml → msp-us-outlook-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-receivingses-01.eml → msp-us-receivingses-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-sendgrid-01.eml → msp-us-sendgrid-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-verizon-01.eml → msp-us-verizon-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-yahoo-01.eml → msp-us-yahoo-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{us-zoho-01.eml → msp-us-zoho-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{activehunter-01.eml → mta-activehunter-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{apachejames-01.eml → mta-apachejames-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{courier-01.eml → mta-courier-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{domino-01.eml → mta-domino-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{exchange-01.eml → mta-exchange-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{exchange2003-01.eml → mta-exchange2003-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{exchange2007-01.eml → mta-exchange2007-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{exim-01.eml → mta-exim-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{imailserver-01.eml → mta-imailserver-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{interscanmss-01.eml → mta-interscanmss-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{mailfoundry-01.eml → mta-mailfoundry-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{mailmarshalsmtp-01.eml → mta-mailmarshalsmtp-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{mcafee-01.eml → mta-mcafee-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{messagingserver-01.eml → mta-messagingserver-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{mfilter-01.eml → mta-mfilter-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{mxlogic-01.eml → mta-mxlogic-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{notes-01.eml → mta-notes-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{opensmtpd-01.eml → mta-opensmtpd-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{postfix-01.eml → mta-postfix-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{qmail-01.eml → mta-qmail-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{sendmail-01.eml → mta-sendmail-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{surfcontrol-01.eml → mta-surfcontrol-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{v5sendmail-01.eml → mta-v5sendmail-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{x1-01.eml → mta-x1-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{x2-01.eml → mta-x2-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{x3-01.eml → mta-x3-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{x4-01.eml → mta-x4-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{x5-01.eml → mta-x5-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{exchange-online-01.eml → rhost-exchange-online-01.eml} +0 -0
- data/set-of-emails/maildir/mac/{google-apps-01.eml → rhost-google-apps-01.eml} +0 -0
- metadata +425 -390
data/lib/sisimai/data/json.rb
CHANGED
@@ -18,16 +18,16 @@ module Sisimai
|
|
18
18
|
begin
|
19
19
|
require 'jrjackson'
|
20
20
|
jsonstring = JrJackson::Json.dump(argvs.damn)
|
21
|
-
rescue
|
22
|
-
warn '***warning: Failed to JrJackson::Json.dump'
|
21
|
+
rescue StandardError => ce
|
22
|
+
warn '***warning: Failed to JrJackson::Json.dump: ' + ce.to_s
|
23
23
|
end
|
24
24
|
else
|
25
25
|
# MRI
|
26
26
|
begin
|
27
27
|
require 'oj'
|
28
28
|
jsonstring = Oj.dump(argvs.damn, :mode => :compat)
|
29
|
-
rescue
|
30
|
-
warn '***warning: Failed to Oj.dump'
|
29
|
+
rescue StandardError => ce
|
30
|
+
warn '***warning: Failed to Oj.dump: ' + ce_to_s
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
data/lib/sisimai/data/yaml.rb
CHANGED
@@ -20,12 +20,13 @@ module Sisimai
|
|
20
20
|
|
21
21
|
begin
|
22
22
|
yamlstring = ::YAML.dump(damneddata)
|
23
|
-
rescue
|
24
|
-
warn '***warning: Failed to YAML.dump'
|
23
|
+
rescue StandardError => ce
|
24
|
+
warn '***warning: Failed to YAML.dump: ' + ce.to_s
|
25
25
|
end
|
26
26
|
|
27
27
|
return yamlstring
|
28
28
|
end
|
29
|
+
|
29
30
|
end
|
30
31
|
end
|
31
32
|
end
|
data/lib/sisimai/mail/maildir.rb
CHANGED
data/lib/sisimai/mail/mbox.rb
CHANGED
data/lib/sisimai/message.rb
CHANGED
@@ -21,24 +21,6 @@ module Sisimai
|
|
21
21
|
]
|
22
22
|
@@rwaccessors.each { |e| attr_accessor e }
|
23
23
|
|
24
|
-
EndOfEmail = Sisimai::String.EOM
|
25
|
-
RFC822Head = Sisimai::RFC5322.HEADERFIELDS
|
26
|
-
RFC3834Set = Sisimai::RFC3834.headerlist.map { |e| e.downcase }
|
27
|
-
HeaderList = [
|
28
|
-
'from', 'to', 'date', 'subject', 'content-type', 'reply-to', 'message-id',
|
29
|
-
'received', 'content-transfer-encoding', 'return-path', 'x-mailer',
|
30
|
-
]
|
31
|
-
MultiHeads = { 'received' => true }
|
32
|
-
IgnoreList = { 'dkim-signature' => true }
|
33
|
-
Indicators = {
|
34
|
-
:begin => (1 << 1),
|
35
|
-
:endof => (1 << 2),
|
36
|
-
}
|
37
|
-
DefaultSet = Sisimai::Order.another
|
38
|
-
PatternSet = Sisimai::Order.by('subject')
|
39
|
-
ExtHeaders = Sisimai::Order.headers
|
40
|
-
ReEncoding = Sisimai::MIME.patterns
|
41
|
-
|
42
24
|
# Constructor of Sisimai::Message
|
43
25
|
# @param [String] data Email text data
|
44
26
|
# @param [Hash] argvs Module to be loaded
|
@@ -52,9 +34,35 @@ module Sisimai
|
|
52
34
|
return nil if data.empty?
|
53
35
|
|
54
36
|
email = data
|
55
|
-
|
56
|
-
|
37
|
+
input = argvs[:input] || 'email'
|
38
|
+
child = nil
|
39
|
+
|
40
|
+
if input == 'email'
|
41
|
+
# Sisimai::Message::Email
|
42
|
+
return nil unless email.size > 0
|
43
|
+
email = email.scrub('?')
|
44
|
+
email = email.gsub("\r\n", "\n")
|
45
|
+
child = 'Sisimai::Message::Email'
|
46
|
+
|
47
|
+
elsif input == 'json'
|
48
|
+
# Sisimai::Message::JSON
|
49
|
+
return nil unless email.is_a? Hash
|
50
|
+
child = 'Sisimai::Message::JSON'
|
51
|
+
|
52
|
+
else
|
53
|
+
# Unsupported value in "input"
|
54
|
+
return nil
|
55
|
+
end
|
56
|
+
|
57
|
+
begin
|
58
|
+
require child.gsub('::', '/').downcase
|
59
|
+
rescue LoadError => ce
|
60
|
+
warn ' ***warning: Failed to load module: ' + ce.to_s
|
61
|
+
return nil
|
62
|
+
end
|
63
|
+
|
57
64
|
methodargv = { 'data' => email, 'hook' => argvs[:hook] || nil }
|
65
|
+
datasource = nil
|
58
66
|
|
59
67
|
[:load, :order].each do |e|
|
60
68
|
# Order of MTA, MSP modules
|
@@ -64,15 +72,15 @@ module Sisimai
|
|
64
72
|
methodargv[e.to_s] = argvs[e]
|
65
73
|
end
|
66
74
|
|
67
|
-
|
68
|
-
return nil unless
|
69
|
-
return nil unless
|
75
|
+
datasource = Module.const_get(child).make(methodargv)
|
76
|
+
return nil unless datasource
|
77
|
+
return nil unless datasource.key?('ds')
|
70
78
|
|
71
|
-
@from =
|
72
|
-
@header =
|
73
|
-
@ds =
|
74
|
-
@rfc822 =
|
75
|
-
@catch =
|
79
|
+
@from = datasource['from']
|
80
|
+
@header = datasource['header']
|
81
|
+
@ds = datasource['ds']
|
82
|
+
@rfc822 = datasource['rfc822']
|
83
|
+
@catch = datasource['catch'] || nil
|
76
84
|
end
|
77
85
|
|
78
86
|
# Check whether the object has valid content or not
|
@@ -82,496 +90,21 @@ module Sisimai
|
|
82
90
|
return false
|
83
91
|
end
|
84
92
|
|
85
|
-
# Make data structure
|
86
|
-
|
87
|
-
|
88
|
-
# @options argvs [Array] load User defined MTA module list
|
89
|
-
# @options argvs [Array] order The order of MTA modules
|
90
|
-
# @options argvs [Code] hook Reference to callback method
|
91
|
-
# @return [Hash] Resolved data structure
|
92
|
-
def self.make(argvs)
|
93
|
-
email = argvs['data']
|
94
|
-
|
95
|
-
processing = { 'from' => '', 'header' => {}, 'rfc822' => '', 'ds' => [] }
|
96
|
-
hookmethod = argvs['hook'] || nil
|
97
|
-
processing = {
|
93
|
+
# Make data structure (Should be implemeneted at each child class)
|
94
|
+
def make
|
95
|
+
return {
|
98
96
|
'from' => '', # From_ line
|
99
97
|
'header' => {}, # Email header
|
100
98
|
'rfc822' => '', # Original message part
|
101
99
|
'ds' => [], # Parsed data, Delivery Status
|
102
100
|
'catch' => nil, # Data parsed by callback method
|
103
101
|
}
|
104
|
-
mtamodules = []
|
105
|
-
extheaders = ExtHeaders
|
106
|
-
tobeloaded = []
|
107
|
-
headerargv = {}
|
108
|
-
|
109
|
-
%w|load order|.each do |e|
|
110
|
-
# The order of MTA modules specified by user
|
111
|
-
next unless argvs.key?(e)
|
112
|
-
next unless argvs[e].is_a? Array
|
113
|
-
next if argvs[e].empty?
|
114
|
-
|
115
|
-
mtamodules.concat(argvs['order']) if e == 'order'
|
116
|
-
next unless e == 'load'
|
117
|
-
|
118
|
-
# Load user defined MTA module
|
119
|
-
argvs['load'].each do |v|
|
120
|
-
# Load user defined MTA module
|
121
|
-
begin
|
122
|
-
require v.to_s.gsub('::', '/').downcase
|
123
|
-
rescue LoadError
|
124
|
-
warn ' ***warning: Failed to load ' + v
|
125
|
-
next
|
126
|
-
end
|
127
|
-
|
128
|
-
Module.const_get(v).headerlist.each do |w|
|
129
|
-
# Get header name which required user defined MTA module
|
130
|
-
extheaders[w] ||= {}
|
131
|
-
extheaders[w][v] = 1
|
132
|
-
end
|
133
|
-
tobeloaded << v
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
mtamodules.each do |e|
|
138
|
-
# Append the custom order of MTA modules
|
139
|
-
next if tobeloaded.index(e)
|
140
|
-
tobeloaded << e
|
141
|
-
end
|
142
|
-
|
143
|
-
# 1. Split email data to headers and a body part.
|
144
|
-
aftersplit = Sisimai::Message.divideup(email)
|
145
|
-
return nil if aftersplit.empty?
|
146
|
-
|
147
|
-
# 2. Convert email headers from text to hash reference
|
148
|
-
headerargv['extheaders'] = extheaders
|
149
|
-
headerargv['tryonfirst'] = []
|
150
|
-
processing['from'] = aftersplit['from']
|
151
|
-
processing['header'] = Sisimai::Message.headers(aftersplit['header'], headerargv)
|
152
|
-
|
153
|
-
# 3. Check headers for detecting MTA/MSP module
|
154
|
-
if headerargv['tryonfirst'].empty?
|
155
|
-
headerargv['tryonfirst'].concat(Sisimai::Message.makeorder(processing['header']))
|
156
|
-
end
|
157
|
-
|
158
|
-
# 4. Rewrite message body for detecting the bounce reason
|
159
|
-
methodargv = {
|
160
|
-
'hook' => hookmethod,
|
161
|
-
'mail' => processing,
|
162
|
-
'body' => aftersplit['body'],
|
163
|
-
'tryonfirst' => headerargv['tryonfirst'],
|
164
|
-
'tobeloaded' => tobeloaded,
|
165
|
-
}
|
166
|
-
bouncedata = Sisimai::Message.parse(methodargv)
|
167
|
-
|
168
|
-
return nil unless bouncedata
|
169
|
-
return nil if bouncedata.empty?
|
170
|
-
processing['ds'] = bouncedata['ds']
|
171
|
-
processing['catch'] = bouncedata['catch']
|
172
|
-
|
173
|
-
# 5. Rewrite headers of the original message in the body part
|
174
|
-
rfc822part = bouncedata['rfc822']
|
175
|
-
rfc822part = aftersplit['body'] if rfc822part.empty?
|
176
|
-
processing['rfc822'] = Sisimai::Message.takeapart(rfc822part)
|
177
|
-
|
178
|
-
return processing
|
179
102
|
end
|
180
103
|
|
181
|
-
#
|
182
|
-
#
|
183
|
-
# @
|
184
|
-
def
|
185
|
-
return {} if email.empty?
|
186
|
-
|
187
|
-
email = email.scrub('?')
|
188
|
-
email = email.gsub(/\r\n/, "\n") if email =~ /\r\n/
|
189
|
-
email = email.gsub(/[ \t]+$/, '') if email =~ /[ \t]+$/
|
190
|
-
|
191
|
-
hasdivided = email.split("\n")
|
192
|
-
return {} if hasdivided.empty?
|
193
|
-
|
194
|
-
readcursor = 0
|
195
|
-
aftersplit = { 'from' => '', 'header' => '', 'body' => '' }
|
196
|
-
pseudofrom = 'MAILER-DAEMON Tue Feb 11 00:00:00 2014'
|
197
|
-
|
198
|
-
if hasdivided[0][0, 5] == 'From '
|
199
|
-
# From MAILER-DAEMON Tue Feb 11 00:00:00 2014
|
200
|
-
aftersplit['from'] = hasdivided.shift
|
201
|
-
aftersplit['from'] = aftersplit['from'].delete("\n").delete("\r")
|
202
|
-
end
|
203
|
-
|
204
|
-
# Split email data to headers and a body part.
|
205
|
-
hasdivided.each do |e|
|
206
|
-
# Split email data to headers and a body part.
|
207
|
-
if readcursor & Indicators[:endof] > 0
|
208
|
-
# The body part of the email
|
209
|
-
aftersplit['body'] += e + "\n"
|
210
|
-
|
211
|
-
else
|
212
|
-
# The boundary for splitting headers and a body part does not
|
213
|
-
# appeare yet.
|
214
|
-
if e.empty?
|
215
|
-
# Blank line, it is a boundary of headers and a body part
|
216
|
-
readcursor |= Indicators[:endof] if readcursor & Indicators[:begin] > 0
|
217
|
-
|
218
|
-
else
|
219
|
-
# The header part of the email
|
220
|
-
aftersplit['header'] += e + "\n"
|
221
|
-
readcursor |= Indicators[:begin]
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
return {} if aftersplit['header'].empty?
|
226
|
-
return {} if aftersplit['body'].empty?
|
227
|
-
|
228
|
-
aftersplit['from'] = pseudofrom if aftersplit['from'].empty?
|
229
|
-
return aftersplit
|
230
|
-
end
|
231
|
-
|
232
|
-
# Convert email headers from text to hash reference
|
233
|
-
# @param [String] heads Email header data
|
234
|
-
# @param [Hash] argvs
|
235
|
-
# @param options extheaders [Array] External header table
|
236
|
-
# @return [Hash] Structured email header data
|
237
|
-
def self.headers(heads, argvs = {})
|
238
|
-
return nil unless heads
|
239
|
-
|
240
|
-
currheader = ''
|
241
|
-
allheaders = {}
|
242
|
-
structured = {}
|
243
|
-
extheaders = argvs['extheaders'] || []
|
244
|
-
|
245
|
-
HeaderList.each { |e| structured[e] = nil }
|
246
|
-
HeaderList.each { |e| allheaders[e] = true }
|
247
|
-
RFC3834Set.each { |e| allheaders[e] = true }
|
248
|
-
MultiHeads.each_key { |e| structured[e.downcase] = [] }
|
249
|
-
extheaders.each_key { |e| allheaders[e] = true }
|
250
|
-
|
251
|
-
heads.split("\n").each do |e|
|
252
|
-
# Convert email headers to hash
|
253
|
-
if cv = e.match(/\A([^ ]+?)[:][ ]*(.+?)\z/)
|
254
|
-
# split the line into a header name and a header content
|
255
|
-
lhs = cv[1]
|
256
|
-
rhs = cv[2]
|
257
|
-
|
258
|
-
currheader = lhs.downcase
|
259
|
-
next unless allheaders.key?(currheader)
|
260
|
-
|
261
|
-
if MultiHeads.key?(currheader)
|
262
|
-
# Such as 'Received' header, there are multiple headers in a single
|
263
|
-
# email message.
|
264
|
-
rhs = rhs.tr("\t", ' ')
|
265
|
-
rhs = rhs.squeeze(' ')
|
266
|
-
structured[currheader] << rhs
|
267
|
-
|
268
|
-
else
|
269
|
-
# Other headers except "Received" and so on
|
270
|
-
if extheaders[currheader]
|
271
|
-
# MTA specific header
|
272
|
-
extheaders[currheader].keys.each do |r|
|
273
|
-
next if argvs['tryonfirst'].index(r)
|
274
|
-
argvs['tryonfirst'] << r
|
275
|
-
end
|
276
|
-
end
|
277
|
-
structured[currheader] = rhs
|
278
|
-
end
|
279
|
-
|
280
|
-
elsif cv = e.match(/\A[ \t]+(.+?)\z/)
|
281
|
-
# Ignore header?
|
282
|
-
next if IgnoreList[currheader]
|
283
|
-
|
284
|
-
# Header line continued from the previous line
|
285
|
-
if structured[currheader].is_a? Array
|
286
|
-
# Concatenate a header which have multi-lines such as 'Received'
|
287
|
-
structured[currheader][-1] += ' ' + cv[1]
|
288
|
-
|
289
|
-
else
|
290
|
-
structured[currheader] ||= ''
|
291
|
-
structured[currheader] += ' ' + cv[1]
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
return structured
|
296
|
-
end
|
297
|
-
|
298
|
-
# Check headers for detecting MTA/MSP module and returns the order of modules
|
299
|
-
# @param [Hash] heads Email header data
|
300
|
-
# @return [Array] Order of MTA/MSP modules
|
301
|
-
def self.makeorder(heads)
|
302
|
-
return [] unless heads
|
303
|
-
return [] unless heads['subject']
|
304
|
-
return [] if heads['subject'].empty?
|
305
|
-
order = []
|
306
|
-
|
307
|
-
# Try to match the value of "Subject" with patterns generated by
|
308
|
-
# Sisimai::Order->by('subject') method
|
309
|
-
PatternSet.each_key do |e|
|
310
|
-
# Get MTA list from the subject header
|
311
|
-
next unless heads['subject'] =~ e
|
312
|
-
|
313
|
-
# Matched and push MTA list
|
314
|
-
order.concat(PatternSet[e])
|
315
|
-
break
|
316
|
-
end
|
317
|
-
return order
|
318
|
-
end
|
319
|
-
|
320
|
-
# Take each email header in the original message apart
|
321
|
-
# @param [String] heads The original message header
|
322
|
-
# @return [Hash] Structured message headers
|
323
|
-
def self.takeapart(heads)
|
324
|
-
return {} unless heads
|
325
|
-
|
326
|
-
# Convert from string to hash reference
|
327
|
-
heads = heads.gsub(/^[>]+[ ]/m, '')
|
328
|
-
|
329
|
-
takenapart = {}
|
330
|
-
hasdivided = heads.split("\n")
|
331
|
-
previousfn = '' # Previous field name
|
332
|
-
borderline = '__MIME_ENCODED_BOUNDARY__'
|
333
|
-
mimeborder = {}
|
334
|
-
|
335
|
-
hasdivided.each do |e|
|
336
|
-
# Header name as a key, The value of header as a value
|
337
|
-
if cv = e.match(/\A([-0-9A-Za-z]+?)[:][ ]*(.*)\z/)
|
338
|
-
# Header
|
339
|
-
lhs = cv[1].downcase
|
340
|
-
rhs = cv[2]
|
341
|
-
previousfn = ''
|
342
|
-
|
343
|
-
next unless RFC822Head.key?(lhs)
|
344
|
-
previousfn = lhs
|
345
|
-
takenapart[previousfn] = rhs unless takenapart[previousfn]
|
346
|
-
|
347
|
-
else
|
348
|
-
# Continued line from the previous line
|
349
|
-
next unless e =~ /\A[ \t]+/
|
350
|
-
next if previousfn.empty?
|
351
|
-
|
352
|
-
# Concatenate the line if it is the value of required header
|
353
|
-
if Sisimai::MIME.is_mimeencoded(e)
|
354
|
-
# The line is MIME-Encoded test
|
355
|
-
if previousfn == 'subject'
|
356
|
-
# Subject: header
|
357
|
-
takenapart[previousfn] += borderline + e
|
358
|
-
|
359
|
-
else
|
360
|
-
# Is not Subject header
|
361
|
-
takenapart[previousfn] += e
|
362
|
-
end
|
363
|
-
mimeborder[previousfn] = true
|
364
|
-
|
365
|
-
else
|
366
|
-
# ASCII Characters only: Not MIME-Encoded
|
367
|
-
e = e.lstrip
|
368
|
-
takenapart[previousfn] += e
|
369
|
-
mimeborder[previousfn] ||= false
|
370
|
-
end
|
371
|
-
end
|
372
|
-
end
|
373
|
-
|
374
|
-
if takenapart['subject']
|
375
|
-
# Convert MIME-Encoded subject
|
376
|
-
v = takenapart['subject']
|
377
|
-
|
378
|
-
if Sisimai::String.is_8bit(v)
|
379
|
-
# The value of ``Subject'' header is including multibyte character,
|
380
|
-
# is not MIME-Encoded text.
|
381
|
-
v = 'MULTIBYTE CHARACTERS HAVE BEEN REMOVED'
|
382
|
-
|
383
|
-
else
|
384
|
-
# MIME-Encoded subject field or ASCII characters only
|
385
|
-
r = []
|
386
|
-
if mimeborder['subject']
|
387
|
-
# split the value of Subject by $borderline
|
388
|
-
v.split(borderline).each do |m|
|
389
|
-
# Insert value to the array if the string is MIME encoded text
|
390
|
-
r << m if Sisimai::MIME.is_mimeencoded(m)
|
391
|
-
end
|
392
|
-
else
|
393
|
-
# Subject line is not MIME encoded
|
394
|
-
r << v
|
395
|
-
end
|
396
|
-
v = Sisimai::MIME.mimedecode(r)
|
397
|
-
end
|
398
|
-
takenapart['subject'] = v
|
399
|
-
end
|
400
|
-
return takenapart
|
401
|
-
end
|
402
|
-
|
403
|
-
# Parse bounce mail with each MTA/MSP module
|
404
|
-
# @param [Hash] argvs Processing message entity.
|
405
|
-
# @param options argvs [Hash] mail Email message entity
|
406
|
-
# @param options mail [String] from From line of mbox
|
407
|
-
# @param options mail [Hash] header Email header data
|
408
|
-
# @param options mail [String] rfc822 Original message part
|
409
|
-
# @param options mail [Array] ds Delivery status list(parsed data)
|
410
|
-
# @param options argvs [String] body Email message body
|
411
|
-
# @param options argvs [Array] tryonfirst MTA/MSP module list to load on first
|
412
|
-
# @param options argvs [Array] tobeloaded User defined MTA module list
|
413
|
-
# @return [Hash] Parsed and structured bounce mails
|
414
|
-
def self.parse(argvs)
|
415
|
-
mesgentity = argvs['mail']
|
416
|
-
bodystring = argvs['body']
|
417
|
-
hookmethod = argvs['hook'] || nil
|
418
|
-
havacaught = nil
|
419
|
-
tryonfirst = argvs['tryonfirst'] || []
|
420
|
-
tobeloaded = argvs['tobeloaded'] || []
|
421
|
-
mailheader = mesgentity['header']
|
422
|
-
|
423
|
-
return nil unless argvs['mail']
|
424
|
-
return nil unless argvs['body']
|
425
|
-
|
426
|
-
# PRECHECK_EACH_HEADER:
|
427
|
-
# Set empty string if the value is nil
|
428
|
-
mailheader['from'] ||= ''
|
429
|
-
mailheader['subject'] ||= ''
|
430
|
-
mailheader['content-type'] ||= ''
|
431
|
-
|
432
|
-
# Decode BASE64 Encoded message body, rewrite.
|
433
|
-
mesgformat = (mailheader['content-type'] || '').downcase
|
434
|
-
ctencoding = (mailheader['content-transfer-encoding'] || '').downcase
|
435
|
-
|
436
|
-
if mesgformat =~ %r{text/(?:plain|html);?}
|
437
|
-
# Content-Type: text/plain; charset=UTF-8
|
438
|
-
if ctencoding == 'base64' || ctencoding == 'quoted-printable'
|
439
|
-
# Content-Transfer-Encoding: base64
|
440
|
-
# Content-Transfer-Encoding: quoted-printable
|
441
|
-
if ctencoding == 'base64'
|
442
|
-
# Content-Transfer-Encoding: base64
|
443
|
-
bodystring = Sisimai::MIME.base64d(bodystring)
|
444
|
-
|
445
|
-
else
|
446
|
-
# Content-Transfer-Encoding: quoted-printable
|
447
|
-
bodystring = Sisimai::MIME.qprintd(bodystring)
|
448
|
-
end
|
449
|
-
end
|
450
|
-
|
451
|
-
if mesgformat =~ %r|text/html;?|
|
452
|
-
# Content-Type: text/html;...
|
453
|
-
bodystring = Sisimai::String.to_plain(bodystring, true)
|
454
|
-
end
|
455
|
-
|
456
|
-
else
|
457
|
-
# NOT text/plain
|
458
|
-
if bodystring =~ ReEncoding[:'quoted-print']
|
459
|
-
# Content-Transfer-Encoding: quoted-printable
|
460
|
-
bodystring = Sisimai::MIME.qprintd(bodystring, mailheader)
|
461
|
-
end
|
462
|
-
|
463
|
-
if bodystring =~ ReEncoding[:'7bit-encoded'] &&
|
464
|
-
cv = bodystring.match(ReEncoding[:'some-iso2022'])
|
465
|
-
# Content-Transfer-Encoding: 7bit
|
466
|
-
# Content-Type: text/plain; charset=ISO-2022-JP
|
467
|
-
unless cv[1].downcase =~ /(?:us-ascii|utf[-]?8)/
|
468
|
-
bodystring = Sisimai::String.to_utf8(bodystring, cv[1])
|
469
|
-
end
|
470
|
-
end
|
471
|
-
end
|
472
|
-
|
473
|
-
# Call the hook method
|
474
|
-
if hookmethod.is_a? Proc
|
475
|
-
# Execute hook method
|
476
|
-
begin
|
477
|
-
p = { 'headers' => mailheader, 'message' => bodystring }
|
478
|
-
havecaught = hookmethod.call(p)
|
479
|
-
rescue StandardError => ce
|
480
|
-
warn sprintf(" ***warning: Something is wrong in hook method :%s", ce.to_s)
|
481
|
-
end
|
482
|
-
end
|
483
|
-
|
484
|
-
# EXPAND_FORWARDED_MESSAGE:
|
485
|
-
# Check whether or not the message is a bounce mail.
|
486
|
-
# Pre-Process email body if it is a forwarded bounce message.
|
487
|
-
# Get the original text when the subject begins from 'fwd:' or 'fw:'
|
488
|
-
if mailheader['subject'] =~ /\A[ \t]*fwd?:/i
|
489
|
-
# Delete quoted strings, quote symbols(>)
|
490
|
-
bodystring = bodystring.gsub(/^[>]+[ ]/m, '')
|
491
|
-
bodystring = bodystring.gsub(/^[>]$/m, '')
|
492
|
-
end
|
493
|
-
bodystring += EndOfEmail
|
494
|
-
haveloaded = {}
|
495
|
-
scannedset = nil
|
496
|
-
|
497
|
-
catch :SCANNER do
|
498
|
-
loop do
|
499
|
-
# 1. Sisimai::ARF
|
500
|
-
# 2. User-Defined Module
|
501
|
-
# 3. MTA Module Candidates to be tried on first
|
502
|
-
# 4. Sisimai::MTA::* and MSP::*
|
503
|
-
# 5. Sisimai::RFC3464
|
504
|
-
# 6. Sisimai::RFC3834
|
505
|
-
#
|
506
|
-
if Sisimai::ARF.is_arf(mailheader)
|
507
|
-
# Feedback Loop message
|
508
|
-
scannedset = Sisimai::ARF.scan(mailheader, bodystring)
|
509
|
-
throw :SCANNER if scannedset
|
510
|
-
end
|
511
|
-
|
512
|
-
tobeloaded.each do |r|
|
513
|
-
# Call user defined MTA modules
|
514
|
-
next if haveloaded[r]
|
515
|
-
begin
|
516
|
-
require r.gsub('::', '/').downcase
|
517
|
-
rescue LoadError => ce
|
518
|
-
warn ' ***warning: Failed to load ' + ce.to_s
|
519
|
-
next
|
520
|
-
end
|
521
|
-
scannedset = Module.const_get(r).scan(mailheader, bodystring)
|
522
|
-
haveloaded[r] = true
|
523
|
-
throw :SCANNER if scannedset
|
524
|
-
end
|
525
|
-
|
526
|
-
tryonfirst.each do |r|
|
527
|
-
# Try MTA module candidates which are detected from MTA specific
|
528
|
-
# mail headers on first
|
529
|
-
next if haveloaded.key?(r)
|
530
|
-
begin
|
531
|
-
require r.gsub('::', '/').downcase
|
532
|
-
rescue LoadError => ce
|
533
|
-
warn ' ***warning: ' + ce.to_s
|
534
|
-
next
|
535
|
-
end
|
536
|
-
scannedset = Module.const_get(r).scan(mailheader, bodystring)
|
537
|
-
haveloaded[r] = true
|
538
|
-
throw :SCANNER if scannedset
|
539
|
-
end
|
540
|
-
|
541
|
-
DefaultSet.each do |r|
|
542
|
-
# MTA/MSP modules which does not have MTA specific header and did
|
543
|
-
# not match with any regular expressions of Subject header.
|
544
|
-
next if haveloaded.key?(r)
|
545
|
-
begin
|
546
|
-
scannedset = Module.const_get(r).scan(mailheader, bodystring)
|
547
|
-
haveloaded[r] = true
|
548
|
-
throw :SCANNER if scannedset
|
549
|
-
rescue => ce
|
550
|
-
warn ' ***warning: ' + ce.to_s
|
551
|
-
next
|
552
|
-
end
|
553
|
-
|
554
|
-
end
|
555
|
-
|
556
|
-
# When the all of Sisimai::MTA::* modules did not return bounce data,
|
557
|
-
# call Sisimai::RFC3464;
|
558
|
-
require 'sisimai/rfc3464'
|
559
|
-
scannedset = Sisimai::RFC3464.scan(mailheader, bodystring)
|
560
|
-
break if scannedset
|
561
|
-
|
562
|
-
# Try to parse the message as auto reply message defined in RFC3834
|
563
|
-
require 'sisimai/rfc3834'
|
564
|
-
scannedset = Sisimai::RFC3834.scan(mailheader, bodystring)
|
565
|
-
break if scannedset
|
566
|
-
|
567
|
-
# as of now, we have no sample email for coding this block
|
568
|
-
break
|
569
|
-
end
|
570
|
-
end
|
571
|
-
|
572
|
-
scannedset['catch'] = havecaught if scannedset
|
573
|
-
return scannedset
|
574
|
-
end
|
104
|
+
# Load MTA modules which specified at 'order' and 'load' in the argument
|
105
|
+
# This method should be implemented at each child class
|
106
|
+
# @since v4.20.0
|
107
|
+
def load; return []; end
|
575
108
|
|
576
109
|
end
|
577
110
|
end
|