defmodule EmailChecker do @moduledoc """ Simple library checking the validity of an email. ## Checks (in order) * REGEX: validate the emails has a good looking format * MX: validate the domain sever contains MX records * SMTP: validate the SMTP behind the MX records knows this email address (no email sent; disabled by default) """ @doc """ Check a given Email ## Parameters * `email` - `binary` - the email to check * `validations` - `function[]` - the checks to use (default from config) ## Example iex> EmailChecker.valid?("test@test.ch", [EmailChecker.Check.Format]) true """ @spec valid?(String.t(), [EmailChecker.Check]) :: boolean def valid?(email, validations \\ configured_validations()) def valid?(email, [validation | tail]) when is_binary(email) do if validation.valid?(email) do valid?(email, tail) else false end end def valid?(email, []) when is_binary(email), do: true defp configured_validations do Application.get_env(:email_checker, :validations, [ EmailChecker.Check.Format, EmailChecker.Check.MX ]) end end