sisimai 5.0.3-java → 5.1.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codecovio.yml +3 -1
  3. data/.github/workflows/rake-test.yml +6 -2
  4. data/ChangeLog.md +34 -0
  5. data/README-JA.md +20 -17
  6. data/README.md +20 -17
  7. data/lib/sisimai/arf.rb +3 -3
  8. data/lib/sisimai/fact/json.rb +2 -2
  9. data/lib/sisimai/fact/yaml.rb +2 -2
  10. data/lib/sisimai/fact.rb +4 -19
  11. data/lib/sisimai/lhost/activehunter.rb +4 -3
  12. data/lib/sisimai/lhost/amavis.rb +4 -4
  13. data/lib/sisimai/lhost/amazonses.rb +6 -6
  14. data/lib/sisimai/lhost/amazonworkmail.rb +4 -4
  15. data/lib/sisimai/lhost/aol.rb +4 -4
  16. data/lib/sisimai/lhost/apachejames.rb +4 -4
  17. data/lib/sisimai/lhost/barracuda.rb +4 -4
  18. data/lib/sisimai/lhost/bigfoot.rb +4 -4
  19. data/lib/sisimai/lhost/biglobe.rb +4 -4
  20. data/lib/sisimai/lhost/courier.rb +4 -4
  21. data/lib/sisimai/lhost/domino.rb +4 -4
  22. data/lib/sisimai/lhost/dragonfly.rb +114 -0
  23. data/lib/sisimai/lhost/einsundeins.rb +4 -4
  24. data/lib/sisimai/lhost/exchange2003.rb +4 -3
  25. data/lib/sisimai/lhost/exchange2007.rb +4 -3
  26. data/lib/sisimai/lhost/exim.rb +4 -4
  27. data/lib/sisimai/lhost/ezweb.rb +4 -4
  28. data/lib/sisimai/lhost/facebook.rb +4 -4
  29. data/lib/sisimai/lhost/fml.rb +4 -4
  30. data/lib/sisimai/lhost/gmail.rb +4 -4
  31. data/lib/sisimai/lhost/gmx.rb +4 -4
  32. data/lib/sisimai/lhost/googlegroups.rb +4 -4
  33. data/lib/sisimai/lhost/gsuite.rb +4 -4
  34. data/lib/sisimai/lhost/imailserver.rb +4 -3
  35. data/lib/sisimai/lhost/interscanmss.rb +5 -4
  36. data/lib/sisimai/lhost/kddi.rb +4 -4
  37. data/lib/sisimai/lhost/mailfoundry.rb +4 -4
  38. data/lib/sisimai/lhost/mailmarshalsmtp.rb +5 -4
  39. data/lib/sisimai/lhost/mailru.rb +4 -4
  40. data/lib/sisimai/lhost/mcafee.rb +4 -4
  41. data/lib/sisimai/lhost/messagelabs.rb +4 -3
  42. data/lib/sisimai/lhost/messagingserver.rb +5 -4
  43. data/lib/sisimai/lhost/mfilter.rb +4 -4
  44. data/lib/sisimai/lhost/mxlogic.rb +3 -3
  45. data/lib/sisimai/lhost/notes.rb +4 -4
  46. data/lib/sisimai/lhost/office365.rb +4 -4
  47. data/lib/sisimai/lhost/opensmtpd.rb +9 -7
  48. data/lib/sisimai/lhost/outlook.rb +4 -4
  49. data/lib/sisimai/lhost/postfix.rb +4 -4
  50. data/lib/sisimai/lhost/powermta.rb +4 -4
  51. data/lib/sisimai/lhost/qmail.rb +10 -10
  52. data/lib/sisimai/lhost/receivingses.rb +4 -4
  53. data/lib/sisimai/lhost/sendgrid.rb +4 -4
  54. data/lib/sisimai/lhost/sendmail.rb +4 -4
  55. data/lib/sisimai/lhost/surfcontrol.rb +4 -4
  56. data/lib/sisimai/lhost/v5sendmail.rb +5 -4
  57. data/lib/sisimai/lhost/verizon.rb +4 -4
  58. data/lib/sisimai/lhost/x1.rb +3 -3
  59. data/lib/sisimai/lhost/x2.rb +3 -3
  60. data/lib/sisimai/lhost/x3.rb +3 -3
  61. data/lib/sisimai/lhost/x4.rb +3 -3
  62. data/lib/sisimai/lhost/x5.rb +3 -3
  63. data/lib/sisimai/lhost/x6.rb +3 -3
  64. data/lib/sisimai/lhost/yahoo.rb +4 -4
  65. data/lib/sisimai/lhost/yandex.rb +4 -4
  66. data/lib/sisimai/lhost/zoho.rb +4 -4
  67. data/lib/sisimai/lhost.rb +5 -5
  68. data/lib/sisimai/mail/maildir.rb +1 -1
  69. data/lib/sisimai/mail/stdin.rb +1 -1
  70. data/lib/sisimai/mda.rb +3 -3
  71. data/lib/sisimai/message.rb +8 -8
  72. data/lib/sisimai/order.rb +1 -0
  73. data/lib/sisimai/reason/badreputation.rb +1 -1
  74. data/lib/sisimai/reason/norelaying.rb +1 -0
  75. data/lib/sisimai/reason/rejected.rb +1 -0
  76. data/lib/sisimai/reason.rb +8 -8
  77. data/lib/sisimai/rfc3464.rb +3 -3
  78. data/lib/sisimai/rfc3834.rb +2 -2
  79. data/lib/sisimai/rhost/apple.rb +92 -0
  80. data/lib/sisimai/rhost/cox.rb +81 -32
  81. data/lib/sisimai/rhost/franceptt.rb +84 -81
  82. data/lib/sisimai/rhost/godaddy.rb +205 -43
  83. data/lib/sisimai/rhost/google.rb +3 -5
  84. data/lib/sisimai/rhost/iua.rb +2 -2
  85. data/lib/sisimai/rhost/kddi.rb +6 -5
  86. data/lib/sisimai/rhost/microsoft.rb +4 -5
  87. data/lib/sisimai/rhost/mimecast.rb +15 -4
  88. data/lib/sisimai/rhost/nttdocomo.rb +1 -1
  89. data/lib/sisimai/rhost/spectrum.rb +100 -40
  90. data/lib/sisimai/rhost/tencent.rb +46 -25
  91. data/lib/sisimai/rhost/yahooinc.rb +110 -0
  92. data/lib/sisimai/rhost.rb +28 -35
  93. data/lib/sisimai/smtp/reply.rb +4 -3
  94. data/lib/sisimai/smtp/transcript.rb +3 -3
  95. data/lib/sisimai/version.rb +1 -1
  96. data/lib/sisimai.rb +0 -6
  97. data/set-of-emails/maildir/bsd/lhost-dragonfly-01.eml +36 -0
  98. data/set-of-emails/maildir/bsd/lhost-dragonfly-02.eml +32 -0
  99. data/set-of-emails/maildir/bsd/lhost-dragonfly-03.eml +32 -0
  100. data/set-of-emails/maildir/bsd/lhost-dragonfly-04.eml +31 -0
  101. data/set-of-emails/maildir/bsd/lhost-dragonfly-05.eml +32 -0
  102. data/set-of-emails/maildir/bsd/lhost-dragonfly-06.eml +32 -0
  103. data/set-of-emails/maildir/bsd/lhost-dragonfly-07.eml +32 -0
  104. data/set-of-emails/maildir/bsd/lhost-dragonfly-08.eml +32 -0
  105. data/set-of-emails/maildir/bsd/lhost-dragonfly-09.eml +32 -0
  106. data/set-of-emails/maildir/bsd/lhost-dragonfly-10.eml +32 -0
  107. data/set-of-emails/maildir/bsd/lhost-dragonfly-11.eml +32 -0
  108. data/set-of-emails/maildir/bsd/lhost-dragonfly-12.eml +32 -0
  109. data/set-of-emails/maildir/bsd/lhost-dragonfly-13.eml +32 -0
  110. data/set-of-emails/maildir/bsd/lhost-dragonfly-14.eml +32 -0
  111. data/set-of-emails/maildir/bsd/lhost-dragonfly-15.eml +32 -0
  112. data/set-of-emails/maildir/bsd/lhost-dragonfly-16.eml +32 -0
  113. data/set-of-emails/maildir/bsd/lhost-dragonfly-17.eml +32 -0
  114. data/set-of-emails/maildir/bsd/lhost-dragonfly-18.eml +32 -0
  115. data/set-of-emails/maildir/bsd/lhost-dragonfly-19.eml +32 -0
  116. data/set-of-emails/maildir/bsd/lhost-dragonfly-20.eml +32 -0
  117. data/set-of-emails/maildir/bsd/lhost-dragonfly-21.eml +33 -0
  118. data/set-of-emails/maildir/bsd/lhost-dragonfly-22.eml +32 -0
  119. data/set-of-emails/maildir/bsd/lhost-dragonfly-23.eml +32 -0
  120. data/set-of-emails/maildir/bsd/lhost-dragonfly-24.eml +32 -0
  121. data/set-of-emails/maildir/bsd/lhost-dragonfly-25.eml +33 -0
  122. data/set-of-emails/maildir/bsd/lhost-dragonfly-26.eml +33 -0
  123. data/set-of-emails/maildir/bsd/lhost-dragonfly-27.eml +47 -0
  124. data/set-of-emails/maildir/bsd/lhost-dragonfly-28.eml +47 -0
  125. data/set-of-emails/maildir/bsd/lhost-dragonfly-29.eml +32 -0
  126. data/set-of-emails/maildir/bsd/lhost-dragonfly-30.eml +32 -0
  127. data/set-of-emails/maildir/bsd/lhost-opensmtpd-10.eml +58 -0
  128. data/set-of-emails/maildir/bsd/lhost-opensmtpd-11.eml +58 -0
  129. data/set-of-emails/maildir/bsd/lhost-opensmtpd-12.eml +62 -0
  130. data/set-of-emails/maildir/bsd/lhost-opensmtpd-13.eml +62 -0
  131. data/set-of-emails/maildir/bsd/lhost-opensmtpd-14.eml +58 -0
  132. data/set-of-emails/maildir/bsd/lhost-opensmtpd-15.eml +63 -0
  133. data/set-of-emails/maildir/bsd/lhost-opensmtpd-16.eml +62 -0
  134. data/set-of-emails/maildir/bsd/lhost-opensmtpd-17.eml +63 -0
  135. data/set-of-emails/maildir/bsd/lhost-qmail-11.eml +29 -0
  136. data/set-of-emails/maildir/bsd/lhost-qmail-12.eml +29 -0
  137. data/set-of-emails/maildir/bsd/lhost-qmail-13.eml +29 -0
  138. data/set-of-emails/maildir/bsd/lhost-qmail-14.eml +34 -0
  139. data/set-of-emails/maildir/bsd/lhost-qmail-15.eml +30 -0
  140. data/set-of-emails/maildir/bsd/lhost-qmail-16.eml +31 -0
  141. data/set-of-emails/maildir/bsd/lhost-qmail-17.eml +38 -0
  142. data/set-of-emails/maildir/bsd/lhost-qmail-18.eml +31 -0
  143. data/set-of-emails/maildir/bsd/lhost-qmail-19.eml +31 -0
  144. data/set-of-emails/maildir/bsd/lhost-qmail-20.eml +46 -0
  145. data/set-of-emails/maildir/bsd/lhost-qmail-21.eml +41 -0
  146. data/set-of-emails/maildir/bsd/lhost-qmail-22.eml +42 -0
  147. data/set-of-emails/maildir/bsd/lhost-qmail-23.eml +43 -0
  148. data/set-of-emails/maildir/bsd/lhost-qmail-24.eml +43 -0
  149. data/set-of-emails/maildir/bsd/lhost-qmail-25.eml +54 -0
  150. data/set-of-emails/maildir/bsd/rhost-apple-01.eml +79 -0
  151. data/set-of-emails/maildir/bsd/rhost-apple-02.eml +81 -0
  152. data/set-of-emails/maildir/bsd/rhost-apple-03.eml +75 -0
  153. data/set-of-emails/maildir/bsd/rhost-apple-04.eml +74 -0
  154. data/set-of-emails/maildir/bsd/rhost-yahooinc-01.eml +80 -0
  155. data/set-of-emails/maildir/bsd/rhost-yahooinc-02.eml +83 -0
  156. data/set-of-emails/maildir/bsd/rhost-yahooinc-03.eml +125 -0
  157. metadata +65 -2
@@ -6,144 +6,147 @@ module Sisimai
6
6
  module FrancePTT
7
7
  class << self
8
8
  ErrorCodes = {
9
- # 550 5.7.1 Service unavailable; client [X.X.X.X] blocked using Spamhaus
10
- # Les emails envoyes vers la messagerie Laposte.net ont ete bloques par nos services.
11
- # Afin de regulariser votre situation, nous vous invitons a cliquer sur le lien ci-dessous et a suivre la procedure.
12
- # The emails sent to the mail host Laposte.net were blocked by our services.
13
- # To regularize your situation please click on the link below and follow the procedure
14
- # https://www.spamhaus.org/lookup/ LPNAAA_101 (in reply to RCPT TO command))
9
+ # - 550 5.7.1 Service unavailable; client [192.0.2.1] blocked using Spamhaus
10
+ # Les emails envoyes vers la messagerie Laposte.net ont ete bloques par nos services.
11
+ # Afin de regulariser votre situation, nous vous invitons a cliquer sur le lien ci-dessous
12
+ # et a suivre la procedure.
13
+ # - The emails sent to the mail host Laposte.net were blocked by our services. To regularize
14
+ # your situation please click on the link below and follow the procedure
15
+ # https://www.spamhaus.org/lookup/ LPNAAA_101 (in reply to RCPT TO command))
15
16
  '101' => 'blocked',
16
17
 
17
- # 550 mwinf5c04 ME Adresse IP source bloquee pour incident de spam.
18
- # Client host blocked for spamming issues. OFR006_102 Ref
19
- #
20
- # refused to talk to me: 550 5.5.0 Les emails envoyes vers la messagerie Laposte.net ont ete bloques par nos services.
21
- # Afin de regulariser votre situation, nous vous invitons a cliquer sur le lien ci-dessous et a suivre la procedure.
22
- # The emails sent to the mail host Laposte.net were blocked by our services.
23
- # To regularize your situation please click on the link below and follow the procedure
24
- # https://senderscore.org/blacklistlookup/ LPN007_102
18
+ # - 550 mwinf5c04 ME Adresse IP source bloquee pour incident de spam.
19
+ # - Client host blocked for spamming issues. OFR006_102 Ref http://csi.cloudmark.com ...
20
+ # - 550 5.5.0 Les emails envoyes vers la messagerie Laposte.net ont ete bloques par nos
21
+ # services. Afin de regulariser votre situation, nous vous invitons a cliquer sur le lien
22
+ # ci-dessous et a suivre la procedure.
23
+ # - The emails sent to the mail host Laposte.net were blocked by our services. To regularize
24
+ # your situation please click on the link below and follow the procedure
25
+ # https://senderscore.org/blacklistlookup/ LPN007_102
25
26
  '102' => 'blocked',
26
27
 
27
- # refused to talk to me: 550 mwinf5c10 ME Service refuse. Veuillez essayer plus tard.
28
- # Service refused, please try later. OFR006_103 X.X.X.X [103]
28
+ # - 550 mwinf5c10 ME Service refuse. Veuillez essayer plus tard.
29
+ # - Service refused, please try later. OFR006_103 192.0.2.1 [103]
29
30
  '103' => 'blocked',
30
31
 
31
- # refused to talk to me: 421 mwinf5c79 ME Trop de connexions, veuillez verifier votre configuration.
32
- # Too many connections, slow down. OFR005_104 [104]
33
- # Too many connections, slow down. LPN105_104
32
+ # - 421 mwinf5c79 ME Trop de connexions, veuillez verifier votre configuration.
33
+ # - Too many connections, slow down. OFR005_104 [104]
34
+ # - Too many connections, slow down. LPN105_104
34
35
  '104' => 'toomanyconn',
35
36
 
36
- # Veuillez essayer plus tard.
37
- '105' => nil,
37
+ '105' => nil, # Veuillez essayer plus tard.
38
+ '107' => nil, # Service refused, please try later. LPN006_107
39
+ '108' => nil, # service refused, please try later. LPN001_108
40
+ '109' => nil, # Veuillez essayer plus tard. LPN003_109
41
+ '201' => nil, # Veuillez essayer plus tard. OFR004_201
38
42
 
39
- # refused to talk to me: 421 4.2.1 Service refuse. Veuillez essayer plus tard.
40
- # Service refused, please try later. LPN006_107)
41
- '107' => nil,
42
-
43
- # refused to talk to me: 550 5.5.0 Service refuse. Veuillez essayer plus tard.
44
- # service refused, please try later. LPN001_108
45
- '108' => nil,
46
-
47
- # Veuillez essayer plus tard. LPN003_109
48
- '109' => nil,
49
-
50
- # Veuillez essayer plus tard. OFR004_201
51
- '201' => nil,
52
-
53
- # 550 5.7.0 Code d'authentification invalide OFR_305
43
+ # - 550 5.7.0 Code d'authentification invalide OFR_305
54
44
  '305' => 'securityerror',
55
45
 
56
- # 550 5.5.0 SPF: *** is not allowed to send mail. LPN004_401
57
- '401' => 'blocked',
46
+ # - 550 5.5.0 SPF: *** is not allowed to send mail. LPN004_401
47
+ '401' => 'authfailure',
58
48
 
59
- # 550 5.5.0 Authentification requise. Authentication Required. LPN105_402
49
+ # - 550 5.5.0 Authentification requise. Authentication Required. LPN105_402
60
50
  '402' => 'securityerror',
61
51
 
62
- # 5.0.1 Emetteur invalide. Invalid Sender.
52
+ # - 5.0.1 Emetteur invalide. Invalid Sender.
63
53
  '403' => 'rejected',
64
54
 
65
- # 5.0.1 Emetteur invalide. Invalid Sender. LPN105_405
66
- # 501 5.1.0 Emetteur invalide. Invalid Sender. OFR004_405 [405] (in reply to MAIL FROM command))
55
+ # - 5.0.1 Emetteur invalide. Invalid Sender. LPN105_405
56
+ # - 501 5.1.0 Emetteur invalide. Invalid Sender. OFR004_405 [405] (in reply to MAIL FROM command))
67
57
  '405' => 'rejected',
68
58
 
69
59
  # Emetteur invalide. Invalid Sender. OFR_415
70
60
  '415' => 'rejected',
71
61
 
72
- # 550 5.1.1 Adresse d au moins un destinataire invalide.
73
- # Invalid recipient. LPN416 (in reply to RCPT TO command)
74
- # Invalid recipient. OFR_416 [416] (in reply to RCPT TO command)
62
+ # - 550 5.1.1 Adresse d au moins un destinataire invalide.
63
+ # - Invalid recipient. LPN416 (in reply to RCPT TO command)
64
+ # - Invalid recipient. OFR_416 [416] (in reply to RCPT TO command)
75
65
  '416' => 'userunknown',
76
66
 
77
- # 552 5.1.1 Boite du destinataire pleine.
78
- # Recipient overquota. OFR_417 [417] (in reply to RCPT TO command))
67
+ # - 552 5.1.1 Boite du destinataire pleine.
68
+ # - Recipient overquota. OFR_417 [417] (in reply to RCPT TO command))
79
69
  '417' => 'mailboxfull',
80
70
 
81
- # Adresse d au moins un destinataire invalide
82
- '418' => 'userunknown',
71
+ # - Adresse d au moins un destinataire invalide
83
72
 
84
- # 550 5.5.0 Boite du destinataire archivee.
85
- # Archived recipient. LPN007_420 (in reply to RCPT TO command)
73
+ # - 550 5.5.0 Boite du destinataire archivee.
74
+ # - Archived recipient. LPN007_420 (in reply to RCPT TO command)
86
75
  '420' => 'suspend',
87
76
 
88
- # 5.5.3 Mail from not owned by user. LPN105_421.
77
+ # - 5.5.3 Mail from not owned by user. LPN105_421.
89
78
  '421' => 'rejected',
90
79
 
91
- # Service refused, please try later. LPN105_423
92
- '423' => nil,
80
+ '423' => nil, # Service refused, please try later. LPN105_423
81
+ '424' => nil, # Veuillez essayer plus tard. LPN105_424
93
82
 
94
- # Veuillez essayer plus tard. LPN105_424
95
- '424' => nil,
96
-
97
- # 550 5.5.0 Le compte du destinataire est bloque. The recipient account isblocked. LPN007_426 (in reply to RCPT TO command)
83
+ # - 550 5.5.0 Le compte du destinataire est bloque. The recipient account isblocked.
84
+ # LPN007_426 (in reply to RCPT TO command)
98
85
  '426' => 'suspend',
99
86
 
100
- # 421 4.2.0 Service refuse. Veuillez essayer plus tard.
101
- # Service refused, please try later. OFR005_505 [505] (in reply to end of DATA command)
102
- #
103
- # 421 4.2.1 Service refuse. Veuillez essayer plus tard.
104
- # Service refused, please try later. LPN007_505 (in reply to end of DATA command)
87
+ # - 421 4.2.0 Service refuse. Veuillez essayer plus tard. Service refused, please try later.
88
+ # OFR005_505 [505] (in reply to end of DATA command)
89
+ # - 421 4.2.1 Service refuse. Veuillez essayer plus tard. Service refused, please try later.
90
+ # LPN007_505 (in reply to end of DATA command)
105
91
  '505' => 'systemerror',
106
92
 
107
- # Mail rejete. Mail rejected. OFR_506 [506]
93
+ # - Mail rejete. Mail rejected. OFR_506 [506]
108
94
  '506' => 'spamdetected',
109
95
 
110
- # 550 5.5.0 Service refuse. Veuillez essayer plus tard.
111
- # service refused, please try later. LPN005_510 (in reply to end of DATA command)
96
+ # - 550 5.5.0 Service refuse. Veuillez essayer plus tard. service refused, please try later.
97
+ # LPN005_510 (in reply to end of DATA command)
112
98
  '510' => 'blocked',
113
99
 
114
- # Mail rejete. Mail rejected. OUK_513
115
- '513' => nil,
100
+ '513' => nil, # Mail rejete. Mail rejected. OUK_513
116
101
 
117
- # Taille limite du message atteinte
102
+ # - Taille limite du message atteinte
118
103
  '514' => 'mesgtoobig',
119
104
 
120
- # 571 5.7.1 Message refused, DMARC verification Failed.
121
- # Message refuse, verification DMARC en echec LPN007_517
122
- '517' => 'policyviolation',
105
+ # - 571 5.7.1 Message refused, DMARC verification Failed.
106
+ # - Message refuse, verification DMARC en echec LPN007_517
107
+ '517' => 'authfailure',
123
108
 
124
- # 554 5.7.1 Client host rejected
125
- # LPN000_630
109
+ # - 554 5.7.1 Client host rejected LPN000_630
126
110
  '630' => 'policyviolation',
127
111
 
128
- # 421 mwinf5c77 ME Service refuse. Veuillez essayer plus tard.
129
- # Service refused, please try later. OFR_999 [999]
112
+ # - 421 mwinf5c77 ME Service refuse. Veuillez essayer plus tard. Service refused, please try
113
+ # later. OFR_999 [999]
130
114
  '999' => 'blocked',
131
115
  }.freeze
116
+ MessagesOf = {
117
+ 'authfailure' => [
118
+ # - 421 smtp.orange.fr [192.0.2.1] Emetteur invalide, Veuillez verifier la configuration
119
+ # SPF/DNS de votre nom de domaine. Invalid Sender. SPF check failed, please verify the
120
+ # SPF/DNS configuration for your domain name.
121
+ 'spf/dns de votre nom de domaine',
122
+ ],
123
+ }.freeze
132
124
 
133
125
  # Detect bounce reason from Oranage or La Poste
134
- # @param [Sisimai::Fact] argvs Parsed email object
126
+ # @param [Sisimai::Fact] argvs Decoded email object
135
127
  # @return [String] The bounce reason for Orange or La Poste
128
+ # @see https://www.postmastery.com/orange-postmaster-smtp-error-codes-ofr/
129
+ # https://smtpfieldmanual.com/provider/orange
136
130
  def get(argvs)
137
- return argvs['reason'] unless argvs['reason'].empty?
138
-
139
- statusmesg = argvs['diagnosticcode']
131
+ issuedcode = argvs['diagnosticcode']
140
132
  reasontext = ''
141
133
 
142
- if cv = statusmesg.match(/\b(LPN|LPNAAA|OFR|OUK)(_[0-9]{3}|[0-9]{3}[-_][0-9]{3})\b/i)
134
+ if cv = issuedcode.match(/\b(LPN|LPNAAA|OFR|OUK)(_[0-9]{3}|[0-9]{3}[-_][0-9]{3})\b/i)
143
135
  # OUK_513, LPN105-104, OFR102-104, ofr_506
144
136
  v = sprintf("%03d", (cv[1] + cv[2])[-3, 3])
145
137
  reasontext = ErrorCodes[v] || 'undefined'
146
138
  end
139
+ return reasontext if reasontext.size > 0
140
+
141
+ issuedcode = issuedcode.downcase
142
+ MessagesOf.each_key do |e|
143
+ MessagesOf[e].each do |f|
144
+ next unless issuedcode.include?(f)
145
+ reasontext = e
146
+ break
147
+ end
148
+ break if reasontext.size > 0
149
+ end
147
150
  return reasontext
148
151
  end
149
152
 
@@ -7,59 +7,221 @@ module Sisimai
7
7
  class << self
8
8
  # https://www.godaddy.com/help/what-does-my-email-bounceback-mean-3568
9
9
  ErrorCodes = {
10
- 'IB103' => 'badreputation', # 554 Connection refused. This IP has a poor reputation on Cloudmark Sender Intelligence (CSI). IB103
11
- 'IB104' => 'blocked', # 554 Connection refused. This IP is listed on the Spamhaus Block List (SBL). IB104
12
- 'IB105' => 'blocked', # 554 Connection refused. This IP is listed on the Exploits Block List (XBL). IB105
13
- 'IB106' => 'blocked', # 554 Connection refused. This IP is listed on the Policy Block List (PBL). IB106
14
- 'IB007' => 'toomanyconn', # 421 Connection refused, too many sessions from This IP. Please lower the number of concurrent sessions. IB007
15
- 'IB101' => 'expired', # 421 Server temporarily unavailable. Try again later. IB101
16
- 'IB108' => 'blocked', # 421 Temporarily rejected. Reverse DNS for this IP failed. IB108
17
- 'IB110' => 'blocked', # 554 This IP has been temporarily blocked for attempting to send too many messages containing content judged to be spam by the Internet community. IB110
18
- 'IB111' => 'blocked', # 554 This IP has been blocked for the day, for attempting to send too many messages containing content judged to be spam by the Internet community. IB111
19
- 'IB112' => 'blocked', # 554 This IP has been temporarily blocked for attempting to mail too many invalid recipients. IB112
20
- 'IB113' => 'blocked', # 554 This IP has been blocked for the day, for attempting to mail too many invalid recipients. IB113
21
- 'IB212' => 'spamdetected', # 552 This message has been rejected due to content judged to be spam by the Internet community. IB212
22
- 'IB401' => 'securityerror', # 535 Authentication not allowed on IBSMTP Servers. IB401
23
- 'IB501' => 'rejected', # 550 holly@coolexample.com Blank From: addresses are not allowed. Please provide a valid From. IB501
24
- 'IB502' => 'rejected', # 550 holly@coolexample.com IP addresses are not allowed as a From: Address. Please provide a valid From. IB502
25
- 'IB504' => 'toomanyconn', # 550 This IP has sent too many messages this hour. IB504
26
- 'IB506' => 'rejected', # 550 coolexample.com From: Domain is invalid. Please provide a valid From: IB506
27
- 'IB508' => 'rejected', # 550 holly@coolexample.com Invalid SPF record. Please inspect your SPF settings, and try again. IB508
28
- 'IB510' => 'toomanyconn', # 550 This message has exceeded the max number of messages per session. Please open a new session and try again. IB510
29
- 'IB607' => 'toomanyconn', # 550 This IP has sent too many to too many recipients this hour. IB607
30
- 'IB705' => 'virusdetected', # 552 Virus infected message rejected. IB705
10
+ # Sender bounces
11
+ # ---------------------------------------------------------------------------------------
12
+ # - 535 Authentication not allowed on IBSMTP Servers. IB401
13
+ # - Authentication is not allowed on inbound mail. This happens when you have incorrect
14
+ # outgoing SMTP server settings set up in your email client, like Outlook or Gmail.
15
+ # - Set up your email client using the SMTP server setting smtpout.secureserver.net.
16
+ 'IB401' => 'securityerror',
17
+
18
+ # - 550 jane@coolexample.com Blank From: addresses are not allowed. Provide a valid From.
19
+ # IB501
20
+ # - The email message "from" field is blank.
21
+ # - Add a valid "from" address and try to send the email again.
22
+ 'IB501' => 'notcompliantrfc',
23
+
24
+ # - 550 jane@coolexample.com IP addresses are not allowed as a From: Address. Provide a
25
+ # valid From. IB502
26
+ # - Email messages can't be sent "from" an IP address.
27
+ # - Add a valid "from" address and try to send the email again.
28
+ 'IB502' => 'notcompliantrfc',
29
+
30
+ # - 550 coolexample.com From: Domain is invalid. Provide a valid From: IB506
31
+ # - The domain doesn't have valid MX Records, an IP address, or there were issues during
32
+ # the DNS lookup when the email was sent.
33
+ # - Verify that you're sending from a valid domain. Then verify that the domain has valid
34
+ # DNS records by checking your zone file. If the DNS isn't valid, it must be fixed
35
+ # before you resend the email.
36
+ 'IB506' => 'rejected',
37
+
38
+ # - 550 jane@coolexample.com Invalid SPF record. Inspect your SPF settings, and try again.
39
+ # IB508
40
+ # - The sending email address's domain has an SPF record that does not authorize the
41
+ # sending email server to send email from the domain.
42
+ # - Modify the SPF record to include the server you're trying to send from or remove the
43
+ # SPF record from the domain.
44
+ 'IB508' => 'authfailure',
45
+
46
+ # - 421 Temporarily rejected. Reverse DNS for this IP failed. IB108
47
+ # - The IP address attempting to send mail does not have reverse DNS setup, or the DNS
48
+ # lookup failed.
49
+ # - Verify the sending IP address has reverse DNS set up before resending the email.
50
+ # GoDaddy manages reverse DNS when using our email services. We do not support custom
51
+ # reverse DNS.
52
+ 'IB108' => 'requireptr',
53
+
54
+ # Content bounces
55
+ # ---------------------------------------------------------------------------------------
56
+ # - 552 This message has been rejected due to content judged to be spam by the internet
57
+ # community. IB212
58
+ # - The email message contains a link, attachment or pattern caught by our filters as spam.
59
+ 'IB212' => 'spamdetected',
60
+
61
+ # - 552 Virus infected message rejected. IB705
62
+ # - The email message containing a link, attachment or pattern caught by our filters as a
63
+ # possible virus.
64
+ 'IB705' => 'virusdetected',
65
+
66
+ # Rate limiting bounces
67
+ # ---------------------------------------------------------------------------------------
68
+ # - 452 This message contains too many recipients. Reduce the number of recipients and
69
+ # retry. IB605
70
+ # - The message has attempted to mail too many recipients.
71
+ # - Reduce the number of recipients and try again.
72
+ 'IB605' => 'toomanyconn',
73
+
74
+ # - 421 Connection refused, too many sessions from This IP. Lower the number of concurrent
75
+ # sessions. IB007
76
+ # - This IP address currently has too many sessions open.
77
+ # - Check with your email provider to reduce the number of open sessions on your IP
78
+ # address and then try again.
79
+ 'IB007' => 'toomanyconn',
80
+
81
+ # - 421 Server temporarily unavailable. Try again later. IB101
82
+ # - The email queue is experiencing higher than normal email volume.
83
+ # - Try again later.
84
+ 'IB101' => 'speeding',
85
+
86
+ # - 554 This IP has been temporarily blocked for attempting to send too many messages
87
+ # containing content judged to be spam by the Internet community. IB110
88
+ # - This IP address has attempted to send too many messages containing content judged to
89
+ # be spam and has been blocked for an hour.
90
+ # - If you're not sending spam, you'll need to contact your Internet Service Provider
91
+ # (ISP) to see why your IP address is sending so many emails. Something in your system
92
+ # is causing the issue, and you'll need to troubleshoot.
93
+ 'IB110' => 'blocked',
94
+
95
+ # - 554 This IP has been blocked for the day, for attempting to send too many messages
96
+ # containing content judged to be spam by the Internet community. IB111
97
+ # - This IP address has attempted to send too many messages containing content judged to
98
+ # be spam and has been blocked for the remainder of the day.
99
+ 'IB111' => 'blocked',
100
+
101
+ # - 554 This IP has been temporarily blocked for attempting to mail too many invalid
102
+ # recipients. IB112
103
+ # - This IP address has attempted to email too many invalid recipients and has been
104
+ # blocked for an hour.
105
+ 'IB112' => 'blocked',
106
+
107
+ # - 554 This IP has been blocked for the day, for attempting to mail too many invalid
108
+ # recipients. IB113
109
+ # - This IP address has attempted to email too many invalid recipients and has been
110
+ # blocked for the remainder of the day.
111
+ 'IB113' => 'blocked',
112
+
113
+ # - 550 This IP has sent too many messages this hour. IB504
114
+ # - This IP address has reached the maximum allowed messages for that hour.
115
+ 'IB504' => 'speeding',
116
+
117
+ # - 550 This message has exceeded the max number of messages per session. Open a new
118
+ # session and try again. IB510
119
+ # - This IP address has reached the maximum allowed messages for that session.
120
+ 'IB510' => 'speeding',
121
+
122
+ # - 550 This IP has sent too many to too many recipients this hour. IB607
123
+ # - This IP address has reached the maximum allowed recipients for that hour.
124
+ 'IB607' => 'speeding',
125
+
126
+ # Remote block list (RBL) bounces
127
+ # ---------------------------------------------------------------------------------------
128
+ # - 554 Connection refused. This IP has a poor reputation on Cloudmark Sender Intelligence
129
+ # (CSI). IB103
130
+ # - This IP address has a poor reputation on Cloudmark Sender Intelligence (CSI).
131
+ 'IB103' => 'badreputation',
132
+
133
+ # - 554 Connection refused. This IP address is listed on the Spamhaus Block List (SBL). IB104
134
+ # - This IP address is listed on the Spamhaus Block List.
135
+ 'IB104' => 'blocked',
136
+
137
+ # - 554 Connection refused. This IP address is listed on the Exploits Block List (XBL). IB105
138
+ # - This IP address is listed on the Spamhaus Exploits Block List.
139
+ 'IB105' => 'blocked',
140
+
141
+ # - 554 Connection refused. This IP address is listed on the Policy Block List (PBL). IB106
142
+ # - This IP address is listed on the Spamhaus Policy Block List.
143
+ 'IB106' => 'blocked',
31
144
  }.freeze
32
145
  MessagesOf = {
33
- 'blocked' => ['www.spamhaus.org/query/bl?ip=', '554 RBL Reject.'],
34
- 'expired' => ['Delivery timeout', "451 Sorry, I wasn't able to establish an SMTP connection."],
35
- 'suspend' => ['Account disabled'],
36
- 'mailboxfull' => ['Account storage limit'],
37
- 'userunknown' => ['Account does not exist', '550 Recipient not found.'],
146
+ 'blocked' => [
147
+ # - 554 RBL Reject.
148
+ # - This IP address was blocked from our internal RBL.
149
+ # - Use the link provided in the bounceback to submit a request to remove this IP address.
150
+ 'rbl reject',
151
+ 'www.spamhaus.org/query/bl?ip='
152
+ ],
153
+ 'expired' => [
154
+ # - 451 Sorry, I wasn't able to establish an SMTP connection.
155
+ # I'm not going to try again; this message has been in the queue too long.
156
+ # - The recipient's email address has been misspelled or the recipient's email provider
157
+ # has blocked sending from your address.
158
+ 'has been in the queue too long',
159
+
160
+ # - Delivery timeout
161
+ # - This could happen for several reasons.
162
+ 'delivery timeout',
163
+ ],
164
+ 'mailboxfull' => [
165
+ # - Account storage limit
166
+ # - The recipient's account has reached its storage limit and can't receive email right
167
+ # now.
168
+ # - The recipient needs to delete messages from their inbox or the receiving folder to
169
+ # make space for more email.
170
+ 'account storage limit',
171
+ ],
172
+ 'spamdetected' => [
173
+ # - 552 Message rejected for spam or virus content
174
+ # - The email message contains a link, attachment, or pattern caught by our filters as spam.
175
+ 'message rejected for spam or virus content',
176
+ ],
177
+ 'suspend' => [
178
+ # - Account disabled
179
+ # - The recipient account exists but its ability to receive mail was disabled.
180
+ # - Typically, these accounts remain permanently disabled, but you can try sending the
181
+ # email again later.
182
+ 'account disabled',
183
+ ],
184
+ 'systemerror' => [
185
+ # - This message is looping: it already has my Delivered-To line. (#5.4.6)
186
+ # - The recipient account is forwarding the message in a loop.
187
+ # - This is oftentimes because the receiver has two addresses that forward to each
188
+ # other. They need to correct their forwarding settings.
189
+ 'message is looping',
190
+ ],
191
+ 'userunknown' => [
192
+ # - 550 Recipient not found
193
+ # - The recipient is not a valid email address.
194
+ # - Remove the invalid recipient from your email.
195
+ 'recipient not found',
196
+
197
+ # - Account does not exist
198
+ # - The email address that you sent to does not exist.
199
+ # - Verify that the recipient email address was entered correctly.
200
+ 'account does not exist'
201
+ ],
38
202
  }.freeze
39
203
 
40
204
  # Detect bounce reason from GoDaddy
41
- # @param [Sisimai::Fact] argvs Parsed email object
205
+ # @param [Sisimai::Fact] argvs Decoded email object
42
206
  # @return [String] The bounce reason for GoDaddy
43
- # @see https://www.godaddy.com/help/what-does-my-email-bounceback-mean-3568
207
+ # @see https://ca.godaddy.com/help/fix-rejected-email-with-a-bounce-error-40685
208
+ # @since v4.22.2
44
209
  def get(argvs)
45
- return argvs['reason'] unless argvs['reason'].empty?
46
-
47
- statusmesg = argvs['diagnosticcode']
48
- positionib = statusmesg.index(' IB') || -1
210
+ issuedcode = argvs['diagnosticcode']
211
+ positionib = issuedcode.index(' IB') || -1
49
212
  reasontext = ''
50
213
 
51
- # 192.0.2.22 has sent to too many recipients this hour. IB607 ...
52
- reasontext = ErrorCodes[statusmesg[positionib + 1, 5]] || '' if positionib > 1
53
- if reasontext.empty?
54
- # 553 http://www.spamhaus.org/query/bl?ip=192.0.0.222
55
- MessagesOf.each_key do |e|
56
- MessagesOf[e].each do |f|
57
- next unless statusmesg.include?(f)
58
- reasontext = e
59
- break
60
- end
61
- break unless reasontext.empty?
214
+ reasontext = ErrorCodes[issuedcode[positionib + 1, 5]] || '' if positionib > 1
215
+ return reasontext if reasontext.size > 0
216
+
217
+ issuedcode = issuedcode.downcase
218
+ MessagesOf.each_key do |e|
219
+ MessagesOf[e].each do |f|
220
+ next unless issuedcode.include?(f)
221
+ reasontext = e
222
+ break
62
223
  end
224
+ break if reasontext.size > 0
63
225
  end
64
226
 
65
227
  return reasontext
@@ -509,25 +509,23 @@ module Sisimai
509
509
  }.freeze
510
510
 
511
511
  # Detect bounce reason from Google Workspace
512
- # @param [Sisimai::Fact] argvs Parsed email object
512
+ # @param [Sisimai::Fact] argvs Decoded email object
513
513
  # @return [String] The bounce reason for Google Workspace
514
514
  # @see https://support.google.com/a/answer/3726730?hl=en
515
515
  def get(argvs)
516
- return argvs['reason'] unless argvs['reason'].empty?
517
- return '' if argvs['diagnosticcode'].empty?
518
516
  return '' unless Sisimai::SMTP::Reply.test(argvs['replycode'])
519
517
  return '' unless Sisimai::SMTP::Status.test(argvs['deliverystatus'])
520
518
 
521
519
  statuscode = argvs['deliverystatus'][2,6]
522
520
  esmtpreply = argvs['replycode'][1,2]
523
- esmtperror = argvs['diagnosticcode'].downcase
521
+ issuedcode = argvs['diagnosticcode'].downcase
524
522
  reasontext = ''
525
523
 
526
524
  MessagesOf.each_key do |e|
527
525
  # Each key is a reason name
528
526
  MessagesOf[e].each do |f|
529
527
  # Try to match an SMTP reply code, a D.S.N, and an error message
530
- next unless esmtperror.include?(f[2])
528
+ next unless issuedcode.include?(f[2])
531
529
  next unless f[0].end_with?(esmtpreply)
532
530
  next unless f[1].end_with?(statuscode)
533
531
  reasontext = e
@@ -6,7 +6,7 @@ module Sisimai
6
6
  module IUA
7
7
  class << self
8
8
  ErrorCodes = {
9
- # http://mail.i.ua/err/$(CODE)
9
+ # https://mail.i.ua/err/$(CODE)
10
10
  '1' => 'norelaying', # The use of SMTP as mail gate is forbidden.
11
11
  '2' => 'userunknown', # User is not found.
12
12
  '3' => 'suspend', # Mailbox was not used for more than 3 months
@@ -20,7 +20,7 @@ module Sisimai
20
20
  }.freeze
21
21
 
22
22
  # Detect bounce reason from https://www.i.ua/
23
- # @param [Sisimai::Fact] argvs Parsed email object
23
+ # @param [Sisimai::Fact] argvs Decoded email object
24
24
  # @return [String] The bounce reason at https://www.i.ua/
25
25
  def get(argvs)
26
26
  return argvs['reason'] unless argvs['reason'].empty?
@@ -6,20 +6,21 @@ module Sisimai
6
6
  module KDDI
7
7
  class << self
8
8
  MessagesOf = {
9
- 'filtered' => '550 : User unknown', # The response was: 550 : User unknown
10
- 'userunknown' => '>: User unknown', # The response was: 550 <...>: User unknown
9
+ 'filtered' => '550 : user unknown', # The response was: 550 : User unknown
10
+ 'userunknown' => '>: user unknown', # The response was: 550 <...>: User unknown
11
11
  }.freeze
12
12
 
13
13
  # Detect bounce reason from au (KDDI)
14
- # @param [Sisimai::Fact] argvs Parsed email object
14
+ # @param [Sisimai::Fact] argvs Decoded email object
15
15
  # @return [String] The bounce reason for au.com or ezweb.ne.jp
16
+ # @since v4.22.6
16
17
  def get(argvs)
17
- statusmesg = argvs['diagnosticcode']
18
+ issuedcode = argvs['diagnosticcode'].downcase
18
19
  reasontext = ''
19
20
 
20
21
  MessagesOf.each_key do |e|
21
22
  # Try to match the error message with message patterns defined in $MessagesOf
22
- next unless statusmesg.include?(MessagesOf[e])
23
+ next unless issuedcode.include?(MessagesOf[e])
23
24
  reasontext = e
24
25
  break
25
26
  end
@@ -711,16 +711,15 @@ module Sisimai
711
711
  }.freeze
712
712
 
713
713
  # Detect bounce reason from Exchange Server 2019 or older and Exchange Online
714
- # @param [Sisimai::Fact] argvs Parsed email object
714
+ # @param [Sisimai::Fact] argvs Decoded email object
715
715
  # @return [String] The bounce reason for Exchange Online
716
+ # @since v4.17.2
716
717
  def get(argvs)
717
- return argvs['reason'] unless argvs['reason'].empty?
718
- return '' if argvs['diagnosticcode'].empty?
719
718
  return '' if argvs['deliverystatus'].empty?
720
719
  return '' unless Sisimai::SMTP::Status.test(argvs['deliverystatus'])
721
720
 
722
721
  statuscode = argvs['deliverystatus']
723
- esmtperror = argvs['diagnosticcode'].downcase
722
+ issuedcode = argvs['diagnosticcode'].downcase
724
723
  thirddigit = statuscode.split('.')[-1].to_i
725
724
  reasontext = ''
726
725
 
@@ -738,7 +737,7 @@ module Sisimai
738
737
  next if thirddigit > f[2]
739
738
  end
740
739
 
741
- next unless esmtperror.include?(f[3])
740
+ next unless issuedcode.include?(f[3])
742
741
  reasontext = e
743
742
  break
744
743
  end