# Changelog 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). ## [1.5.1] - 2020-01-20 ### Changed - gem development dependencies - gem documentation ## [1.5.0] - 2019-12-29 ### Added - Supporting of internationalized emails ([EAI](https://en.wikipedia.org/wiki/International_email)). Now you can validate emails, like: `dörte@sörensen.de`, `квіточка@пошта.укр`, `alegría@mañana.es` ### Changed - `Truemail::RegexConstant::REGEX_DOMAIN` - `Truemail::RegexConstant::REGEX_EMAIL_PATTERN` - `Truemail::Validator::Result` - `Truemail::Validate::Mx#run` - `Truemail::Validate::Smtp#establish_smtp_connection` - gem runtime dependencies - gem development dependencies - gem documentation - linters configs ## [1.4.2] - 2019-11-27 ### Changed - `Truemail::Configuration` - gem development dependencies - linters configs ## [1.4.1] - 2019-11-20 ### Changed - gem development dependencies - gem documentation - linters configs ### Removed - truemail rspec helpers (moved to independent gem [`truemail-rspec`](https://github.com/truemail-rb/truemail-rspec)) ## [1.4.0] - 2019-10-28 ### Added - Event logger (ability to output validation logs to stdout/file) - JSON serializer for validator instance - [Changelog](CHANGELOG.md) - [Logo](https://repository-images.githubusercontent.com/173723932/6dffee00-e88e-11e9-94b6-c97aacc0df00) Truemail gem allows to output tracking events to stdout/file or both of these. Please note, at least one of the outputs must exist. Tracking event by default is `:error` **Available tracking events** - `:all`, all detected events including success validation cases - `:unrecognized_error`, unrecognized errors only (when `smtp_safe_check = true` and SMTP server does not return an exact answer that the email does not exist) - `:recognized_error`, recognized errors only - `:error`, recognized and unrecognized errors only ```ruby Truemail.configure do |config| config.logger = { tracking_event: :all, stdout: true, log_absolute_path: '/home/app/log/truemail.log' } end ``` Also starting from this version Truemail has built in JSON serializer for `Truemail::Validator` instance, so you can represent your email validation result as json. ```ruby Truemail::Log::Serializer::Json.call(Truemail.validate('nonexistent_email@bestweb.com.ua')) ``` ### Changed - `Truemail::Configuration` - `Truemail::Validator` - `Truemail::Validate::Regex` - `Truemail::VERSION` - gem documentation - gem description ## [1.3.0] - 2019-09-16 ### Added - Ability to create new `Truemail::Configuration` instance with block - `Truemail::Validate::Smtp::Request::Configuration` ### Changed - `Truemail::Wrapper` - `Truemail::Validate::Base` - `Truemail::Validator` - `Truemail::Validator::Result` - `Truemail::Validate::Regex` - `Truemail::Validate::Mx` - `Truemail::Validate::Smtp` - `Truemail::Validate::Smtp::Request` - `Truemail::Audit::Base` - `Truemail::Auditor` - `Truemail::Audit::Ptr` - `::Truemail` module - `Truemail::VERSION` - gem documentation - gem description ## [1.2.1] - 2019-06-27 ### Fixed - Removed memoization from ```DomainListMatch#whitelisted_domain?``` ### Changed - `Truemail::VERSION` - gem documentation ## [1.2.0] - 2019-06-26 ### Added - Configurable option: validation for whitelisted domains only. When email domain in whitelist and ```whitelist_validation``` is sets equal to ```true``` validation type will be passed to other validators. Validation of email which not contains whitelisted domain always will return ```false```. ```ruby Truemail.configure do |config| config.verifier_email = 'verifier@example.com' config.whitelisted_domains = ['white-domain.com'] config.whitelist_validation = true end ``` **Email has whitelisted domain** ```ruby Truemail.validate('email@white-domain.com', with: :regex) #<Truemail::Validator:0x000055b8429f3490 @result=#<struct Truemail::Validator::Result success=true, email="email@white-domain.com", domain=nil, mail_servers=[], errors={}, smtp_debug=nil>, @validation_type=:regex> ``` **Email hasn't whitelisted domain** ```ruby Truemail.validate('email@domain.com', with: :regex) #<Truemail::Validator:0x000055b8429f3490 @result=#<struct Truemail::Validator::Result success=false, email="email@domain.com", domain=nil, mail_servers=[], errors={}, smtp_debug=nil>, @validation_type=:blacklist> ``` ### Changed - `Truemail::VERSION` - gem documentation ## [1.1.0] - 2019-06-18 ### Added - Configurable default validation type, [issue details](https://github.com/rubygarage/truemail/issues/48) 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``` ```ruby Truemail.configure do |config| config.verifier_email = 'verifier@example.com' config.default_validation_type = :mx end ``` ### Changed - `Truemail::VERSION` - gem documentation ## [1.0.1] - 2019-06-08 ### Added - Result validation type marker for domain list match check ```ruby Truemail.validate('email@white-domain.com') #<Truemail::Validator:0x000055b8429f3490 @result=#<struct Truemail::Validator::Result success=true, email="email@white-domain.com", domain=nil, mail_servers=[], errors={}, smtp_debug=nil>, @validation_type=:whitelist> Truemail.validate('email@black-domain.com') #<Truemail::Validator:0x000023y8429f3493 @result=#<struct Truemail::Validator::Result success=false, email="email@black-domain.com", domain=nil, mail_servers=[], errors={}, smtp_debug=nil>, @validation_type=:blacklist> ``` ### Changed - `Truemail::VERSION` - gem documentation ## [1.0] - 2019-06-04 ### Added - Feature domain whitelist blacklist. Other validations will not processed even if it was defined in ```validation_type_for```. ```ruby Truemail.configure do |config| # Optional parameter. Validation of email which contains whitelisted domain # always will return true. config.whitelisted_domains = ['somedomain1.com', 'somedomain2.com'] # Optional parameter. Validation of email which contains whitelisted domain # always will return false. config.blacklisted_domains = ['somedomain1.com', 'somedomain2.com'] end ``` and ```ruby Truemail.configuration.whitelisted_domains = ['somedomain1.com', 'somedomain2.com'] Truemail.configuration.blacklisted_domains = ['somedomain1.com', 'somedomain2.com'] ``` ### Removed - ```:skip``` validation type for ```validation_type_for``` ### Fixed - error key in `lower_snake_case` ### Changed - `Truemail::VERSION` - gem documentation ## [0.2] - 2019-05-23 ### Added - skip validation by domain for validation_type_for configuration option: ```ruby Truemail.configure do |config| config.validation_type_for = { 'somedomain.com' => :skip } end ``` and ```ruby Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip } ``` ### Changed - `Truemail::VERSION` - gem documentation ## [0.1.10] - 2019-05-10 ### Added - SMTP error body configurable option, [issue details](https://github.com/rubygarage/truemail/issues/19) ### Changed - `Truemail::VERSION` - gem documentation ## [0.1.9] - 2019-04-29 ### Fixed - Empty ptr constant ## [0.1.8] - 2019-04-29 ### Added - Reverse trace, [issue details](https://github.com/rubygarage/truemail/issues/18) ### Fixed - Behaviour of current host address resolver, [issue details](https://github.com/rubygarage/truemail/issues/18) ### Changed - `Truemail::VERSION` - gem documentation ## [0.1.7] - 2019-04-17 ### Added - PTR record audit, [issue details](https://github.com/rubygarage/truemail/issues/18) ### Changed - `Truemail::VERSION` - gem documentation ## [0.1.6] - 2019-04-08 ### Added - 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) - [Contributing guideline](CONTRIBUTING.md) ### Fixed - Multihomed MX records supporting, [issue details](https://github.com/rubygarage/truemail/issues/28) ### Changed - `Truemail::VERSION` - gem documentation ## [0.1.5] - 2019-04-05 ### Added - Retries for ```Truemail::Validate::Smtp``` for cases when one mx server ### Changed - ```Truemail::Configuration``` class, please use ```.connection_attempts``` instead ```.retry_count``` - `Truemail::VERSION` - gem documentation ## [0.1.4] - 2019-04-01 ### Added - Checking A record presence if ```MX``` and ```CNAME``` records not exist, [issue details](https://github.com/rubygarage/truemail/issues/10) - Handling of ```CNAME``` records, [issue details](https://github.com/rubygarage/truemail/issues/11) - Checking A record if ```MX``` and ```CNAME``` records not found, [issue details](https://github.com/rubygarage/truemail/issues/12) - Supporting of multihomed MX records, conversion host names to ips, [issue details](https://github.com/rubygarage/truemail/issues/17) - Timeout configuration for DNS resolver, [issue details](https://github.com/rubygarage/truemail/issues/13) - ```.valid?``` helper ### Changed - `Truemail::VERSION` - gem documentation ## [0.1.3] - 2019-03-27 ### Added - Independent domain name extractor to ```Truemail::Validate::Mx#run``` ### Fixed - Default ```REGEX_EMAIL_PATTERN```, [issue details](https://github.com/rubygarage/truemail/issues/7) * local part of address can't start with a dot or special symbol * local part of address can include ```+``` symbol - Default ```REGEX_DOMAIN_PATTERN```, [issue details](https://github.com/rubygarage/truemail/issues/8) * TLD size increased up to 63 characters - Case sensitive domain names, [issue details](https://github.com/rubygarage/truemail/issues/9) ### Changed - `Truemail::VERSION` - gem documentation ## [0.1.0] - 2019-03-26 ### Added - 'SMTP safe check' option for cases when SMTP server does not return an exact answer that the email does not exist. ```ruby Truemail.configure do |config| config.verifier_email = 'verifier@example.com' config.smtp_safe_check = true end Truemail.validate('email@example.com') # Successful SMTP validation => #<Truemail::Validator:0x0000000002ca2c70 @result= #<struct Truemail::Validator::Result success=true, email="email@example.com", domain="example.com", mail_servers=["mx1.example.com"], errors={}, smtp_debug= [#<Truemail::Validate::Smtp::Request:0x0000000002c95d40 @configuration= #<Truemail::Configuration:0x0000000002c95b38 @connection_timeout=2, @email_pattern=/regex_pattern/, @response_timeout=2, @smtp_safe_check=true, @validation_type_by_domain={}, @verifier_domain="example.com", @verifier_email="verifier@example.com">, @email="email@example.com", @host="mx1.example.com", @response= #<struct Truemail::Validate::Smtp::Response port_opened=true, connection=false, helo= #<Net::SMTP::Response:0x0000000002c934c8 @status="250", @string="250 mx1.example.com\n">, mailfrom=false, rcptto=nil, errors={:mailfrom=>"554 5.7.1 Client host blocked\n", :connection=>"server dropped connection after response"}>>,]>, @validation_type=:smtp> ``` ### Changed - `Truemail::VERSION` - gem documentation