diff --git a/lib/bamboo/adapters/render/raw.ex b/lib/bamboo/adapters/render/raw.ex index c7f51a0..79baa6d 100644 --- a/lib/bamboo/adapters/render/raw.ex +++ b/lib/bamboo/adapters/render/raw.ex @@ -6,6 +6,9 @@ defmodule BambooSes.Render.Raw do @doc """ Returns a tuple with all data needed for the underlying adapter to send. """ + + alias BambooSes.Encoding + def render(email, extra_headers \\ []) do email # Returns a list of tuples @@ -163,13 +166,19 @@ defmodule BambooSes.Render.Raw do defp headers_for(email) do headers = [ - {"From", BambooSes.Encoding.prepare_address(email.from)}, + {"From", Encoding.prepare_address(email.from)}, {"Subject", email.subject} - ] ++ Map.to_list(email.headers) + ] ++ Enum.map(email.headers, &preprocess_header/1) Enum.filter(headers, fn i -> elem(i, 1) != "" end) end + defp preprocess_header({"Reply-To" = key, {_name, _address} = value}) do + {key, Encoding.prepare_address(value)} + end + + defp preprocess_header({key, value}), do: {key, value} + defp compile_parts(email) do [ {:plain, email.text_body}, diff --git a/test/lib/bamboo/adapters/ses_adapter_test.exs b/test/lib/bamboo/adapters/ses_adapter_test.exs index 3b14463..1d84719 100644 --- a/test/lib/bamboo/adapters/ses_adapter_test.exs +++ b/test/lib/bamboo/adapters/ses_adapter_test.exs @@ -354,6 +354,34 @@ defmodule Bamboo.SesAdapterTest do |> SesAdapter.deliver(%{}) end + test "does not crash with Reply-To tuple and sending raw content" do + expected_request_fn = fn _, _, body, _, _ -> + {:ok, message} = Jason.decode(body) + + %{ + "Content" => %{ + "Raw" => %{ + "Data" => raw_content + } + } + } = message + + email = EmailParser.parse(raw_content) + + assert header_value = EmailParser.header(email, "Reply-To") + assert header_value == "John Schmidt " + + {:ok, %{status_code: 200, body: body}} + end + + expect(HttpMock, :request, expected_request_fn) + + TestHelpers.new_email() + |> Email.put_header("X-Custom-Header", "header-value") + |> Email.put_header("Reply-To", {"John Schmidt", "reply-to@example.com"}) + |> SesAdapter.deliver(%{}) + end + test "uses default aws region" do expected_request_fn = fn _, "https://email.us-east-1.amazonaws.com/v2/email/outbound-emails",