如何使用erlang gen_smtp发送html格式的邮件?

92vpleto  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(175)

可以找到gen_smtphere
我想要的是让电子邮件的内容支持HTML标签,如<strong>Hello</strong>
将显示为Hello

kpbwa7wx

kpbwa7wx1#

看看https://github.com/selectel/pat,它是一个易于使用的SMTP客户端,你可以使用任何文本,包括html标签作为消息的正文。

cclgggtu

cclgggtu2#

有关multipart/alternative消息的示例,请参阅gen_smtp mimemail测试:

Email = {<<"text">>, <<"html">>, [
  {<<"From">>, <<"me@example.com">>},
  {<<"To">>, <<"you@example.com">>},
  {<<"Subject">>, <<"This is a test">>}],
  #{content_type_params => [
    {<<"charset">>, <<"US-ASCII">>}],
    disposition => <<"inline">>
  },
  <<"This is a <strong>HTML</strong> message with some non-ascii characters øÿ\r\nso there">>},
Encoded = mimemail:encode(Email)
fcipmucu

fcipmucu3#

@Ward Bekker给出的答案基本上是正确的,但我花了一段时间才让它工作,因为mimemail:encode/1期望的是proplist,而不是示例中显示的map。我使用Erlang Erlang/OTP 23 [Erts-11.0.3],它失败了:

** exception error: no function clause matching proplists:get_value(<<"content-type-params">>, #{disposition => <<"inline">>,<<"content-type-params">> =>              [{<<"charset">>,<<"US-ASCII">>}]},[]) (proplists.erl, line 215)
     in function  mimemail:ensure_content_headers/7 (/Users/sean/Documents/code/erlang/scofblog/_build/default/lib/gen_smtp/src/mimemail.erl, line 661)

下面是修改后的代码和编码后的输出:

Email = {
  <<"text">>,
  <<"html">>,
  [
    {<<"From">>, <<"me@example.com">>},
    {<<"To">>, <<"you@example.com">>},
    {<<"Subject">>, <<"This is a test">>}
  ],
  [{<<"content-type-params">>, [{<<"charset">>, <<"US-ASCII">>}]},
   {<<"disposition">>, <<"inline">>}
  ],
  <<"This is a <strong>HTML</strong> øÿ\r\nso there">>
}.

62> mimemail:encode(Email).
<<"From: me@example.com\r\nTo: you@example.com\r\nSubject: This is a test\r\nContent-Type: text/html;\r\n\tcharset=US-ASCII\r\nCon"...>>

希望这能省去一些挠头的事。

相关问题