Ubuntu。发送带有嵌入图像的电子邮件

Ubuntu. Sending emails with embedded images

我有 Ubuntu server(16.04) + Nagios,我还创建了一个脚本,每晚制作一个屏幕截图(Nagios 状态)并将此屏幕截图发送给两个收件人。但是出现问题,我收到带有图像的邮件(嵌入正文,而不是附件)- 没问题,但我的朋友收到了带有损坏图像的相同邮件(附件中的空白文件)。 任何建议,如何解决这个问题? 脚本代码:

    #!/bin/bash

cat <<EOT | /usr/sbin/sendmail -t
TO: @email1, @email2
SUBJECT: Report: Nagios Event Log  $(date +%F --date=yesterday)
MIME-Version: 1.0
Content-Type: multipart/related;boundary="XYZ"

--XYZ
Content-Type: text/html; charset=ISO-8859-15
Content-Transfer-Encoding: 7bit

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">
</head>
<body bgcolor="#ffffff" text="#000000">
Hello Team,<br>Daily Nagios report of $(date +%F --date=yesterday) is generated.
<img src="cid:part1.06090408.01060107" alt="">
<br>Best Regards, Nagios Admin
</body>
</html>

--XYZ
Content-Type: image/png;name="Nagios-EventLog-`date +%F --date="yesterday"`.png"
Content-Transfer-Encoding: base64
Content-ID: <part1.06090408.01060107>
Content-Disposition: inline; filename="Nagios-EventLog-`date +%F --date="yesterday"`.png"
$(base64 /some_path/NagiosReport/Nagios-EventLog-`date +%F --date="yesterday"`.png)
--XYZ--
EOT

MIME headers 和 base64 图像数据之间缺少换行符。

运行 base64 在此处文档中的命令替换中可能会在输出中产生超长行。尝试(粗略的伪代码)

( cat <<EOF
  From: blah blah ...
  Subject: blah blah ...
  :
  --XYZ
  Content-description: image/png; name=etc etc

  EOF

  base64 file

  printf "\n--XYZ--\n" ) | sendmail -oi -t

(我假设你在脚本顶部附近做了 PATH=/usr/sbin:$PATH,所以你不必 hard-code 到 sendmail 的路径。)

如果提高 MIME 知识不是个人发展目标,则可能使用知道如何正确执行此操作的程序。许多人使用 mutt 代表他们发送邮件,而不必担心如何正确发送邮件。

除了文体之外,运行宁 $(date +%F) 多次看起来很笨拙。只需 运行 它一次并捕获变量中的输出。 (在病态情况下,脚本 运行 大约在午夜左右,您在消息的不同部分得到不同的日期!)