2017-12-04 33 views
1

私はUbuntuサーバー(16.04)+ Nagiosを持っています。また、毎晩スクリーンショット(Nagiosステータス)を作成し、このスクリーンショットを2人の受信者に送信するスクリプトを作成しました。しかし、問題が発生し、私は画像(添付ファイルではなく、身体に埋め込まれている)でメールを受信する - OKですが、私の友人は、壊れた画像(添付ファイルの空白のファイル)で同じメールを受信します。 どのような提案、どのようにこの問題を解決するには? スクリプトコード:Ubuntu。画像を埋め込んだメールを送信する

#!/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 
+0

あなたの友人ではなく、あなたの友人ではない場合、友人の電子メールクライアントは、 – chiliNUT

+0

@chiliNUT、理由はあるかもしれませんが、私たちはそれについて考えませんでした。それを確認する必要があります。アイデアをありがとう。 –

答えて

2

あなたはMIMEヘッダとbase64で画像データ間の改行が不足しています。

ここのドキュメント内のコマンド置換でRunning 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 

(私はあなたのハードコードにsendmailへのパスを持っていないので、あなたはスクリプトの先頭近くPATH=/usr/sbin:$PATHをしたと仮定しています。)

の知識を向上させた場合MIMEは個人的な開発目標ではなく、おそらくこれを正しく行う方法を知っているプログラムを使用してください。多くの人々はmuttを使って、正確にそれを正確に行うことを心配することなく、代わってメールを送信します。

文章を別にして、$(date +%F)を複数回実行することはぎこちないようです。一度だけ実行して、出力を変数に取り込みます。 (病理学の場合、スクリプトは真夜中に実行され、メッセージのさまざまな部分で異なる日付が表示されます)。

+0

メッセージに実際にLatin-9(iso-8859-15)データが含まれていない場合は、文字セット、特に従来の8ビット文字セットを指定するのはなぜでしょうか?フレンドリーでフレンドリーな米国防総省の古いUS-ASCIIだけで満足できない場合は、おそらくUTF-8で標準化するべきです。 – tripleee

+0

こんにちは、@トライプルー。提案していただきありがとうございますが、私はこのスクリプトはうまくいきますし、私の友人はメッセージ本文に画像を受け入れることにいくつか問題があったと思います。しかし、私はあなたの提案を調査し、あなたの勧告でスクリプトを修正しようとします。ありがとうございます –

+0

あなたのローカルネットワークの内側には長い回線があるかもしれませんが、組織外のメールサーバーに送信すると細かくなります。これらの問題(長い行とMIMEヘッダーとイメージボディデータの間に欠けているネック)はいずれもMIME形式の違反ですので、どのようなイベントでもこれらの問題を修正してみてください。 – tripleee

関連する問題