     end
 
     @doc """
-    Puts new recipients in the `#{fun}` header.
+    Puts new recipients in the `#{fun}` field.
 
     It will replace any previously added `#{fun}` recipients.
-
-    Valid formats for recipients:
-    * `"tony@stark.com"`
-    * `{"Tony Stark", "tony@stark.com"}`
     """
     def unquote(:"put_#{fun}")(%__MODULE__{} = email, recipients) when is_list(recipients) do
       recipients =

  end

  @doc """
  Sets the `reply_to` header.

  Valid formats:
  * `"tony@stark.com"`
  * `{"Tony Stark", "tony@stark.com"}`
  """
  def reply_to(%__MODULE__{} = email, reply_to) do
    reply_to = format_recipient(reply_to)
    %{email | reply_to: reply_to}
  end

  for fun <- [:subject, :text_body, :html_body]  do
    @doc """
    Sets the #{fun}.

    Valid formats:
    * `"tony@stark.com"`
    * `{"Tony Stark", "tony@stark.com"}`
    """
    def unquote(fun)(%__MODULE__{} = email, value) do
      %{email | unquote(fun) => value}
    end
  end

  for fun <- [:to, :cc, :bcc] do
    @doc """
    Adds new recipients to the `#{fun}` header.

    Valid formats for recipients:
    * `"tony@stark.com"`
    * `{"Tony Stark", "tony@stark.com"}`
    """
    def unquote(fun)(%__MODULE__{unquote(fun) => existing_recipients} = email, recipients) when is_list(recipients) do
      recipients =
        recipients
        |> Enum.map(&format_recipient(&1))
        |> Kernel.++(existing_recipients)
      %{email | unquote(fun) => recipients}
    end
    def unquote(fun)(%__MODULE__{} = email, recipient) do

  end

  @doc """
  Puts a new `header` in the email.

  The name and value must be specified as strings.

      iex> %Email{} |> header("X-Magic-Number", "7")
      %Email{assigns: %{}, attachments: nil, bcc: [], cc: [], from: nil,
       headers: %{"X-Magic-Number" => "7"}, html_body: nil, private: %{},
       provider_options: %{}, reply_to: nil, subject: "", text_body: nil, to: []}
  """
  def header(%__MODULE__{headers: headers} = email, name, value) when is_binary(name) and is_binary(value) do
    headers = headers |> Map.put(name, value)
