如何使用Elixir从Mailgun中邮寄的存储中获取附件

时间:2019-09-27 05:33:17

标签: elixir mailgun

我已经从Mailgun中存储的电子邮件中提取了附件。

SELECT STEP_ONE, STEP_TWO, COUNT(*) FROM HOLIDAY_TB AS h inner join datesTest on h.HOLIDAY_DATE>=STEP_ONE AND h.HOLIDAY_DATE<=STEP_TWO group by STEP_ONE, STEP_TWO

现在,我需要一种方法来将其下载到服务器上的文件中。

https://sw.api.mailgun.net/v3/domains/xxxx.com/messages/AgEFb9QUzk8HBO7pSwVMB6qZaW0hSig8ZA==

结果:

url = "https://api:key-81c9c48ae617bc0d2@sw.api.mailgun.net/v3/domains/xxxx.com/messages/AgEFb9QUzk8HBO7pSwVMB6qZaW0hSig8ZA=="

headers = ["Accept": "message/rfc2822"]

{:ok, response} =  HTTPoison.get(url, headers)

从上面来看,只有%HTTPoison.Response{ body: "{\"body-mime\": \"X-Mailgun-Incoming: Yes\\r\\nX-Envelope-From:....} {:ok, decoded} = response.body |> Poison.decode iex(14)> Map.keys(decoded) ["Content-Type", "Date", "Dkim-Signature", "From", "Message-Id", "Mime-Version", "Received", "Subject", "To", "X-Envelope-From", "X-Gm-Message-State", "X-Google-Dkim-Signature", "X-Google-Smtp-Source", "X-Mailgun-Incoming", "X-Received", "body-mime", "from", "recipients", "sender", "subject"] 才有意义:

当我"body-mime"出门时,只有一封大文本,里面有整封电子邮件。

所以我认为我在某个地方出错了。

没有相关文档,或者我找不到它!

2 个答案:

答案 0 :(得分:2)

您的网址是附件的网址吗?

如果是这样,则可以使用File.write将文件实际保存到服务器。

例如,如果附件是图像。

%HTTPoison.Response{body: body} = HTTPoison.get!(url)

File.write!("/tmp/image.png", body)

如果您的网址实际上只是电子邮件本身,则响应中应该包含一个attachments,其中提供了附件的URL,您仍然可以如上所述获得它。

答案 1 :(得分:1)

Mailgun API documentation说起body-mime

  

完整的MIME信封。您将需要一个MIME解析库来处理这些数据。

一个这样的库是https://github.com/DockYard/elixir-mail。您应该能够获得如下附件:

decoded["body-mime"] |> Mail.Parsers.RFC2822.parse() |> Mail.get_attachments()