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)
多次看起来很笨拙。只需 运行 它一次并捕获变量中的输出。 (在病态情况下,脚本 运行 大约在午夜左右,您在消息的不同部分得到不同的日期!)
我有 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)
多次看起来很笨拙。只需 运行 它一次并捕获变量中的输出。 (在病态情况下,脚本 运行 大约在午夜左右,您在消息的不同部分得到不同的日期!)