sahilpaudel

sahilpaudel

(FunctionClauseError) no function clause matching in Base.encode64/2

I am trying to send attachment inside email from my phoenix application using Bamboo.

Library used:
nimble_csv
bamboo
bamboo_smtp

The attachment is in-memory data that I am getting after parsing the CSV and making some changes into it. I don’t want to save the CSV file so using the in-memory approach.

def dump_to_csv(list) do
    [~w(ORIGINAL_URL NEW_URL)] ++ list
      |> ShortnerParser.dump_to_iodata()
      |> prepare_mail
      |> Mailer.deliver_later
  end

def prepare_mail(data) do
    attachment = %Bamboo.Attachment{content_type: "application/octet-stream", filename: "shortner.csv", data: data}
    Email.send_csv("myemail@gmail.com", attachment)
  end

Error I am getting:

[error] Task #PID<0.1556.0> started from #PID<0.1492.0> terminating
** (FunctionClauseError) no function clause matching in Base.encode64/2
    (elixir) lib/base.ex:371: Base.encode64([["ORIGINAL_URL", 44, "NEW_URL", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/ldhkRf", 10], ["https://google.com", 44, "https://localhost:4000/n594Hy", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/Kl67G5", 10], ["https://google.com", 44, "https://localhost:4000/Ct17TM", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/w1gX_x", 10], ["https://google.com", 44, "https://localhost:4000/1lqoLr", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/R_u3Yq", 10], ["https://google.com", 44, "https://localhost:4000/elXe4V", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/13hn32", 10], ["https://google.com", 44, "https://localhost:4000/j9uiKL", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/c3pzUB", 10], ["https://google.com", 44, "https://localhost:4000/Yhb7Kv", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/19PS7z", 10], ["https://google.com", 44, "https://localhost:4000/LvHqO1", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/teJagz", 10], ["https://google.com", 44, "https://localhost:4000/MBYX_e", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/DfpQ25", 10], ["https://google.com", 44, "https://localhost:4000/jLFq6P", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/xM7Jg3", 10], ["https://google.com", 44, "https://localhost:4000/IM2RG6", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/1X2IZ8", 10], ["https://google.com", 44, "https://localhost:4000/KKo0kt", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/YvTW_p", 10], ["https://google.com", 44, "https://localhost:4000/iwLt7L", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/DoIvwE", 10], ["https://google.com", 44, "https://localhost:4000/ZMe3dE", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/CGEIa1", 10], ["https://google.com", 44, "https://localhost:4000/Z6fPMT", 10], ["https:pharmeasy.in", 44, "invalid_url", 10], ["https://facebook.com", 44, "https://localhost:4000/zYpNgG", 10], ["https://google.com", 44, "https://localhost:4000/MYQdRu", 10], ["https:pharmeasy.in", 44, "invalid_url", ...], ["https://facebook.com", 44, ...], ["https://google.com", ...], [...], ...], [])
    (bamboo_smtp) lib/bamboo/adapters/smtp_adapter.ex:214: Bamboo.SMTPAdapter.add_attachment_body/2
    (elixir) lib/enum.ex:1314: Enum."-map/2-lists^map/1-0-"/2
    (bamboo_smtp) lib/bamboo/adapters/smtp_adapter.ex:233: Bamboo.SMTPAdapter.add_attachments/3
    (bamboo_smtp) lib/bamboo/adapters/smtp_adapter.ex:278: Bamboo.SMTPAdapter.body/1
    (bamboo_smtp) lib/bamboo/adapters/smtp_adapter.ex:360: Bamboo.SMTPAdapter.to_gen_smtp_message/1
    (bamboo_smtp) lib/bamboo/adapters/smtp_adapter.ex:76: Bamboo.SMTPAdapter.deliver/2
    (elixir) lib/task/supervised.ex:89: Task.Supervised.do_apply/2
    (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Function: #Function<0.73693256/0 in Bamboo.TaskSupervisorStrategy.deliver_later/3>
    Args: []

Marked As Solved

NobbZ

NobbZ

You need to pass in a binary, rather than iodata.

Also Liked

sahilpaudel

sahilpaudel

How can I do that can you please help me with that?

Sorry that was lame question below method did the trick.

def convert_to_binary(data) do
    data
      |> IO.iodata_to_binary
  end

Thanks.

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

I could be wrong, but I think to_string is not equivalent to IO.iodata_to_binary. to_string expects a list of codepoints, but IO.iodata_to_binary expects any integers in the list to be bytes:

iex(2)> "hełło" |> String.to_charlist |> IO.iodata_to_binary
** (ArgumentError) argument error
    :erlang.iolist_to_binary([104, 101, 322, 322, 111])
iex(2)> "hełło" |> String.to_charlist |> to_string          
"hełło"

I don’t know if this makes any difference if what you start with is an iolist though.

Where Next?

Popular in Questions Top

LegitStack
I’m hoping you guys can give me some general advice and perhaps code examples if you’re feeling up to it. I’m very interested in Elixir,...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
LegitStack
I’m trying to make a websocket server in Phoenix or raw Elixir. I heard about gun, I think I could use cowboy, but since I’m not that sma...
New
chewm
Hi guys, nice to meet you to the whole forum, I’m new here, I’m trying to configure visual studio code for elixir, right now the intellis...
New
hpopp
To simplify some tasks at work, I wrote and published this package yesterday. It’s a simple macro that enables Access behaviour on struct...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New

Other popular topics Top

yurko
Here are few pieces of (common) Linux knowledge that we use for reasonably small one server apps. We use Ubuntu but this should work for ...
New
shahryarjb
Hello, I get Persian date from my client and convert it to normal calendar like this: def jalali_string_to_miladi_english_number(persi...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
chrisalley
ExUnit now has describe blocks which is a welcome addition coming from RSpec. In the docs, it states that nested hierarchies of describe ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

We're in Beta

About us Mission Statement