「メールはGmailやMicrosoft Outlookなどを使って送るもの」だと思っていないだろうか。実は、今回紹介するコマンド「mail」でもメールを送信できる。比較的長くUNIX系のOSを使っているユーザーにとっては当たり前のことだが、そもそもスマートフォンやタブレットデバイスが初めてのインターネット体験だった世代にとって、コマンドでメールを送れるというのは新鮮なことだろう。

ただ残念なことに、デフォルトではmailコマンドが用意されていない環境もある。その場合は、BSD mailベースで開発されている「mailx」というコマンドをインストールしていただきたい。次のような感じだ。

[root@centos ~]# yum install mailx
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
(1/2): extras/7/x86_64/primary_db                          | 191 kB   00:00
(2/2): updates/7/x86_64/primary_db                         | 7.8 MB   00:01
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ mailx.x86_64 0:12.5-12.el7_0 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package         アーキテクチャー バージョン               リポジトリー    容量
================================================================================
インストール中:
 mailx           x86_64           12.5-12.el7_0            base           244 k

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 244 k
インストール容量: 466 k
Is this ok [y/d/N]: y
Downloading packages:
mailx-12.5-12.el7_0.x86_64.rpm                             | 244 kB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : mailx-12.5-12.el7_0.x86_64                      1/1
  検証中                  : mailx-12.5-12.el7_0.x86_64                      1/1

インストール:
  mailx.x86_64 0:12.5-12.el7_0

完了しました!
[root@centos ~]#

似たようなコマンドを提供するソフトウェアは、ほかにもいくつかある。代表的なところは、「sendmail」や「Postfix」などだろう。システムにデフォルトでインストールされている場合はそのまま使えばよいが、メールを送信するためだけにわざわざインストールするのはちょっと大げさだ。mailxがあれば十分だろう。

mailコマンドは引数にメールアドレスを指定して実行すると、インタラクティブに動作するモードに入る。最初にサブジェクトを入力し、次に本文を入力する。「.(ピリオド)」だけの行が入力の終了として扱われるので、最後に「.」を入力して処理を終了する。インターネットが利用できる状態になっていれば、これだけでメールが送信されるはずだ。

$ mail メールアドレス
Subject: Mail Test                      ← サブジェクトを入力
This is a mail test.                    ← 本文を入力

.                                       ←.で終了
EOT
$

送信されたメールはこんな感じになる。

mailコマンドで送られたメール

コマンドの「うまみ」は、何と言ってもインタラクティブに入力せずに1行で済ませられることにある。先ほどのメール送信は、次のように1行にまとめて実行することができる。

$ printf 'This is a mail test.\n\n' | mail -s 'Mail Test' メールアドレス
$

オプション「-s」でサブジェクトを指定し、パイプラインでつないで標準入力から流し込んだデータがメールの本文として扱われる。こちらも、先ほどと同様のメールが届く。

1行にまとめたmailコマンドで送られたメール。先ほどと内容は同じだ

このように、パイプライン、またはリダイレクトなどを使って標準入力から流し込んだデータがそのままメールの本文として扱われるという点が、使い方次第で実に便利なポイントになる。例えば、次のようにコマンドの出力(ここではディスクの使用状況を表示するコマンド「df」を実行している)をそのままmailコマンドに流し込めば、コマンドの出力結果をメールで送信できる。

$ df | mail -s 'Disk Usage' メールアドレス
$

受信したメールの本文には、dfコマンドの出力結果が記載されている

もし、ディスクの使用量を毎日チェックする必要があるのであれば、上記のコマンドをそのままcronに登録しておけば、毎日自動的にチェックを実行し、その結果を指定したメールアドレスに送ることができる。管理者は自分のメーラーでメールをチェックするだけでよいというわけだ(ただし、この方法ではサーバの情報がいったん外部のホストを経由して送信されることになるので、会社で使うのはコンプライアンス的にアウトである可能性が考えられる。使用する前に、その辺りは十分配慮してほしい)。

Linuxサーバに限らず、UNIX系のOSでは、「内部的には管理者にメールを送信する」といった処理を行っているものが多い。結構使いやすい機能なので、使ったことがないのであれば一度試してもらえればと思う。