'mail' は、コマンドラインから動作するのと同じようにスクリプトでは動作しません

'mail' は、コマンドラインから動作するのと同じようにスクリプトでは動作しません

以下のコード/コマンド行は、Unix ターミナルから実行すると期待どおりに動作しますが、スクリプトに含めてスクリプトを実行すると動作しません - まったく同じです。

X-Priority が Outlook でメールを高優先度として表示することを期待しています。コマンド ラインから実行すると、メールは高優先度として正しく表示され、ファイルが添付され、本文も想定どおりに表示されます。ただし、シェル スクリプトを記述してスクリプトを実行すると、メールはテキストとしてフォーマットされ、添付ファイルがメールの本文に追加され、Outlook ではメールが通常どおり表示されます。

何が間違っているのか分かりません。どんな助けでもいただければ幸いです。

シェルスクリプト

#!/bin/sh
echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

シェルスクリプトでもテスト済み

#!/bin/bash
echo "Message Body" | /usr/bin/mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

コマンドライン

echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

編集: さらなる研究開発に関する詳細/観察:

実際のコマンドの件名には、 のような変数割り当てがありますMyApp : ${HostName} : Restarted\nX-Priority: 1HostNameはスクリプトで定義した変数です。 のようなハードコードされた変数値を置き換えると、コマンド ラインとスクリプトはまったく同じように動作します。 コマンド ラインに変数を保持しておくと、期待どおりに動作しますが (X-Priority 部分)、変数が定義されていないため、MyApp : myserver : Restarted\nX-Priority: 1件名は期待どおりになります。MyApp : : Restarted

スクリプトに未定義の変数を追加しようとしましたが、それでも機能しませんでした。

これによって、問題に対する理解が深まることを期待します。


注: もともとこの質問をstackoverflowでしました。しかし、代わりにここで質問するようにアドバイスされました -https://stackoverflow.com/questions/75585298/mail-not-working-in-script-same-way-it-is-working-from-command-line

--

答え1

使用している OS/ディストリビューションは何ですか?

mailx多くのディストリビューションでは、BSD をコマンドのエイリアスとしてよく使用していますmailが、代替手段があるか、スクリプトを実行すると異なる PATH を持つため、予期したプログラムとは異なるプログラムが使用される可能性があります (OS には、ユーザーが行うべきことについて別のアイデアがある可能性がありますmail)。

ターミナルから試してください:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

次に、スクリプトで同じことをして、PATHSに何か違いがあるかどうかを確認します。

BSDはmailx次のような場所にあります/usr/bin/mailx

mailただし、使用しているコマンドとは異なるオプションがあるようです。( man mailx/を参照man mail)。取得しようとしているのは、次のとおりです。

Subject: Message Subject 
  X-Priority: 1

または、件名と追加のヘッダー:

Subject: Message Subject
X-Priority: 1

bashこのように変数を使用して別のコマンドを呼び出そうとすると、変数から改行が削除されます。

もしmailx

  • -あ特定追加のヘッダーフィールドコマンドラインで「X-Loop: foo@bar」などと入力します。

私は次のようなことを試してみます:

#!/bin/bash
echo "Message Body" | /usr/bin/mailx -a "X-Priority: 1" -s "Message Subject" -r [email protected] -c [email protected] -- [email protected]

ただし、標準のメール/mailx で添付ファイルを追加する (簡単な) 方法はないと思います。それはできないことです。

muttまたはのような代替手段を使用することもできますneomutt:

options:

  --            Special argument forces NeoMutt to stop option parsing and treat
                remaining arguments as addresses even if they start with a dash

  -a <file>     Attach one or more files to a message (must be the last option)
                Add any addresses after the '--' argument

  -c <address>  Specify a carbon copy (Cc) recipient

  -s <subject>  Specify a subject (must be enclosed in quotes if it has spaces)


いずれにしても、あなたが望んでいることに近いことを実現できそうです。

echo "Message Body" | mutt -s "Message Subject" \ 
-e "my_hdr X-Priority: 1" \
-e "my_hdr From: [email protected]" \ 
-c [email protected] \
-a /path/to/logFile.log \
-- [email protected]


echo "Message Body" | mutt -s "Message Subject" -e "my_hdr X-Priority: 1" -e "my_hdr From: [email protected]" -c [email protected] -a /path/to/logFile.log -- [email protected]

関連情報