Как получить вложение из почтового ящика в Mailgun с помощью Elixir - PullRequest
0 голосов
/ 27 сентября 2019

Я извлек вложение из сохраненной электронной почты в Mailgun.

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":

, когда у меня decoded["body-mime"] есть только массивный текст свся электронная почта там.

Так что я думаю, что я где-то ошибаюсь.

Нет документации для этого или я не могу ее найти !!!

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Является ли ваш URL-адрес URL-адресом вложения?

Если это так, вы можете использовать File.write для фактического сохранения файла на вашем сервере.

Итак, если вложение является изображениемНапример,

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

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

Если ваш URL-адрес фактически является самим электронным письмом, в ответе должно быть attachments, в котором содержится URL-адрес вложений, который вы все равно можете получить, как описано выше.

1 голос
/ 27 сентября 2019

Документация Mailgun API говорит о body-mime:

полном MIME-конверте.Для обработки этих данных вам понадобится библиотека синтаксического анализа MIME.

Одна из таких библиотек - https://github.com/DockYard/elixir-mail.. Вы сможете получить вложения, подобные этим:

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