如何使用 Elixir 从 Mailgun 中邮寄的存储中获取附件
How to get the attachment from storage mailed in Mailgun with Elixir
我已从 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"]
出去时,只有一大堆文本,里面有整封电子邮件。
所以我想我哪里出错了。
没有这方面的文档,或者我找不到!!!
你的url是附件的url吗?
如果是这样,您可以使用 File.write
将文件实际保存到您的服务器。
例如,如果附件是图片。
%HTTPoison.Response{body: body} = HTTPoison.get!(url)
File.write!("/tmp/image.png", body)
如果您的 url 实际上只是电子邮件本身,则回复中应该有一个 attachments
给出附件的 URL,您仍然可以按照描述获取以上。
Mailgun API documentation 说 body-mime
:
full MIME envelope. You will need a MIME parsing library to process this data.
一个这样的库是https://github.com/DockYard/elixir-mail。你应该能够得到这样的附件:
decoded["body-mime"] |> Mail.Parsers.RFC2822.parse() |> Mail.get_attachments()
我已从 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"]
出去时,只有一大堆文本,里面有整封电子邮件。
所以我想我哪里出错了。
没有这方面的文档,或者我找不到!!!
你的url是附件的url吗?
如果是这样,您可以使用 File.write
将文件实际保存到您的服务器。
例如,如果附件是图片。
%HTTPoison.Response{body: body} = HTTPoison.get!(url)
File.write!("/tmp/image.png", body)
如果您的 url 实际上只是电子邮件本身,则回复中应该有一个 attachments
给出附件的 URL,您仍然可以按照描述获取以上。
Mailgun API documentation 说 body-mime
:
full MIME envelope. You will need a MIME parsing library to process this data.
一个这样的库是https://github.com/DockYard/elixir-mail。你应该能够得到这样的附件:
decoded["body-mime"] |> Mail.Parsers.RFC2822.parse() |> Mail.get_attachments()