Formatting the email address fields with Bamboo
When you create an email with Bamboo and deliver it:
email = new_email(
to: "chris@example.com",
from: "vitamin.bot@example.com",
subject: "Reminder",
text_body: "Take your vitamins"
)
|> Mailer.deliver_now()
The to
field will not be what you expect it to be:
email.to
# {nil, "chris@example.com"}
This is the normalized format for a to
field. The first element in the tuple is the name of the recipient.
Bamboo allows you to format this field yourself with protocols.
defimpl Bamboo.Formatter, for: Person do
def format_email_address(person, _opts) do
{person.nickname, person.email}
end
end
And now if I send an email with Person
in the to
field:
person = %Person{
nickname: "shorty",
email: "chris@example.com"
}
email = new_email(
to: person,
from: "vitamin.bot@example.com",
subject: "Reminder",
text_body: "Take your vitamins"
)
|> Mailer.deliver_now()
Then the to
field gets formatted with our protocol.
email.to
# {"shorty", "chris@example.com"}
Read more about the Bamboo Formatter here.
Tweet