truemail 1.8.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce37fd460cb5da28f5880be61ac6abb5ca5e8d0fe1010738e45a02a70417fa31
4
- data.tar.gz: 3f66bb5169a012e7bd77af80c40c51c021332cb86be4f2ef6f1450611001cebf
3
+ metadata.gz: df5c336052c203a93e507bc6ab7780dce97ee2fce675802970c3833ebb9dc67d
4
+ data.tar.gz: fe656f4cfdbf3b5ac2553b564949d571b9acfb3b4966b4b1e92e54e4dc944424
5
5
  SHA512:
6
- metadata.gz: 4902f4e7d2c68cc8714c536ae1844904b99c7609a2b36d057902e6a838d2e2e33bb301f99b7cb067e108bb4bae845ec2e9dfbb9be529db8d53c9bf50a31dfdf9
7
- data.tar.gz: f049315d919448d56d8082da28df31d1bc7ad6e191fc5b30629b38011ff4450f870fb7597a6bc4645007fe7bcbc4a7fa3b0855ee408f4115466e9a3496c926c8
6
+ metadata.gz: 00f45a13fb66496f3cac30f4be31c9894aa1f825e7038605cafadbbb790323774a448cf962dad39331c59f883edc2660028e44ea5b0a69ecfcde2ca961d5eb14
7
+ data.tar.gz: 20a6a83a217a2f727060db14ba98eb68ba232394f95a2cc2c1eb8f51ca1a67ee9600035959f4c2aaf30ac71edecea0dd16f815652d35526a3e125ca1e940bbe9
@@ -3,7 +3,7 @@ defaults: &defaults
3
3
  docker:
4
4
  - image: circleci/ruby:2.5.0-node
5
5
  environment:
6
- CC_TEST_REPORTER_ID: a98d23d6d916932ae11dbe5df36dee070173cbe376b68758901dcc289e098979
6
+ CC_TEST_REPORTER_ID: 693272a1328521f6f7c09d7ffd419b21c00410da26e98e94c687fdd38b26e2cb
7
7
 
8
8
  references:
9
9
  restore_bundle_cache: &restore_bundle_cache
@@ -7,7 +7,7 @@ checks:
7
7
  plugins:
8
8
  rubocop:
9
9
  enabled: true
10
- channel: rubocop-0-78
10
+ channel: rubocop-0-93
11
11
 
12
12
  reek:
13
13
  enabled: true
@@ -3,9 +3,9 @@
3
3
  ### New Issue Checklist
4
4
 
5
5
  - [ ] I have updated truemail to the latest version
6
- - [ ] I have read the [Contribution Guidelines](https://github.com/rubygarage/truemail/blob/master/CONTRIBUTING.md)
7
- - [ ] I have read the [documentation](https://github.com/rubygarage/truemail/blob/master/README.md)
8
- - [ ] I have searched for [existing GitHub issues](https://github.com/rubygarage/truemail/issues)
6
+ - [ ] I have read the [Contribution Guidelines](https://github.com/truemail-rb/truemail/blob/master/CONTRIBUTING.md)
7
+ - [ ] I have read the [documentation](https://truemail-rb.org/truemail-gem)
8
+ - [ ] I have searched for [existing GitHub issues](https://github.com/truemail-rb/truemail/issues)
9
9
 
10
10
  ### Issue Description
11
11
  <!-- Please include what's happening, expected behavior, and any relevant code samples -->
@@ -40,7 +40,7 @@
40
40
  - [ ] My code follows the code style of this project
41
41
  - [ ] My change requires a change to the documentation
42
42
  - [ ] I have updated the documentation accordingly
43
- - [ ] I have read the [**CONTRIBUTING** document](https://github.com/rubygarage/truemail/blob/master/CONTRIBUTING.md)
43
+ - [ ] I have read the [**CONTRIBUTING** document](https://github.com/truemail-rb/truemail/blob/master/CONTRIBUTING.md)
44
44
  - [ ] I have added tests to cover my changes
45
45
  - [ ] I have run `bundle exec rspec` from the root directory to see all new and existing tests pass
46
46
  - [ ] I have run `rubocop` and `reek` to ensure the code style is valid
data/.reek.yml CHANGED
@@ -39,6 +39,8 @@ detectors:
39
39
  - Truemail::Validate::Mx#a_record
40
40
  - Truemail::Audit::Base#verifier_domain
41
41
  - Truemail::Configuration#domain_matcher
42
+ - Truemail::Configuration#logger_options
43
+ - Truemail::Log::Serializer::Base#errors
42
44
 
43
45
  ControlParameter:
44
46
  exclude:
@@ -55,6 +57,8 @@ detectors:
55
57
  - Truemail::ConfigurationHelper#create_configuration
56
58
  - Truemail::Log::Serializer::Base#smtp_debug
57
59
  - Truemail::Log::Serializer::Text#data_composer
60
+ - Truemail::Log::Serializer::ValidatorBase#smtp_debug
61
+ - Truemail::Log::Serializer::ValidatorText#data_composer
58
62
 
59
63
  NilCheck:
60
64
  exclude:
@@ -40,6 +40,84 @@ Style/EmptyCaseCondition:
40
40
  Style/RescueStandardError:
41
41
  Enabled: false
42
42
 
43
+ Style/AccessorGrouping:
44
+ Enabled: true
45
+
46
+ Style/ArrayCoercion:
47
+ Enabled: true
48
+
49
+ Style/BisectedAttrAccessor:
50
+ Enabled: true
51
+
52
+ Style/CaseLikeIf:
53
+ Enabled: true
54
+
55
+ Style/ExplicitBlockArgument:
56
+ Enabled: true
57
+
58
+ Style/ExponentialNotation:
59
+ Enabled: true
60
+
61
+ Style/GlobalStdStream:
62
+ Enabled: true
63
+
64
+ Style/HashAsLastArrayItem:
65
+ Enabled: true
66
+
67
+ Style/HashEachMethods:
68
+ Enabled: true
69
+
70
+ Style/HashLikeCase:
71
+ Enabled: true
72
+
73
+ Style/HashTransformKeys:
74
+ Enabled: true
75
+
76
+ Style/HashTransformValues:
77
+ Enabled: true
78
+
79
+ Style/OptionalBooleanParameter:
80
+ Enabled: true
81
+
82
+ Style/RedundantAssignment:
83
+ Enabled: true
84
+
85
+ Style/RedundantFetchBlock:
86
+ Enabled: true
87
+
88
+ Style/RedundantFileExtensionInRequire:
89
+ Enabled: true
90
+
91
+ Style/RedundantRegexpCharacterClass:
92
+ Enabled: true
93
+
94
+ Style/RedundantRegexpEscape:
95
+ Enabled: true
96
+
97
+ Style/SingleArgumentDig:
98
+ Enabled: true
99
+
100
+ Style/SlicingWithRange:
101
+ Enabled: true
102
+
103
+ Style/StringConcatenation:
104
+ Enabled: true
105
+
106
+ Style/CombinableLoops:
107
+ Enabled: true
108
+
109
+ Style/KeywordParametersOrder:
110
+ Enabled: true
111
+
112
+ Style/RedundantSelfAssignment:
113
+ Enabled: true
114
+
115
+ Style/SoleNestedConditional:
116
+ Enabled: true
117
+
118
+ Style/ClassEqualityComparison:
119
+ Enabled: true
120
+
43
121
  Layout/LineLength:
44
122
  Max: 140
45
123
 
@@ -50,15 +128,9 @@ Layout/ClassStructure:
50
128
  - include
51
129
  - prepend
52
130
  - extend
53
- associations:
54
- - has_one
55
- - has_many
56
- - belongs_to
57
- - has_and_belongs_to_many
58
131
  ExpectedOrder:
59
132
  - module_inclusion
60
133
  - constants
61
- - associations
62
134
  - public_class_methods
63
135
  - initializer
64
136
  - public_methods
@@ -68,9 +140,114 @@ Layout/ClassStructure:
68
140
  Layout/EmptyLineAfterGuardClause:
69
141
  Enabled: false
70
142
 
143
+ Layout/SpaceAroundMethodCallOperator:
144
+ Enabled: true
145
+
146
+ Layout/EmptyLinesAroundAttributeAccessor:
147
+ Enabled: true
148
+
149
+ Layout/BeginEndAlignment:
150
+ Enabled: true
151
+
71
152
  Lint/NonDeterministicRequireOrder:
72
153
  Enabled: false
73
154
 
155
+ Lint/BinaryOperatorWithIdenticalOperands:
156
+ Enabled: true
157
+
158
+ Lint/DeprecatedOpenSSLConstant:
159
+ Enabled: true
160
+
161
+ Lint/DuplicateElsifCondition:
162
+ Enabled: true
163
+
164
+ Lint/DuplicateRescueException:
165
+ Enabled: true
166
+
167
+ Lint/EmptyConditionalBody:
168
+ Enabled: true
169
+
170
+ Lint/FloatComparison:
171
+ Enabled: true
172
+
173
+ Lint/MissingSuper:
174
+ Enabled: false
175
+
176
+ Lint/MixedRegexpCaptureTypes:
177
+ Enabled: true
178
+
179
+ Lint/OutOfRangeRegexpRef:
180
+ Enabled: true
181
+
182
+ Lint/RaiseException:
183
+ Enabled: true
184
+
185
+ Lint/SelfAssignment:
186
+ Enabled: true
187
+
188
+ Lint/StructNewOverride:
189
+ Enabled: true
190
+
191
+ Lint/TopLevelReturnWithArgument:
192
+ Enabled: true
193
+
194
+ Lint/UnreachableLoop:
195
+ Enabled: true
196
+
197
+ Lint/ConstantDefinitionInBlock:
198
+ Enabled: true
199
+
200
+ Lint/DuplicateRequire:
201
+ Enabled: true
202
+
203
+ Lint/EmptyFile:
204
+ Enabled: true
205
+
206
+ Lint/IdentityComparison:
207
+ Enabled: true
208
+
209
+ Lint/TrailingCommaInAttributeDeclaration:
210
+ Enabled: true
211
+
212
+ Lint/UselessMethodDefinition:
213
+ Enabled: true
214
+
215
+ Lint/UselessTimes:
216
+ Enabled: true
217
+
218
+ Lint/HashCompareByIdentity:
219
+ Enabled: true
220
+
221
+ Lint/RedundantSafeNavigation:
222
+ Enabled: true
223
+
224
+ Performance/AncestorsInclude:
225
+ Enabled: true
226
+
227
+ Performance/BigDecimalWithNumericArgument:
228
+ Enabled: true
229
+
230
+ Performance/RedundantSortBlock:
231
+ Enabled: true
232
+
233
+ Performance/RedundantStringChars:
234
+ Enabled: true
235
+
236
+ Performance/ReverseFirst:
237
+ Enabled: true
238
+
239
+ Performance/SortReverse:
240
+ Enabled: true
241
+
242
+ Performance/Squeeze:
243
+ Enabled: true
244
+
245
+ Performance/StringInclude:
246
+ Enabled: true
247
+
248
+ Performance/Sum:
249
+ Enabled: true
250
+
74
251
  RSpec/ExampleLength:
75
252
  Enabled: false
76
253
 
@@ -94,3 +271,6 @@ RSpec/MessageSpies:
94
271
 
95
272
  RSpec/MultipleDescribes:
96
273
  Enabled: false
274
+
275
+ RSpec/MultipleMemoizedHelpers:
276
+ Enabled: false
@@ -2,9 +2,98 @@
2
2
 
3
3
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## [2.0.1] - 2020.10.20
6
+
7
+ ### Changed
8
+
9
+ - gem development dependencies
10
+ - gem documentation
11
+
12
+ ## [2.0.0] - 2020.10.19
13
+
14
+ ### Fixed
15
+
16
+ SMTP connection errors: invalid `HELO` hostname (`localhost`), duplicate `HELO` (`verifier domain`).
17
+
18
+ ### Changed
19
+
20
+ - Updated `Truemail::Validate::Smtp::Request#run`
21
+ - Updated `Truemail::Validate::Smtp::Request#session_data`
22
+ - Updated `Truemail::Validate::Smtp::Response`
23
+
24
+ Now `helo` is a `Boolean` instead of `Net::SMTP::Response` instance. It was changed because `helo` is sending during SMTP-session initializing (`Net::SMTP.new.start`), and `helo` is always `true` if session up is okay. Also `hello` response won't logged as error if it happens. Example of `Truemail::Validate::Smtp::Response` instance from 2.x version.
25
+
26
+ ```ruby
27
+ #<struct Truemail::Validate::Smtp::Response:0x00007fa74704cd10
28
+ port_opened=true,
29
+ connection=true,
30
+ helo=true, # Returns Boolean instead of Net::SMTP::Response instance
31
+ mailfrom=false,
32
+ rcptto=nil,
33
+ errors={:mailfrom=>"server response timeout"}>
34
+ ```
35
+
36
+ ## [1.9.2] - 2020.10.02
37
+
38
+ ### Added
39
+
40
+ - `Truemail::TypeError`
41
+ - error handling for invalid types as input email
42
+
43
+ ### Changed
44
+
45
+ - Updated `Truemail.validate`
46
+ - Updated `Truemail.valid?`
47
+
48
+ ## [1.9.1] - 2020.09.21
49
+
50
+ ### Changed
51
+
52
+ Migrated to updated Ruby 2.7.x syntax.
53
+
54
+ - Updated `Truemail::Configuration#logger=`
55
+
56
+ ## [1.9.0] - 2020.09.01
57
+
58
+ ### Added
59
+
60
+ - Ability to use `Truemail::Auditor` instance represented as json directly
61
+ - `Truemail::Log::Serializer::AuditorJson`
62
+
63
+ ### Changed
64
+
65
+ - `Truemail::Auditor`, `Truemail::Validator`
66
+ - serializers namespaces
67
+ - gem development dependencies
68
+ - gem documentation
69
+
70
+ ```ruby
71
+ Truemail.host_audit.as_json
72
+
73
+ =>
74
+ # Serialized Truemail::Auditor instance
75
+ {
76
+ "date": "2020-08-31 22:33:43 +0300",
77
+ "current_host_ip": "127.0.0.1",
78
+ "warnings": {
79
+ "dns": "A-record of verifier domain not refers to current host ip address", "ptr": "PTR-record does not reference to current verifier domain"
80
+ },
81
+ "configuration": {
82
+ "validation_type_by_domain": null,
83
+ "whitelist_validation": false,
84
+ "whitelisted_domains": null,
85
+ "blacklisted_domains": null,
86
+ "not_rfc_mx_lookup_flow": false,
87
+ "smtp_safe_check": false,
88
+ "email_pattern": "default gem value",
89
+ "smtp_error_body_pattern": "default gem value"
90
+ }
91
+ }
92
+ ```
93
+
5
94
  ## [1.8.0] - 2020.06.21
6
95
 
7
- ## Added
96
+ ### Added
8
97
 
9
98
  Separated audit features for verifier host.
10
99
 
@@ -51,7 +140,7 @@ Truemail.host_audit
51
140
 
52
141
  ## [1.7.1] - 2020.05.10
53
142
 
54
- ## Added
143
+ ### Added
55
144
 
56
145
  - Ability to show `not_rfc_mx_lookup_flow` attribute in serialized validation result
57
146
 
@@ -99,7 +188,7 @@ Truemail.validate('nonexistent_email@bestweb.com.ua').as_json
99
188
 
100
189
  ## [1.7.0] - 2020.05.09
101
190
 
102
- ## Added
191
+ ### Added
103
192
 
104
193
  - Ability to use not RFC MX lookup flow (MX and Null MX records will be checked on the DNS validation layer only)
105
194
 
@@ -139,7 +228,7 @@ end
139
228
 
140
229
  ### Added
141
230
 
142
- - Possibility to use `Truemail::Validator` instance represented as json directly
231
+ - Ability to use `Truemail::Validator` instance represented as json directly
143
232
 
144
233
  ### Changed
145
234
 
@@ -297,6 +386,7 @@ Truemail.validate('email@white-domain.com', with: :regex)
297
386
  smtp_debug=nil>,
298
387
  @validation_type=:regex>
299
388
  ```
389
+
300
390
  **Email hasn't whitelisted domain**
301
391
 
302
392
  ```ruby
@@ -322,9 +412,9 @@ Truemail.validate('email@domain.com', with: :regex)
322
412
 
323
413
  ### Added
324
414
 
325
- - Configurable default validation type, [issue details](https://github.com/rubygarage/truemail/issues/48)
415
+ - Configurable default validation type, [issue details](https://github.com/truemail-rb/truemail/issues/48)
326
416
 
327
- You can predefine default validation type for ```Truemail.validate('email@email.com')``` call without with-parameter. Available validation types: ```:regex```, ```:mx```, ```:smtp```. By default validation type still remains ```:smtp```
417
+ You can predefine default validation type for `Truemail.validate('email@email.com')` call without with-parameter. Available validation types: `:regex`, `:mx`, `:smtp`. By default validation type still remains `:smtp`
328
418
 
329
419
  ```ruby
330
420
  Truemail.configure do |config|
@@ -379,7 +469,7 @@ Truemail.validate('email@black-domain.com')
379
469
 
380
470
  ### Added
381
471
 
382
- - Feature domain whitelist blacklist. Other validations will not processed even if it was defined in ```validation_type_for```.
472
+ - Feature domain whitelist blacklist. Other validations will not processed even if it was defined in `validation_type_for`.
383
473
 
384
474
  ```ruby
385
475
  Truemail.configure do |config|
@@ -402,7 +492,7 @@ Truemail.configuration.blacklisted_domains = ['somedomain1.com', 'somedomain2.co
402
492
 
403
493
  ### Removed
404
494
 
405
- - ```:skip``` validation type for ```validation_type_for```
495
+ - `:skip` validation type for `validation_type_for`
406
496
 
407
497
  ### Fixed
408
498
 
@@ -417,7 +507,7 @@ Truemail.configuration.blacklisted_domains = ['somedomain1.com', 'somedomain2.co
417
507
 
418
508
  ### Added
419
509
 
420
- - skip validation by domain for validation_type_for configuration option:
510
+ - skip validation by domain for `validation_type_for` configuration option:
421
511
 
422
512
  ```ruby
423
513
  Truemail.configure do |config|
@@ -440,7 +530,7 @@ Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip }
440
530
 
441
531
  ### Added
442
532
 
443
- - SMTP error body configurable option, [issue details](https://github.com/rubygarage/truemail/issues/19)
533
+ - SMTP error body configurable option, [issue details](https://github.com/truemail-rb/truemail/issues/19)
444
534
 
445
535
  ### Changed
446
536
 
@@ -457,11 +547,11 @@ Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip }
457
547
 
458
548
  ### Added
459
549
 
460
- - Reverse trace, [issue details](https://github.com/rubygarage/truemail/issues/18)
550
+ - Reverse trace, [issue details](https://github.com/truemail-rb/truemail/issues/18)
461
551
 
462
552
  ### Fixed
463
553
 
464
- - Behaviour of current host address resolver, [issue details](https://github.com/rubygarage/truemail/issues/18)
554
+ - Behaviour of current host address resolver, [issue details](https://github.com/truemail-rb/truemail/issues/18)
465
555
 
466
556
  ### Changed
467
557
 
@@ -472,7 +562,7 @@ Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip }
472
562
 
473
563
  ### Added
474
564
 
475
- - PTR record audit, [issue details](https://github.com/rubygarage/truemail/issues/18)
565
+ - PTR record audit, [issue details](https://github.com/truemail-rb/truemail/issues/18)
476
566
 
477
567
  ### Changed
478
568
 
@@ -483,12 +573,12 @@ Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip }
483
573
 
484
574
  ### Added
485
575
 
486
- - MX gem logic with [RFC 7505](https://tools.ietf.org/html/rfc7505), null MX record supporting, [issue details](https://github.com/rubygarage/truemail/issues/27)
576
+ - MX gem logic with [RFC 7505](https://tools.ietf.org/html/rfc7505), null MX record supporting, [issue details](https://github.com/truemail-rb/truemail/issues/27)
487
577
  - [Contributing guideline](CONTRIBUTING.md)
488
578
 
489
579
  ### Fixed
490
580
 
491
- - Multihomed MX records supporting, [issue details](https://github.com/rubygarage/truemail/issues/28)
581
+ - Multihomed MX records supporting, [issue details](https://github.com/truemail-rb/truemail/issues/28)
492
582
 
493
583
  ### Changed
494
584
 
@@ -499,11 +589,11 @@ Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip }
499
589
 
500
590
  ### Added
501
591
 
502
- - Retries for ```Truemail::Validate::Smtp``` for cases when one mx server
592
+ - Retries for `Truemail::Validate::Smtp` for cases when one mx server
503
593
 
504
594
  ### Changed
505
595
 
506
- - ```Truemail::Configuration``` class, please use ```.connection_attempts``` instead ```.retry_count```
596
+ - `Truemail::Configuration` class, please use `.connection_attempts` instead `.retry_count`
507
597
  - `Truemail::VERSION`
508
598
  - gem documentation
509
599
 
@@ -511,12 +601,12 @@ Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip }
511
601
 
512
602
  ### Added
513
603
 
514
- - Checking A record presence if ```MX``` and ```CNAME``` records not exist, [issue details](https://github.com/rubygarage/truemail/issues/10)
515
- - Handling of ```CNAME``` records, [issue details](https://github.com/rubygarage/truemail/issues/11)
516
- - Checking A record if ```MX``` and ```CNAME``` records not found, [issue details](https://github.com/rubygarage/truemail/issues/12)
517
- - Supporting of multihomed MX records, conversion host names to ips, [issue details](https://github.com/rubygarage/truemail/issues/17)
518
- - Timeout configuration for DNS resolver, [issue details](https://github.com/rubygarage/truemail/issues/13)
519
- - ```.valid?``` helper
604
+ - Checking A record presence if `MX` and `CNAME` records not exist, [issue details](https://github.com/truemail-rb/truemail/issues/10)
605
+ - Handling of `CNAME` records, [issue details](https://github.com/truemail-rb/truemail/issues/11)
606
+ - Checking A record if `MX` and `CNAME` records not found, [issue details](https://github.com/truemail-rb/truemail/issues/12)
607
+ - Supporting of multihomed MX records, conversion host names to ips, [issue details](https://github.com/truemail-rb/truemail/issues/17)
608
+ - Timeout configuration for DNS resolver, [issue details](https://github.com/truemail-rb/truemail/issues/13)
609
+ - `.valid?` helper
520
610
 
521
611
  ### Changed
522
612
 
@@ -527,16 +617,16 @@ Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip }
527
617
 
528
618
  ### Added
529
619
 
530
- - Independent domain name extractor to ```Truemail::Validate::Mx#run```
620
+ - Independent domain name extractor to `Truemail::Validate::Mx#run`
531
621
 
532
622
  ### Fixed
533
623
 
534
- - Default ```REGEX_EMAIL_PATTERN```, [issue details](https://github.com/rubygarage/truemail/issues/7)
624
+ - Default `REGEX_EMAIL_PATTERN`, [issue details](https://github.com/truemail-rb/truemail/issues/7)
535
625
  * local part of address can't start with a dot or special symbol
536
626
  * local part of address can include ```+``` symbol
537
- - Default ```REGEX_DOMAIN_PATTERN```, [issue details](https://github.com/rubygarage/truemail/issues/8)
627
+ - Default `REGEX_DOMAIN_PATTERN`, [issue details](https://github.com/truemail-rb/truemail/issues/8)
538
628
  * TLD size increased up to 63 characters
539
- - Case sensitive domain names, [issue details](https://github.com/rubygarage/truemail/issues/9)
629
+ - Case sensitive domain names, [issue details](https://github.com/truemail-rb/truemail/issues/9)
540
630
 
541
631
  ### Changed
542
632
 
@@ -583,10 +673,7 @@ Truemail.validate('email@example.com')
583
673
  #<struct Truemail::Validate::Smtp::Response
584
674
  port_opened=true,
585
675
  connection=false,
586
- helo=
587
- #<Net::SMTP::Response:0x0000000002c934c8
588
- @status="250",
589
- @string="250 mx1.example.com\n">,
676
+ helo=true,
590
677
  mailfrom=false,
591
678
  rcptto=nil,
592
679
  errors={:mailfrom=>"554 5.7.1 Client host blocked\n", :connection=>"server dropped connection after response"}>>,]>,