エラー条件が満たされたときに電子メールを送信するKornShell(ksh)スクリプトをSolarisサーバーで実行しています。私はmailx
経由でメールを送信しています。
質問:mailx
コマンドで「差出人」の電子メールアドレスを設定するにはどうすればよいですか?
現在のコード:
echo ${msg_txt} | mailx -s "Script Failure" ${to_email}
注:コマンドは正常に機能しますが、「差出人」はスクリプトを実行しているユーザーの名前であり、これを別のメールアドレスに送信したいです。
どうすればこれを達成できますか?
「-r」オプションを使用して、送信者アドレスを設定できます。
mailx -r [email protected] -s ...
「-r」オプションは私のシステムでは無効です。 [差出人]フィールドに別の構文を使用する必要がありました。
-a "From: Foo Bar <[email protected]>"
差出人フィールドに実際の名前も含める場合は、次の形式を使用できます
mailx -r "[email protected] (My Name)" -s "My Subject" ...
MyAEÆoeøaaå(Æ= C3 86、ø= C3 B8、å= C3 A5)のような非ASCII文字が名前に含まれている場合、次のようにエンコードする必要があります。
mailx -r "[email protected] (My =?utf-8?Q?AE=C3=86oe=C3=B8aa=C3=A5?=)" -s "My Subject" ...
これにより、誰かが1時間のハードワーク/研究を節約できることを願っています!
bsd-mailx
がデフォルトでインストールされているDebianでは、-r
オプションは機能しません。ただし、代わりにmailx -s subject [email protected] -- -f [email protected]
を使用できます。マニュアルページによると、--
の後にsendmailオプションを指定できます。
CentOS 7マシンでこの構文の問題に遭遇しました。
mail
を実行している非常に古いUbuntuマシンでは、うまく構成された電子メールの構文は次のとおりです。
echo -e "$body" | mail -s "$subject" -a "From: Sender Name <$sender>" "$recipient"
ただし、mailx
がインストールされたCentOS 7ボックスでは、まったく異なります。
echo -e "$body" | mail -s "$subject" -S "from=Sender Name <$sender>" "$recipient"
コンサルティングman mail
は、-r
が非推奨であり、-S "variable=value"
を使用して「From」送信者アドレスを直接設定する必要があることを示します。
これらおよび以降の例では、
$sender
を"Sender Name <[email protected]>"
として定義し、$recipients
を"[email protected]"
としてbashスクリプトで定義しています。
その後、私がしたように、電子メールを送信する時点でスクリプトで電子メールの本文コンテンツを生成しようとすると、電子メールの本文が代わりにバイナリファイル( "ATT00001。クライアントに応じて、bin」、「application/octet-stream」または「noname」)。
この動作は、Heirloom mailxがテキスト入力で認識されない/制御文字を処理する方法です。 (詳細: https://access.redhat.com/solutions/113649 、それ自体がソリューションのmailx manページを参照しています。)
これを回避するために、生成された出力をtr
に渡す前にmail
に渡すメソッドを使用し、電子メールの文字セットも指定します。
echo -e "$body" | tr -d \\r | mail -s "$subject" -S "from=$sender" -S "sendcharsets=utf-8,iso-8859-1" "$recipients"
私のスクリプトでは、cronjobとして実行されるため、事前に明示的にロケールを宣言しています(cronは環境変数を継承しません)。
LANG="en_GB.UTF8" ; export LANG ;
(cronジョブのロケールを設定する別の方法 ここで説明します )
https://stackoverflow.com/a/29826988/253139 および https://stackoverflow.com/a/3120227/253139 を介したこれらの回避策の詳細情報。
パッケージnail
は、強化されたmailxのようなインターフェースを提供します。 -r
オプションが含まれています。
Centos 5では、パッケージmailx
をインストールすると、mail
というプログラムが提供されますが、これはmailx
オプションをサポートしていません。
Ubuntu Bionic 18.04では、これは希望どおりに機能します。
$ echo -e "testing email via yourisp.com from command line\n\nsent on: $(date)" | mailx --append='FROM:Foghorn Leghorn <[email protected]>' -s "test cli email $(date)" -- [email protected]
MacOS Sierraでは、smtpのセットアップで〜/ .mailrcを作成するとうまくいきませんでした。
set smtp-use-starttls
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set [email protected]
set smtp-auth-password=yourpass
次に、CLIからメールを送信するには:
echo "your message" | mail -s "your subject" [email protected]