sisimai 4.25.0-java → 4.25.1-java

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sisimai might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7aa5cc01306c3b0f700213220f61eb69664fbbe3
4
- data.tar.gz: 605434fbe0db77535056d60f02fbe09437bd30c7
3
+ metadata.gz: 6db6c4e44ac509561c439034227dabc3cd6f1c9d
4
+ data.tar.gz: 66edf604fc32a44ba203ccd6963635f4d5b1bd5d
5
5
  SHA512:
6
- metadata.gz: b4cad32a42fc61d64af6b20e59e0219e5e43877b1e902e5be98c4e09f3cc9a42441a8023a7e4db588133f47a6e9a2daa7a0216e10bda0b6589290de6c25f6a4e
7
- data.tar.gz: 34cb8665b9892423a33dc0ba86ed31e7dd5fb3d0b136bd66cdc98e7ce12cb7b641453dec532f7cf6ec3941995a98dc309bf7f12886be049a32242c7713101b50
6
+ metadata.gz: b88676a692f29455c0791dd5197c265a7cef4f453355e574df57587c3893a525ca5c57d428185575c156691b19041c98a6559b84e470116f9f35e2ff2b6f07b7
7
+ data.tar.gz: 4af2ab72159e755035bda03dc5ce9d21ce0f96e9e1eb993d3d4d4420f2c14207b088e30db68649e18b3e87e307d2d4e8a05431f3d2e4549510194cba4c170395
@@ -3,6 +3,26 @@ RELEASE NOTES for Ruby version of Sisimai
3
3
  - releases: "https://github.com/sisimai/rb-Sisimai/releases"
4
4
  - download: "https://rubygems.org/gems/sisimai"
5
5
 
6
+ v4.25.1
7
+ --------------------------------------------------------------------------------
8
+ - release: "4.25.1"
9
+ - version: ""Tue, 23 Jul 2019 10:00:00 +0900 (JST)
10
+ - changes:
11
+ - Check the format of the value of `Message-Id` header for detecting a bounce
12
+ mail from Exim or not.
13
+ - Call `Sisimai::Rhost::FrancePTT` module when the value of `rhost` includes
14
+ `.wanadoo.fr`.
15
+ - Fix code at `Sisimai::Message::Email.takeapart` method to decode a Subject
16
+ header of the original message.
17
+ - #147 Update error messages for Low Reputation Error from Gmail.
18
+ - Parser code to read bounce mails from m-FILTER at `Sisimai::Message::Email`
19
+ has been improved.
20
+ - Status 5.4.1 from Exchange Online is classified into "rejected" reason.
21
+ - Callback method specified at `Sisimai::Message.new()` with `hook` is called
22
+ just before calling `scan()` method of each `Sisimai::Bite::Email` module.
23
+ - Code improvement in `Sisimai::Bite::Email::Sendmail` for getting error mes-
24
+ sages returned from Google.
25
+
6
26
  v4.25.0
7
27
  --------------------------------------------------------------------------------
8
28
  - release: "Tue, 9 Apr 2019 11:22:22 +0900 (JST)"
@@ -80,10 +80,10 @@ Install
80
80
 
81
81
  ```shell
82
82
  $ sudo gem install sisimai
83
- Fetching: sisimai-4.25.0.gem (100%)
84
- Successfully installed sisimai-4.25.0
85
- Parsing documentation for sisimai-4.25.0
86
- Installing ri documentation for sisimai-4.25.0
83
+ Fetching: sisimai-4.25.1.gem (100%)
84
+ Successfully installed sisimai-4.25.1
85
+ Parsing documentation for sisimai-4.25.1
86
+ Installing ri documentation for sisimai-4.25.1
87
87
  Done installing documentation for sisimai after 6 seconds
88
88
  1 gem installed
89
89
  ```
@@ -99,8 +99,8 @@ gem install bundle rake rspec coveralls
99
99
  ...
100
100
  4 gems installed
101
101
  bundle exec rake install
102
- sisimai 4.25.0 built to pkg/sisimai-4.25.0.gem.
103
- sisimai (4.25.0) installed.
102
+ sisimai 4.25.1 built to pkg/sisimai-4.25.1.gem.
103
+ sisimai (4.25.1) installed.
104
104
  ```
105
105
 
106
106
  Usage
@@ -245,9 +245,9 @@ Differences between Ruby version and Perl version
245
245
  | インストール方法 | gem install | cpanm, cpm |
246
246
  | 依存モジュール数(コアモジュールを除く) | 1モジュール | 2モジュール |
247
247
  | LOC:ソースコードの行数 | 11700行 | 8200行 |
248
- | テスト件数(spec/,t/,xt/ディレクトリ) | 224000件 | 242000件 |
248
+ | テスト件数(spec/,t/,xt/ディレクトリ) | 225000件 | 242000件 |
249
249
  | ライセンス | 二条項BSD | 二条項BSD |
250
- | 開発会社によるサポート契約 | 準備中 | 提供中 |
250
+ | 開発会社によるサポート契約 | 提供中 | 提供中 |
251
251
 
252
252
  1. [./ANALYTICAL-PRECISION](https://github.com/sisimai/rb-Sisimai/blob/master/ANALYTICAL-PRECISION)を参照
253
253
  2. Xeon E5-2640 2.5GHz x 2 cores | 5000 bogomips | 1GB RAM | Ruby 2.3.4p301
data/README.md CHANGED
@@ -85,10 +85,10 @@ Install
85
85
 
86
86
  ```shell
87
87
  $ sudo gem install sisimai
88
- Fetching: sisimai-4.25.0.gem (100%)
89
- Successfully installed sisimai-4.25.0
90
- Parsing documentation for sisimai-4.25.0
91
- Installing ri documentation for sisimai-4.25.0
88
+ Fetching: sisimai-4.25.1.gem (100%)
89
+ Successfully installed sisimai-4.25.1
90
+ Parsing documentation for sisimai-4.25.1
91
+ Installing ri documentation for sisimai-4.25.1
92
92
  Done installing documentation for sisimai after 6 seconds
93
93
  1 gem installed
94
94
  ```
@@ -104,8 +104,8 @@ gem install bundle rake rspec coveralls
104
104
  ...
105
105
  4 gems installed
106
106
  bundle exec rake install
107
- sisimai 4.25.0 built to pkg/sisimai-4.25.0.gem.
108
- sisimai (4.25.0) installed.
107
+ sisimai 4.25.1 built to pkg/sisimai-4.25.1.gem.
108
+ sisimai (4.25.1) installed.
109
109
  ```
110
110
 
111
111
  Usage
@@ -249,9 +249,9 @@ and bounceHammer are available at
249
249
  | How to install | gem install | cpanm, cpm |
250
250
  | Dependencies (Except core modules) | 1 module | 2 modules |
251
251
  | LOC:Source lines of code | 11700 lines | 8200 lines |
252
- | The number of tests(spec/,t/,xt/) directory | 224000 tests | 242000 tests |
252
+ | The number of tests(spec/,t/,xt/) directory | 225000 tests | 242000 tests |
253
253
  | License | BSD 2-Clause | BSD 2-Clause |
254
- | Support Contract provided by Developer | Coming soon | Available |
254
+ | Support Contract provided by Developer | Available | Available |
255
255
 
256
256
  1. See [./ANALYTICAL-PRECISION](https://github.com/sisimai/rb-Sisimai/blob/master/ANALYTICAL-PRECISION)
257
257
  2. Xeon E5-2640 2.5GHz x 2 cores | 5000 bogomips | 1GB RAM | Ruby 2.3.4p301
@@ -139,10 +139,13 @@ module Sisimai::Bite::Email
139
139
  # part or nil if it failed to parse or
140
140
  # the arguments are missing
141
141
  def scan(mhead, mbody)
142
- # :'message-id' => %r/\A[<]\w+[-]\w+[-]\w+[@].+\z/,
143
- return nil if mhead['from'] =~ /[@].+[.]mail[.]ru[>]?/
144
- return nil unless mhead['from'].start_with?('Mail Delivery System')
145
- return nil unless mhead['subject'] =~ %r{(?:
142
+ return nil if mhead['from'] =~ /[@].+[.]mail[.]ru[>]?/
143
+
144
+ # Message-Id: <E1P1YNN-0003AD-Ga@example.org>
145
+ match = 0
146
+ match += 1 if mhead['from'].start_with?('Mail Delivery System')
147
+ match += 1 if mhead['message-id'].to_s =~ %r/\A[<]\w{7}[-]\w{6}[-]\w{2}[@]/
148
+ match += 1 if mhead['subject'] =~ %r{(?:
146
149
  Mail[ ]delivery[ ]failed(:[ ]returning[ ]message[ ]to[ ]sender)?
147
150
  |Warning:[ ]message[ ].+[ ]delayed[ ]+
148
151
  |Delivery[ ]Status[ ]Notification
@@ -151,6 +154,7 @@ module Sisimai::Bite::Email
151
154
  |error[(]s[)][ ]in[ ]forwarding[ ]or[ ]filtering
152
155
  )
153
156
  }x
157
+ return nil if match < 2
154
158
 
155
159
  require 'sisimai/rfc1894'
156
160
  fieldtable = Sisimai::RFC1894.FIELDTABLE
@@ -56,7 +56,7 @@ module Sisimai::Bite::Email
56
56
  readcursor = 0 # (Integer) Points the current cursor position
57
57
  recipients = 0 # (Integer) The number of 'Final-Recipient' header
58
58
  commandtxt = '' # (String) SMTP Command name begin with the string '>>>'
59
- esmtpreply = '' # (String) Reply from remote server on SMTP session
59
+ esmtpreply = [] # (Array) Reply from remote server on SMTP session
60
60
  sessionerr = false # (Boolean) Flag, "true" if it is SMTP session error
61
61
  anotherset = {} # Another error information
62
62
  v = nil
@@ -147,7 +147,7 @@ module Sisimai::Bite::Email
147
147
 
148
148
  elsif cv = e.match(/\A[<]{3}[ ]+(.+)\z/)
149
149
  # <<< Response
150
- esmtpreply = cv[1]
150
+ esmtpreply << cv[1] unless esmtpreply.index(cv[1])
151
151
  else
152
152
  # Detect SMTP session error or connection error
153
153
  next if sessionerr
@@ -213,6 +213,11 @@ module Sisimai::Bite::Email
213
213
  e['diagnosis'] = anotherset['diagnosis'] unless e['diagnosis']
214
214
  e['diagnosis'] = anotherset['diagnosis'] if e['diagnosis'] =~ /\A\d+\z/
215
215
  end
216
+ unless esmtpreply.empty?
217
+ # Replace the error message in "diagnosis" with the ESMTP Reply
218
+ r = esmtpreply.join(' ')
219
+ e['diagnosis'] = r if r.size > e['diagnosis'].to_s.size
220
+ end
216
221
  e['diagnosis'] = Sisimai::String.sweep(e['diagnosis'])
217
222
 
218
223
  if anotherset['status']
@@ -288,10 +288,10 @@ module Sisimai
288
288
  # 550-5.7.1 likely unsolicited mail. To reduce the amount of spam sent to Gmail,
289
289
  # 550-5.7.1 this message has been blocked. Please visit
290
290
  # 550 5.7.1 https://support.google.com/mail/answer/188131 for more information.
291
- p['diagnosticcode'].gsub!(re, ' ')
292
- p['diagnosticdoee'] = Sisimai::String.sweep(p['diagnosticcode'])
291
+ p['diagnosticcode'] = Sisimai::String.sweep(p['diagnosticcode'].gsub(re, ' '))
293
292
  end
294
293
  end
294
+
295
295
  p['diagnostictype'] ||= 'X-UNIX' if p['reason'] == 'mailererror'
296
296
  p['diagnostictype'] ||= 'SMTP' unless %w[feedback vacation].include?(p['reason'])
297
297
 
@@ -263,7 +263,7 @@ module Sisimai
263
263
 
264
264
  # 1. Scrub to avoid "invalid byte sequence in UTF-8" exception (#82)
265
265
  # 2. Convert from string to hash reference
266
- heads = heads.scrub('?').gsub(/^[>]+[ ]/m, '')
266
+ heads = heads.scrub('?').gsub(/^[>]+[ ]/m, '').gsub(/=[ ]+=/, "=\n =")
267
267
 
268
268
  previousfn = '' # Previous field name
269
269
  asciiarmor = {} # Header names which has MIME encoded value
@@ -358,21 +358,6 @@ module Sisimai
358
358
  mailheader['subject'] ||= ''
359
359
  mailheader['content-type'] ||= ''
360
360
 
361
- if hookmethod.is_a? Proc
362
- # Call the hook method
363
- begin
364
- p = {
365
- 'datasrc' => 'email',
366
- 'headers' => mailheader,
367
- 'message' => bodystring,
368
- 'bounces' => nil
369
- }
370
- havecaught = hookmethod.call(p)
371
- rescue StandardError => ce
372
- warn ' ***warning: Something is wrong in hook method :' << ce.to_s
373
- end
374
- end
375
-
376
361
  # Decode BASE64 Encoded message body, rewrite.
377
362
  mesgformat = (mailheader['content-type'] || '').downcase
378
363
  ctencoding = (mailheader['content-transfer-encoding'] || '').downcase
@@ -413,6 +398,23 @@ module Sisimai
413
398
  mailheader['subject'] = Sisimai::MIME.mimedecode(mailheader['subject'].split(/[ ]/))
414
399
  mailheader['subject'].scrub!('?')
415
400
  end
401
+ bodystring = bodystring.scrub('?').delete("\r")
402
+
403
+ if hookmethod.is_a? Proc
404
+ # Call the hook method
405
+ begin
406
+ p = {
407
+ 'datasrc' => 'email',
408
+ 'headers' => mailheader,
409
+ 'message' => bodystring,
410
+ 'bounces' => nil
411
+ }
412
+ havecaught = hookmethod.call(p)
413
+ rescue StandardError => ce
414
+ warn ' ***warning: Something is wrong in hook method :' << ce.to_s
415
+ end
416
+ end
417
+
416
418
  bodystring << EndOfEmail
417
419
  haveloaded = {}
418
420
  scannedset = nil
@@ -8,15 +8,16 @@ module Sisimai
8
8
  # security policies, or multiple addresses exist in the From: header, Sisimai
9
9
  # will set "policyviolation".
10
10
  #
11
- # Action: failed
12
- # Status: 5.7.9
13
- # Remote-MTA: DNS; mx.example.co.jp
14
- # Diagnostic-Code: SMTP; 554 5.7.9 Header error
11
+ # Status: 5.7.0
12
+ # Remote-MTA: DNS; gmail-smtp-in.l.google.com
13
+ # Diagnostic-Code: SMTP; 552-5.7.0 Our system detected an illegal attachment on your message. Please
14
+ # Last-Attempt-Date: Tue, 28 Apr 2009 11:02:45 +0900 (JST)
15
15
  #
16
16
  module PolicyViolation
17
17
  # Imported from p5-Sisimail/lib/Sisimai/Reason/PolicyViolation.pm
18
18
  class << self
19
19
  Index = [
20
+ 'an illegal attachment on your message',
20
21
  'because the recipient is not accepting mail with ', # AOL Phoenix
21
22
  'closed mailing list',
22
23
  'denied by policy',
@@ -32,6 +33,7 @@ module Sisimai
32
33
  'rejected for policy reasons',
33
34
  'protocol violation',
34
35
  'the email address used to send your message is not subscribed to this group',
36
+ 'this message was blocked because its content presents a potential',
35
37
  'you have exceeded the allowable number of posts without solving a captcha',
36
38
  'you have exceeded the the allowable number of posts without solving a captcha',
37
39
  ]
@@ -44,6 +44,7 @@ module Sisimai
44
44
  'message rejected: email address is not verified',
45
45
  'mx records for ',
46
46
  'null sender is not allowed',
47
+ 'recipient addresses rejected : access denied',
47
48
  'recipient not accepted. (batv: no tag',
48
49
  'returned mail not accepted here',
49
50
  'rfc 1035 violation: recursive cname records for',
@@ -11,7 +11,7 @@ module Sisimai
11
11
  # of email bounce if the value of Status: field in a bounce email is "5.7.*".
12
12
  #
13
13
  # Action: failed
14
- # Status: 5.7.0
14
+ # Status: 5.7.1
15
15
  # Remote-MTA: DNS; gmail-smtp-in.l.google.com
16
16
  # Diagnostic-Code: SMTP; 552-5.7.0 Our system detected an illegal attachment on your message. Please
17
17
  # Last-Attempt-Date: Tue, 28 Apr 2009 11:02:45 +0900 (JST)
@@ -20,6 +20,7 @@ module Sisimai
20
20
  'recipient rejected: temporarily inactive',
21
21
  'recipient suspend the service',
22
22
  'this account has been disabled or discontinued',
23
+ 'this mailbox is disabled',
23
24
  'user suspended', # http://mail.163.com/help/help_spam_16.htm
24
25
  'vdelivermail: account is locked email bounced',
25
26
  ]
@@ -8,12 +8,14 @@ module Sisimai
8
8
  # Imported from p5-Sisimail/lib/Sisimai/Rhost.pm
9
9
  RhostClass = {
10
10
  'aspmx.l.google.com' => 'GoogleApps',
11
+ 'gmail-smtp-in.l.google.com' => 'GoogleApps',
11
12
  '.prod.outlook.com' => 'ExchangeOnline',
12
13
  '.protection.outlook.com' => 'ExchangeOnline',
13
14
  'smtp.secureserver.net' => 'GoDaddy',
14
15
  'mailstore1.secureserver.net' => 'GoDaddy',
15
16
  'laposte.net' => 'FrancePTT',
16
17
  'orange.fr' => 'FrancePTT',
18
+ 'wanadoo.fr' => 'FrancePTT',
17
19
  'lsean.ezweb.ne.jp' => 'KDDI',
18
20
  'msmx.au.com' => 'KDDI',
19
21
  '.qq.com' => 'TencentQQ',
@@ -25,7 +25,7 @@ module Sisimai
25
25
  '5.3.3' => [{ reason: 'systemfull', string: 'Unrecognized command' }],
26
26
  '5.3.4' => [{ reason: 'mesgtoobig', string: 'Message too big for system' }],
27
27
  '5.3.5' => [{ reason: 'systemerror', string: 'System incorrectly configured' }],
28
- '5.4.1' => [{ reason: 'userunknown', string: 'Recipient address rejected: Access denied' }],
28
+ '5.4.1' => [{ reason: 'rejected', string: 'Recipient address rejected: Access denied' }],
29
29
  '5.4.14' => [{ reason: 'networkerror',string: 'Hop count exceeded' }],
30
30
  '5.5.2' => [{ reason: 'syntaxerror', string: 'Send hello first' }],
31
31
  '5.5.3' => [{ reason: 'syntaxerror', string: 'Too many recipients' }],
@@ -28,9 +28,7 @@ module Sisimai
28
28
  'X.5.0' => [{ reason: 'syntaxerror', string: ['SMTP protocol violation'] }],
29
29
  'X.5.1' => [
30
30
  { reason: 'securityerror', string: ['Authentication Required.'] },
31
- {
32
- reason: 'syntaxerror',
33
- string: [
31
+ { reason: 'syntaxerror', string: [
34
32
  'STARTTLS may not be repeated',
35
33
  'Too many unrecognized commands, goodbye.',
36
34
  'Unimplemented command.',
@@ -38,16 +36,15 @@ module Sisimai
38
36
  'EHLO/HELO first.',
39
37
  'MAIL first.',
40
38
  'RCPT first.',
41
- ],
42
- },
39
+ ]},
43
40
  ],
44
41
  'X.5.2' => [
45
42
  { reason: 'securityerror', string: ['Cannot Decode response.'] }, # 2FA related error, maybe.
46
43
  { reason: 'syntaxerror', string: ['Syntax error.'] },
47
44
  ],
48
45
  'X.5.3' => [
49
- { reason: 'mailboxfull', string: ['Domain policy size per transaction exceeded,'] },
50
- { reason: 'policyviolation',string: ['Your message has too many recipients.'] },
46
+ { reason: 'mailboxfull', string: ['Domain policy size per transaction exceeded,'] },
47
+ { reason: 'policyviolation', string: ['Your message has too many recipients.'] },
51
48
  ],
52
49
  'X.5.4' => [{ reason: 'syntaxerror', string: ['Optional Argument not permitted for that AUTH mode.'] }],
53
50
  'X.6.0' => [
@@ -55,53 +52,47 @@ module Sisimai
55
52
  { reason: 'networkerror', string: ['Message exceeded 50 hops'] }
56
53
  ],
57
54
  'X.7.0' => [
58
- {
59
- reason: 'blocked',
60
- string: [
55
+ { reason: 'blocked', string: [
61
56
  'IP not in whitelist for RCPT domain, closing connection.',
62
- 'Our system has detected an unusual rate of unsolicited mail originating from your IP address.',
63
- ],
64
- },
65
- {
66
- reason: 'expired',
67
- string: [
57
+ 'unusual rate of unsolicited mail originating from your IP address.',
58
+ ]},
59
+ { reason: 'expired', string: [
68
60
  'Temporary System Problem. Try again later.',
69
61
  'Try again later, closing connection.',
70
- ],
71
- },
72
- {
73
- reason: 'securityerror',
74
- string: [
62
+ ]},
63
+ { reason: 'securityerror', string: [
75
64
  'TLS required for RCPT domain, closing connection.',
76
65
  'No identity changes permitted.',
77
66
  'Must issue a STARTTLS command first.',
78
67
  'Too Many Unauthenticated commands.',
79
- ],
80
- },
68
+ ]},
69
+ { reason: 'policyviolation', string: [
70
+ 'an illegal attachment on your message',
71
+ 'This message was blocked because its content presents a potential',
72
+ ]},
81
73
  { reason: 'systemerror', string: ['Cannot authenticate due to temporary system problem.'] },
82
74
  { reason: 'norelaying', string: ['Mail relay denied.'] },
83
75
  { reason: 'rejected', string: ['Mail Sending denied.'] },
84
76
  ],
85
77
  'X.7.1' => [
86
- { reason: 'mailboxfull', string: ['Email quota exceeded.'] },
87
- {
88
- reason: 'securityerror',
89
- string: [
78
+ { reason: 'mailboxfull', string: ['Email quota exceeded.'] },
79
+ { reason: 'securityerror', string: [
90
80
  'Application-specific password required.',
91
81
  'Please log in with your web browser and then try again.',
92
82
  'Username and Password not accepted.',
93
- ],
94
- },
95
- {
96
- reason: 'blocked',
97
- string: [
98
- 'Our system has detected an unusual rate of unsolicited mail originating from your IP address.',
83
+ ]},
84
+ { reason: 'blocked', string: [
85
+ 'The IP address sending this message does not have a PTR record setup.',
99
86
  "The IP you're using to send mail is not authorized to send email directly to our servers.",
100
- ],
101
- },
102
- { reason: 'spamdetected', string: ['Our system has detected that this message is likely unsolicited mail.'] },
103
- { reason: 'policyviolation',string: ['The user or domain that you are sending to (or from) has a policy'] },
104
- { reason: 'rejected', string: ['Unauthenticated email is not accepted from this domain.'] },
87
+ 'this message is likely suspicious due to the very low reputation of the sending IP address',
88
+ 'unusual rate of unsolicited mail originating from your IP address.',
89
+ ]},
90
+ { reason: 'spamdetected', string: ['this message is likely unsolicited mail.'] },
91
+ { reason: 'policyviolation',string: [
92
+ 'Messages with multiple addresses in From: header are not accepted.',
93
+ 'The user or domain that you are sending to (or from) has a policy',
94
+ ]},
95
+ { reason: 'rejected', string: ['Unauthenticated email is not accepted from this domain.'] },
105
96
  ],
106
97
  'X.7.4' => [{ reason: 'syntaxerror', string: ['Unrecognized Authentication Type.'] }],
107
98
  }.freeze
@@ -53,8 +53,7 @@ module Sisimai
53
53
  def sweep(argv1)
54
54
  return argv1 unless argv1.is_a?(::String)
55
55
  argv1 = argv1.chomp.squeeze(' ').delete("\t").strip
56
- argv1.sub!(/ [-]{2,}[^ \t].+\z/, '')
57
-
56
+ argv1 = argv1.sub(/ [-]{2,}[^ \t].+\z/, '')
58
57
  return argv1
59
58
  end
60
59
 
@@ -1,4 +1,4 @@
1
1
  # Define the version number of Sisimai
2
2
  module Sisimai
3
- VERSION = '4.25.0'.freeze
3
+ VERSION = '4.25.1'.freeze
4
4
  end