handle special characters in names
This commit is contained in:
		@ -29,4 +29,4 @@ defmodule Mailex do
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -8,18 +8,28 @@ defmodule Mailex.Address do
 | 
			
		||||
 | 
			
		||||
  def rfc_822_format(email) when is_map(email) do
 | 
			
		||||
    email_address = Map.get(email, "address", Map.get(email, :address))
 | 
			
		||||
    email_name = Map.get(email, "name", Map.get(email, :name))
 | 
			
		||||
    email_name = email
 | 
			
		||||
      |> Map.get("name", Map.get(email, :name))
 | 
			
		||||
      |> prepare_name(email_address)
 | 
			
		||||
    "#{email_name} <#{email_address}>"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  defp prepare_name(email_name, address) do
 | 
			
		||||
    if email_name do
 | 
			
		||||
      "#{email_name} <#{email_address}>"
 | 
			
		||||
      email_name = String.strip(email_name)
 | 
			
		||||
    else
 | 
			
		||||
      name = email_address |>
 | 
			
		||||
      email_name = address |>
 | 
			
		||||
        String.split("@") |>
 | 
			
		||||
        List.first |>
 | 
			
		||||
        String.split(~r/([^\w\s]|_)/) |>
 | 
			
		||||
        Enum.map(&String.capitalize/1) |>
 | 
			
		||||
        Enum.join(" ")
 | 
			
		||||
      "#{name} <#{email_address}>"
 | 
			
		||||
    end
 | 
			
		||||
    if String.match?(email_name, ~r/[\(\)\<\>\@\,\;\:\"\.\[\]\\]/) do
 | 
			
		||||
      "\"\\\"" <> String.replace(email_name, "\"", "\\\"") <> "\\\"\""
 | 
			
		||||
    else
 | 
			
		||||
      email_name
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -34,4 +44,4 @@ defmodule Mailex.Address do
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user