Skip to content

Latest commit

 

History

History
792 lines (409 loc) · 49.1 KB

CHANGELOG.md

File metadata and controls

792 lines (409 loc) · 49.1 KB

Changelog

All notable changes to this project will be documented in this file. The changes in this project follow Convention Commits.

(2025-02-23)

0.11.0 (2025-02-19)

  • feat!: Allow multiple proxies (#1562) (eed5a15), closes #1562

Bug Fixes

  • docker: Fix dockerfile entrypoint (d1d3326)
  • Don't show proxy full info in logs (2668ce1)
  • Fix AWS login in Action (6dd6fb0)
  • Fix correct Dockerfile in Action (4d4d91e)
  • Fixed inverted hello-name and from-email in CLI (#1565) (a53561e)
  • Improve logging, add retries for Yahoo headless, switch to rustls (#1549) (b1377db)
  • Make new config backwards-compatible (#1567) (b824e2c)
  • Reinstate proxy in JSON request (#1569) (c36e6e0)

Features

BREAKING CHANGES

    • The hello_name, from_email, smtp_timeout, retries and proxy settings have been moved to inside the new verif_method field, which is now the centralized place to configure how each email is verified (categorized by email provider).

0.10.0 (2024-12-15)

  • feat(core)!: Update async-smtp to 0.9 (#1520) (297ce4f), closes #1520
  • feat!: Add /v1/{check_email,bulk} endpoints with throttle&concurrency (#1537) (08522e4), closes #1537
  • fix(core)!: Clean up CheckEmailInput (#1531) (b97b9ff), closes #1531
  • refactor!: Use config-rs instead of env vars (#1530) (bcd2dc8), closes #1530
  • feat(backend)!: Remove /v0/bulk endpoints (#1421) (522f324), closes #1421
  • fix!(core): Bump timeout to 45s, set retries to 1 (#1406) (22e8e3e), closes #1406
  • refactor!: Use verify method for known providers (#1366) (5ca4dfa), closes #1366

Bug Fixes

  • Add backend_name in /v0/check_email (a738fae)
  • Add HoneyPot rule (fb428ef)
  • backend: CSV download retrieves all results (#1362) (b3670fc)
  • backend: Fix docker CTRL+C (3a7245f)
  • backend: Fix env var for multiple queues (ed19166)
  • backend: Update sqlx to 0.7 (#1390) (7198f87)
  • ci: actions/download-artifact@v4 (ec48fec)
  • ci: Fix Windows build (#1397) (ab2bb41)
  • ci: Use v4 of upload-artifacts (fa7f438)
  • ci: Use v4 of upload-artifacts (b97d181)
  • core: Fix gmail test (ea80690)
  • core: Fix hotmail/outlook checks (5e4bf16)
  • core: Headless check for Microsoft365 too (#1346) (682cc2d)
  • core: More robust Hotmail invalid check (ee741f4)
  • core: Prefer empty MX lookup when Err NoRecordsFound (#1409) (d4b5ef9)
  • core: Use semver in sentry (03e6c97)
  • core: Use Smtp for Gmail by default (8e79884)
  • core: Use tagged enum representation (ffde851)
  • Fix dockerfile (ce5067e)
  • Fix dockerfile (83d70d8)
  • Fix dockerfile build (95aeecb)
  • Fix Dockerfiles (e9fb1e3)
  • Fix duplicate yahoo_verif_method field in default() inputs (#1428) (b7c51d5)
  • Only do headless for non-365 hotmail emails (1c52bdc)
  • Put Smtp debug details in Debug struct (5b71ca5)
  • Remove local_ip retrieval (ff8e599)
  • Revert Cargo files (#1389) (96a2278)
  • rm .rustfmt.toml (#1524) (1691d2d)
  • Support queues in env var (39655d5)
  • Typo in expect of RCH_VERIF_METHOD (#1405) (c50d8eb)

Features

  • Add back RabbitMQ-based worker (#1513) (de75ece)
  • Add debug information about each email verification (#1391) (3ea6e66)
  • Add proxy field in SmtpDebug (2f60a03)
  • Add RabbitMQ worker (#1395) (ecef8c9)
  • Add sentry logging to worker (5aa6026)
  • Allow /v1/check_email without worker mode (9ca9f39)
  • backend: Add one simple retry on Unknown (fcffc1a)
  • backend: Add POST /v1/bulk (#1413) (d9302d4)
  • backend: Add reply-to queue (aaea59f)
  • backend: Add worker webhook (db90cfa)
  • backend: Customize SMTP defaults (8f152b8)
  • backend: Prune bulk email verification database (#1377) (f905735)
  • backend: Reject a request with to_email field empty or missing (#1353) (1d9c29f)
  • backend: Support RCH_SMTP_TIMEOUT (#1407) (b9bda40)
  • core: Add domain-specific rules as JSON file (#1347) (cab143c)
  • core: Bump to 45s timeout for some domains (#1348) (fda33a2)
  • core: Default Gmail checks to use API (4304743)
  • Increase content length limit for bulk validation endpoint (#1525) (bbdab31)
  • Update parser.rs (#1345) (8269f22)
  • Use 2 queues instead of 1 (#1396) (af44f6c)
  • Yahoo account recovery via headless (#1364) (6f0f12b)

Reverts

  • backend: Bring back the sqlxmq-based bulk verification (#1477) (322ad4e), closes #1421

BREAKING CHANGES

  • The smtp_security field has been removed from the /check_email request.
    • In /v0/check_email endpoint, the hotmail_verif_method field has been replaced two fields: hotmailb2b_verif_method and hotmailb2c_verif_method
  • All serializations of "Smtp","Api","Headless" have been converted to lowercase "smtp","api","headless"
  • We switched to a more commonly-used builder pattern to create an input:
- let mut input = CheckEmailInput::new("someone@gmail.com");
- input.set_from_email("me@mycompany.com");

+ let input = CheckEmailInputBuilder::default()
+     .to_email("someone@gmail.com")
+     .from_email("me@mycompany.com")
+     .build()
+     .unwrap();

let res = check_email(input, &config).await;
  • The main function, check_email(), now takes a second argument called ReacherConfig. This struct contains configuration such as the webdriver address to listen to for headless email verifications, or an optional Sentry configuration to send error reports to. Previously, these configurations were passed through poorly-documented environment variables; now we make them explicit. When migration, you can pass ReacherConfig::default() which returns sensible default values.
  • Remove /v0/bulk endpoints in favor of the /v1/bulk endpoints. New docs are here: https://help.reacher.email/bulk-email-verification.
  • Vercel functions (used by https://app.reacher.email) usually timeout with a 504 error within less than 60s. So we should absolutely make a verification in less time than that.

After some testing, Reacher performs better with this setting:

  • each SMTP connection times out after 45s, but we don't retry over this previous setting
  • each SMTP connection times out after ~20s, but we do retry once (to avoid greylisting in some rare cases)

Changing the default behaviour in this PR.

  • For Hotmail, Gmail and Yahoo addresses, the *_use_api and *_use_headless parameters have been removed and replaced with a *VerifyMethod, an enum which can take value Api, Headless or Smtp. If using headless, pass a webdriver address to env variable RCH_WEBDRIVER_ADDR.
  • input.hotmail_use_headless is now a bool instead of a string. Pass the webdriver address as an environment variable RCH_WEBDRIVER_ADDR now.
  • core: SmtpError::TimeoutError has been removed in favor of the one async-smtp uses, namely std::io::Error with ErrorKind::TimeoutError

0.9.1 (2023-10-08)

  • refactor!: Change RUST_LOG target to reacher (#1152) (7e87be2), closes #1152

Bug Fixes

  • backend: Fix CI priting (748940c)
  • backend: Fix deploy to docker (20fcfa6)
  • backend: Fix dockerfile (f0ed49f)
  • backend: Improve sentry error messages (#1155) (d90d998)
  • backend: Redact email in sentry bug tracking (2c2d1d8)
  • cli: Update flags default values (a4fe57e)
  • core: Add more invalid parsing and improve logging (#1156) (b5ae9f8)
  • core: Default SMTP timeout to 15 (0d4fa4d)
  • core: Don't use headless on Microsoft 465 addresses (#1196) (0c3c21d)
  • core: Fix default CheckEmailInput (09215a1)
  • core: Fix hotmail headless option parsing (6ddc3b9)
  • core: Fix hotmail headless with authenticator (51cdb2e)
  • core: Fix MX random record selection (#1263) (9fae593)
  • core: Improve invalid parser (#1166) (bb46004)
  • core: Improve parser and headless hotmail runner (#1167) (0de33a5)
  • core: Improve parser from Sentry errors (fbaf588)
  • core: Improve parser's is_invalid (#1159) (ec1c4d5)
  • core: No sandbox in headless Hotmail check (0590438)
  • core: Remove antispam check (#1337) (06f18ed)
  • core: Yahoo add back IDENTIFIER_EXISTS (2b63556)
  • core: yahoo api changes: yid is userId now, sessionIndex is required and fo… (#1314) (0209111)
  • Don't auto-fetch Chrome, install in Docker (84fcc0d)
  • split Microsoft 365/Hotmail functionality (#1204) (e987b13)
  • Switch back to upstream fast-socks (#1164) (db356f1)
  • TLS accept unsafe (778692b)
  • Use chromedriver instead of gecko for parallel requests (e282e28)

Features

BREAKING CHANGES

  • The RUST_LOG target has been changed from check-if-email-exists to reacher.
- RUST_LOG=check-if-email-exists=debug cargo run
- RUST_LOG=reacher=debug cargo run
  • The library's main function check_email's argument CheckEmailInput nows takes a single to_email field, instead of a to_emails: Vec<String>
pub struct CheckEmailInput {
- pub to_emails: Vec<String>,
+ pub to_email: String,
  // --snip--
}

This effectively makes the public API more similar to the v0.7.* series. I'm still thinking about how to best verify multiple emails in one SMTP connection, but it most likely will be a new function with a different API. Follow issue #65 for more info.

0.8.32 (2022-08-13)

Bug Fixes

  • Fix parsing some invalid emails (cb65c0f)
  • Syntax also check using using mailchecker (8385bec)

Features

0.8.31 (2022-08-10)

0.8.30 (2022-06-02)

Bug Fixes

  • Fix has_full_inbox check too lenient (93de444)

Features

  • Add smtp.error.description field for human-readable description of error (#1111) (43b47ea)

0.8.29 (2022-03-02)

Features

0.8.28 (2022-02-11)

Features

0.8.27 (2022-02-07)

Features

  • Allow user to define SMTP client security for TLS (#1043) (bc722ff)
  • Break SmtpError into {Helo,Connect,ConnectWithStream,MailFrom,RcptTo,Close}Error (#1055) (64e5193)

0.8.26 (2022-01-26)

Bug Fixes

Features

0.8.25 (2021-10-05)

Bug Fixes

Features

0.8.24 (2021-07-03)

Features

  • Add CheckEmailInput setter set_ prefix to differentiate with accessing fields (#933) (276f656)
  • Add deprecated warning when running HTTP server (#943) (e4b1570)

0.8.23 (2021-06-20)

Bug Fixes

  • Add serde (De)Serialize to pub structs (#931) (949475d)

0.8.22 (2021-03-31)

0.8.21 (2021-03-31)

0.8.20 (2021-03-30)

0.8.19 (2021-01-10)

Bug Fixes

  • Reconnect auto-closed SMTP connections by foreign server (#825) (01ccf0d)

Features

  • Consider CLI config parameters in HTTP request checks (#827) (88b751a)

0.8.18 (2021-01-07)

Bug Fixes

  • Check deliverability using successful response code instead of message parsing (#822) (39d0ecd)

0.8.17 (2021-01-05)

Bug Fixes

  • Add better checks for existing mailboxes (#819) (9f88d01)

0.8.16 (2020-12-07)

Features

  • Add proxy_host and proxy_port info to HTTP (#770) (123f431)

0.8.15 (2020-11-11)

Bug Fixes

  • Don't check inputted email if catch-all (#714) (5129dd1)
  • Fix 'reached the type-length limit while instantiating' (#665) (fa040fd)

0.8.14 (2020-09-24)

Bug Fixes

  • Add more known errors for invalid email (#543) (ad209c7)

Features

  • Add optional timeout on smtp verification (#611) (c70de7d)

0.8.13 (2020-08-04)

Bug Fixes

0.8.12 (2020-08-04)

Bug Fixes

0.8.11 (2020-07-11)

Bug Fixes

  • Add "Invalid email address" check (#471) (3b03617)
  • Add possibility to use proxy in Yahoo API request (#472) (aafcedf)

0.8.10 (2020-07-04)

Bug Fixes

  • Correct message parsing for "receiving at a rate" error (#462) (4b31706)

0.8.9 (2020-07-04)

Features

0.8.8 (2020-06-28)

Bug Fixes

  • Add debug logs for Yahoo (e534670)

0.8.7 (2020-06-28)

Bug Fixes

0.8.6 (2020-06-28)

Bug Fixes

  • Add additional error check for undeliverable (#374) (e52a8f0)
  • Use HTTP requests to verify Yahoo emails (#412) (5fad57d)

0.8.5 (2020-05-21)

Features

  • Expose misc, syntax, mx, smtp modules (#373) (7c1d741)

0.8.4 (2020-05-19)

Bug Fixes

0.8.3 (2020-05-12)

Bug Fixes

0.8.2 (2020-05-12)

Bug Fixes

Features

0.8.1 (2020-05-09)

Bug Fixes

  • Lowercase the error string before matching (#321) (d983b2f)

0.8.0 (2020-05-08)

  • refactor!: Rename main function to check_email (#319) (bd12b7d), closes #319

Bug Fixes

  • Rename valid_format to is_valid_syntax (#288) (eae6482)

BREAKING CHANGES

  • This new version includes an overhaul of the codebase, mainly to prepare the groundwork for the upcoming work on bulk validation. These changes include:
  • The main function email_exists has been renamed to check_email:
- email_exists(&input).await;
+ check_email(&input).await;
  • The input EmailInput has been renamed to CheckEmailInput. Its ::new() method, instead of taking a single String, now takes Vec<String>.

  • The output SingleEmail has been renamed to CheckEmailOutput. The main function check_emails now returns a Vec<CheckEmailOutput>.

pub async fn check_email(inputs: &CheckEmailInput) -> Vec<CheckEmailOutput>
  • The syntax field in CheckEmailOutput is no longer a Result<SyntaxDetails, SyntaxError>, but only SyntaxDetails. Error cases are guaranteed not to happen for syntax validation.

  • The misc, mx, and smtp fields' signatures stay the same: Result<{Misc,Mx,Smtp}Details, {Misc,Mx,Smtp}Error>. However, the Result is an Err only when an internal error arrives. In case of errors due to user input (e.g. incorrect email inputted), the Default trait has been implemented on {Misc,Mx,Smtp}Details and will be returned. As such, the Skipped variant of error enums has been removed.

{
  "input": "foo@bar.baz",
  "mx": {
-    "error": { "cannot resolve" }
+    "accepts_mail": false, // This is Default
+    "records": [] // This is Default
  }
  • The misc, mx, smtp, syntax modules have been made private.
  • The field syntax.valid_format has been renamed to syntax.is_valid_syntax.

0.7.1 (2020-04-14)

Features

  • Add possibility to verify emails via proxy (#286) (a0ab93f)

0.7.0 (2020-03-26)

Features

BREAKING CHANGES

  • email_exists only takes one input now, an EmailInput which is built using the builder pattern.
- use check_if_email_exists::email_exists;
+ use check_if_email_exists::{email_exists, EmailInput};

- email_exists("someone@gmail.com", "user@example.org");
+ email_exists(
+   EmailInput::new("someone@gmail.com".to_string()).from_email("user@example.org".to_string())
+ )

EmailInput additionally takes a hello_name() method, which is used to set the name in the EHLO smtp command.

--from in CLI has been replaced with --from-email.

0.6.7 (2020-03-20)

0.6.6 (2020-03-01)

Bug Fixes

  • Allow http to listen to $PORT env variable (#215) (3b0c262)

0.6.1 (2020-02-18)

Features

0.6.0 (2019-12-01)

Features

  • Add a HTTP server behind the --http flag (#85) (d8b733e)
  • Add Dockerfile & x86_64-unknown-linux-musl target (#86) (cba1241)

BREAKING CHANGES

    • The is_disposable subfield has been moved from the mx field to a separate misc field

0.5.0 (2019-11-16)

Code Refactoring

BREAKING CHANGES

    • The main function email_exists now returns a Future:
pub async fn email_exists(to_email: &str, from_email: &str) -> SingleEmail {}
  • The SmtpError::SmtpError has been renamed to SmtpError::LettreError to show the underlying error more correctly (i.e., coming from lettre crate).
  • The BlockedByISP error has been removed. Instead, you'll see e.g. "connection refused", or whatever is returned by the SMTP server:
{
  // ...,
  "smtp": {
    "error": {
      "type": "LettreError",
      "message": "connection refused"
    }
  },
}

0.4.0 (2019-09-30)

Features

BREAKING CHANGES

  • the smtp's object keys have changed. Instead of
{
  "deliverable": ...,
  "full_inbox": ...,
  "has_catch_all": ...
}

it now returns

{
  "has_full_inbox": ...,
  "is_deliverable": ...,
  "is_disabled": ...,
  "is_catch_all": ...
}

where is_disabled checks if the address has been disabled/blocked by the email provider

0.3.2 (2019-09-26)

Bug Fixes

  • core: SyntaxError also is type & message (#60) (996633b)

0.3.1 (2019-09-26)

Bug Fixes

  • Don't use virtual workspace, be able to build (#59) (6c93893)

0.3.0 (2019-09-26)

Features

  • New error JSON format (#56) (fec4315)
  • Output JSON information with CLI (#53) (1d026d5)
  • Return Result instead of Result, with much more details (#23) (39b13f5)

0.2.3 (2019-05-09)

Bug Fixes

  • Update version to correct version in cli (992777c)

0.2.2 (2019-05-09)

Bug Fixes

  • Fix travis and appveyor to build binaries (f743e67)

0.2.1 (2019-05-09)

Bug Fixes

  • Refactor app to make travis build binaries (#17) (9616ef5)

0.2.0 (2019-05-09)

Features

0.1.1 (2018-12-29)