2017-06-15 41 views
0

我有一個簡單的聯繫表格發送emailmessage字段。我正在使用Mailgun。從表單發送電子郵件 - 協議String.Chars未實現

我可以從控制檯完美地發送電子郵件,但是當我嘗試從形式在UI發送,我收到以下錯誤:

protocol String.Chars not implemented for %Iotc.Contact.Email{__meta__: 
#Ecto.Schema.Metadata<:loaded, "contact_emails">, email: 
"[email protected]", id: 25, inserted_at: ~N[2017-06-15 10:34:26.229957], 
message: "I'd like a cake please.", updated_at: ~N[2017-06-15 10:34:26.229977]} 

email_controller.ex

def create(conn, %{"email" => email_params, 
        "email" => %{"email" => email, 
        "message" => message}}) do 

    changeset = Contact.Email.changeset(%Iotc.Contact.Email{}, email_params) 
    case Contact.create_email(email_params) do 
     {:ok, email} -> 
     Iotc.Mailer.send_email(email, message) #<this is the issue. 
     conn 
     |> put_flash(:info, "Email sent") 
     |> redirect(to: email_path(conn, :index)) 
     {:error, changeset} -> 
     conn 
     |> put_flash(:error, "Something went wrong") 
     |> render("index.html", changeset: changeset) 
    end 

我試着改變

Iotc.Mailer.send_email(email, message)

Iotc.Mailer.send_email(email_params)

但後來我得到

key :to not found in: %{"email" => "[email protected]", "message" => "I'd like a cake please.", "name" => "Simon"}

+1

嘗試'Iotc.Mailer.send_email (email.email,message)'。 – Dogbert

+0

再次感謝@Dogbert,看起來工作。我們用'(email.email,message)'做什麼? –

回答

1

模式{:ok, email}陰影與%Iotc.Contact.Email{}結構外email字符串值,而send_email預計第一個參數是公正的電子郵件地址字符串值。您可以通過執行email.email得到的地址值:

case Contact.create_email(email_params) do 
    {:ok, email} -> 
    Iotc.Mailer.send_email(email.email, message) 
    ... 
    ... 
end 

,或者你可以因爲你不使用它反正改變忽略返回的結構模式:

case Contact.create_email(email_params) do 
    {:ok, _} -> 
    Iotc.Mailer.send_email(email, message) 
    ... 
    ... 
end