web-dev-qa-db-ja.com

mailxコマンドの送信元メールアドレスを設定する方法

エラー条件が満たされたときに電子メールを送信するKornShell(ksh)スクリプトをSolarisサーバーで実行しています。私はmailx経由でメールを送信しています。

質問:mailxコマンドで「差出人」の電子メールアドレスを設定するにはどうすればよいですか?

現在のコード:

echo ${msg_txt} | mailx -s "Script Failure" ${to_email}

注:コマンドは正常に機能しますが、「差出人」はスクリプトを実行しているユーザーの名前であり、これを別のメールアドレスに送信したいです。

どうすればこれを達成できますか?

34
AieshaDot

「-r」オプションを使用して、送信者アドレスを設定できます。

mailx -r [email protected] -s ...
41
sth

「-r」オプションは私のシステムでは無効です。 [差出人]フィールドに別の構文を使用する必要がありました。

-a "From: Foo Bar <[email protected]>"
36
Finch_Powers

差出人フィールドに実際の名前も含める場合は、次の形式を使用できます

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時間のハードワーク/研究を節約できることを願っています!

22
Rune

bsd-mailxがデフォルトでインストールされているDebianでは、-rオプションは機能しません。ただし、代わりにmailx -s subject [email protected] -- -f [email protected]を使用できます。マニュアルページによると、--の後にsendmailオプションを指定できます。

11
Marki555

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 を介したこれらの回避策の詳細情報。

2
Chris Woods

パッケージnailは、強化されたmailxのようなインターフェースを提供します。 -rオプションが含まれています。

Centos 5では、パッケージmailxをインストールすると、mailというプログラムが提供されますが、これはmailxオプションをサポートしていません。

2
Neik

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]

0
woohoo

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]
0
kitschmaster