I like this builder pattern. Seems pretty similar to https://hackage.haskell.org/package/optparse-applicative as well, where you continually apply small functions to a data structure to end up with a big one.
Since Elixir doesn't have mandatory types, I assume there's no way to verify at compile time that it's a "valid" email (Has a recipient, and a from addr, whatever other requirements), and you'd have to check that in tests or at runtime?