Erlang hackney:使用附件在mailgun.com中发送邮件

Erlang hackney:使用附件在mailgun.com中发送邮件,erlang,mailgun,Erlang,Mailgun,我正在尝试使用hackney通过mailgun.com发送电子邮件,我在发送附件时遇到了一些问题(需要多部分) 基本上我的兴趣领域是: from to subject text attachment File attachment. You can post multiple attachment values. Important: You must use multipart/form-data encoding when sending attachments. 我尝试了以下方法: P

我正在尝试使用hackney通过mailgun.com发送电子邮件,我在发送附件时遇到了一些问题(需要多部分)

基本上我的兴趣领域是:

from
to
subject
text
attachment File attachment. You can post multiple attachment values. Important: You must use multipart/form-data encoding when sending attachments.
我尝试了以下方法:

PayloadBase =[
   {<<"from">>, From},
   {<<"to">>, To},
   {<<"subject">>, Subject},
   {<<"text">>, TextBody},
   {<<"html">>, HtmlBody}
],

Payload = case Attachment of
    null ->
       {form, PayloadBase};
    _->
       {multipart, PayloadBase ++ [{file, Attachment}]}
end,
PayloadBase=[
{,From},
{,到},
{,主题},
{,TextBody},
{,HtmlBody}
],
有效载荷=壳体附件
空->
{form,PayloadBase};
_->
{多部分,PayloadBase++[{文件,附件}]}
完,,
但由于某些原因,附件未发送。。其他一切都按预期进行。
我不知道如何按照邮枪的要求将文件名设置为“附件”。。目前,我怀疑这是错误的

我没有使用mailgun,但我相信您需要将
附件
作为字段名。见你的帖子:

curl -s --user 'api:YOUR_API_KEY' \
    https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
    -F from='Excited User <YOU@YOUR_DOMAIN_NAME>' \
    -F to='foo@example.com' \
    -F cc='bar@example.com' \
    -F bcc='baz@example.com' \
    -F subject='Hello' \
    -F text='Testing some Mailgun awesomness!' \
    --form-string html='<html>HTML version of the body</html>' \
    -F attachment=@files/cartman.jpg \
    -F attachment=@files/cartman.png
curl-s——用户的api:您的api密钥'\
https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
-F来自“兴奋用户”\
-F至foo@example.com' \
-F cc=bar@example.com' \
-F bcc=baz@example.com' \
-F主题为“你好”\
-F text='测试一些邮枪的威力!'\
--表单字符串html='正文的html版本'\
-F附件=@files/cartman.jpg\
-F附件=@files/cartman.png
如果先让它使用
curl
,然后您就可以访问服务器了,这会更容易。然后你可以在Erlang中模仿它


这篇文章解释并指向提供数据编码示例的。以下代码将解决此问题:

Payload2 = case Attachment of
    null ->
        {form, PayloadBase};
    _->
        FName = hackney_bstr:to_binary(filename:basename(Attachment)),
        MyName = <<"attachment">>,
        Disposition = {<<"form-data">>, [{<<"name">>, <<"\"", MyName/binary, "\"">>}, {<<"filename">>, <<"\"", FName/binary, "\"">>}]},
        ExtraHeaders = [],
        {multipart, PayloadBase ++ [{file, Attachment, Disposition, ExtraHeaders}]}
end,
Payload2=案例附件
空->
{form,PayloadBase};
_->
FName=hackney\u bstr:to\u binary(文件名:basename(附件)),
我的名字=,
处置={,[{,},{,}]},
ExtraHeaders=[],
{multipart,PayloadBase++[{file,Attachment,Disposition,ExtraHeaders}]}
完,,

Silviu

和curl正常工作。但是和哈克尼在一起,我没办法让它工作。我还尝试了{multipart,PayloadBase++[{file,Attachment,[{,}]}}。但是运气不好。是的,我确信API和curl都可以正常工作。我提到了curl,这样您就可以调试应该发送的头并修复代码,而不是检查它是否有效。