それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

さくっとメールを送るコマンド mailx(s-nail/bsd-mailx)

コマンドからサクッとメールを送信する。

コマンドからサクッとメールを送信して、送信テストをしたい。

コマンドには幾つか候補がある。

  • mailx がある。
  • s-nail がある。
  • mailutilsがある。
  • curl がある。
  • swaks がある。

これらを自由に選んで、メール送信をテストすることができる。

mailxは最初からインストールされているので手軽に試せる。

互換性がある。

mailx と s-nail は互換性がある。

mailx は外部のSMTPなどに非対応(未対応ではなく非対応)

MTA(外部サーバ・ポート)を指定する場合はs-nailを使う

mailx の場合

mailx は linuxでは bsd-mailx で存在する。

## 通常はインストール済みで、apt は不要
# sudo apt install bsd-mailx

mailxでメール送信

echo hi | mailx root
echo hi | mailx takuya

mailx を使うと、sendmail 経由で楽にメールを送れる。

bsd-mailx は初期導入済み

そもそも、私の環境に、なぜbsd-mailx は入っていたのか。

$ apt-cache --installed rdepends bsd-mailx
bsd-mailx
Reverse Depends:
  unattended-upgrades
 |logrotate
 |automysqlbackup 

logrotate と一緒に入っている。

logrotate で使われるので、初期インストールで、インストール済みであるはず。

mailx の実体。

mailxコマンドは、Aliasになっていて、初期設定の場合は bsd-mailxを指している。

takuya@:~$ ll /usr/bin/mailx
lrwxrwxrwx 1 root root 23 11月 18 16:53 /usr/bin/mailx -> /etc/alternatives/mailx

管理しているのは alternatives

takuya@:~$ sudo update-alternatives --config mailx
リンクグループ mailx に 1 つの alternative のみがあります (/usr/bin/mailx が提供): /usr/bin/bsd-mailx
設定は行いません。

smtp を指定するならs-nail

s-nailを使えば、SMTPサーバーを指定することができる。ポート番号やSMTP-AUTHを使える。メールの送信のチェックなら s-nailがmailxより高機能で使いやすい

sudo apt install s-nail 

s-nail で送信。

echo hi | s-nail root
echo hi | s-nail takuya

s-nail でSMTP経由でメールを送る

コマンドでSMTP経由でメール配送できる。

echo Hi success? | s-nail  \
   -S mta=smtp://localhost:25255 \
   -S smtp-auth=none  \
  -S v15-compat=yes \
   takuya@example.com

-S でオプションを指定できる。

s-nail はmailx互換性あるみたい

使い方を見ればわかるが、mailxと互換性がありそう。

しかし、alternativesには出てこない。

alternatives に登録する

mailxとs-nail はほぼ同じだし、alternativesでmailxは管理されている。

しかし、s-nail は apt インストールしても mailx にはならない。(公式パッケージのバグじゃないの)。仕方ないので手作業で登録する。

参考資料に従って、alternatives を構成する。

s-nail をmailxに追加

sudo update-alternatives \
  --install /usr/bin/mailx mailx  /usr/bin/s-nail 10 \
  --slave  /usr/bin/mail mail /usr/bin/s-nail \
  --slave  /usr/share/man/man1/mail.1.gz mail.1.gz /usr/share/man/man1/s-nail.1.gz \
  --slave  /usr/share/man/man1/mailx.1.gz  mailx.1.gz /usr/share/man/man1/s-nail.1.gz \

s-nail をmailxに設定

設定

sudo update-alternatives --set mailx  /usr/bin/s-nail

不要になったとき削除する場合はこれ

sudo update-alternatives --remove mailx /usr/bin/s-nail

mailxとしてsnail を使う。

s-nail を mailxとして登録したのであとは同じ。

echo Hi | mailx takuya

正しく追加するのは・・・・大変ですね。

その他の方法

curlでSMTPが何処でも使えるので便利だと思う。

mail.utils はmailxと互換性がありそうでないので、しらべなかった。

2022-01-10 追加

mailxで検索にマッチしないので記述見直し。

参考資料