【问题标题】:How to send HTML email with attachment with sendmail software in UNIX ksh如何在 UNIX ksh 中使用 sendmail 软件发送带有附件的 HTML 电子邮件
【发布时间】:2017-05-19 16:48:21
【问题描述】:

我正在尝试发送带有附件的 HTML 电子邮件,但不工作,只是发送文件

以下代码适用于 HTML:

message="all the HTML message"
(
   echo "From: UnixMail@test.com";
   echo "To: emails@email.com";
   echo "Subject: Testing HTML with attachment";
   echo "Content-Type: text/html";
   echo "MIME-Version: 1.0";
   echo "";
   echo "${message}";
) | /usr/sbin/sendmail -t

但我正在尝试像这样添加附件:

message="all the HTML message"
(
   echo "From: UnixMail@test.com";
   echo "To: emails@email.com";
   echo "Subject: Testing HTML with attachment";
   echo "Content-Type: text/html";
   echo "MIME-Version: 1.0";
   echo "Content-Transfer-Encoding: base64"
   echo "Content-Type: application/octet-stream; name=test_file.txt"
   echo "Content-Disposition: attachment; filename=/directory/myfile"
   echo "";
   echo "${message}";
) | /usr/sbin/sendmail -t

不工作,只发送没有任何可读内容的附件......有什么想法吗?

【问题讨论】:

    标签: html shell unix sendmail attachment


    【解决方案1】:
    echo "Content-Transfer-Encoding: base64"
    ...
    echo "${message}";
    

    邮件传统上仅限于 ASCII 数据和 998 个字符的行长。这意味着需要对二进制数据进行编码以遵守这些限制,并且需要指定编码类型。使用您正确设置为base64Content-Transfer-Encoding 标头指定编码。问题是您没有将数据编码为base64,而是插入原始数据。在这种情况下,大多数邮件客户端将忽略任何不属于 base64 的字符(即A-Za-z0-9/+ 之外的所有字符)作为垃圾。其余的将被视为 base64 编码并进行相应的解码,从而产生您看到的垃圾数据。

    因此,您不应该直接包含${message},而是首先对消息进行编码。这可以使用base64 tool(如果可用)或uuencode --base64 来完成。但是使用 uuencode 您绝对需要删除前缀和后缀行并仅保留编码数据。

    除此之外,您可能也应该对 HTML 消息执行此操作,除非该消息已经在仅 ASCII 字符的限制和 998 个字符的行长限制内。在大多数情况下,它可能在不编码的情况下工作,但对于某些收件人可能会失败,具体取决于所涉及的邮件服务器和邮件客户端的功能。

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 1970-01-01
      • 2011-10-07
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2015-10-27
      • 2012-11-17
      相关资源
      最近更新 更多