Linux
 Computer >> コンピューター >  >> スマートフォン >> Linux

Linuxコマンドラインからメールを送信する方法|mail・mutt・シェルスクリプト活用ガイド

Linuxのコマンドラインは、使いこなせば非常に強力なツールです。データの解析やプロセスの監視、バックアップの自動化など、さまざまな作業を効率化できます。その中でも「処理結果をメールで通知したい」というニーズはよくあります。例えば「当日のバックアップが正常に完了したかどうか」を知らせるだけのシンプルな通知もその一つです。

この記事では、Linuxのコマンドラインおよびシェルスクリプトからメールを送信する基本手順に加えて、添付ファイルの付け方まで詳しく解説します。まずは定番の「mail」コマンドから始めましょう。

mailコマンドでメールを送信する

最初に、「sendmail」アプリケーションがインストールされ、正しく動作しているかを簡単なテストで確認します。次のコマンドを実行し、「you@youremailid.com」の部分を自分のメールアドレスに置き換えてください。

# mail -s "Hello world" you@youremailid.com

Enterキーを押すと新しい行に移動します。そこで本文となるテキスト(例:「This is a test from my server」)を入力し、再度Enterキーを押します。続いてCtrl+Dを押すと進み、CC(カーボンコピー)を追加するかどうか尋ねられるので、そのままCtrl+Dをもう一度押して送信を完了します。メールボックスを確認すると、件名「Hello world」のメールが届いているはずです。

なお、環境によってはmailコマンドが初期状態でインストールされていないことがあります。Debian/Ubuntu系では「sudo apt install mailutils」、RHEL/CentOS系では「sudo yum install mailx」などで導入しておきましょう。

コマンド実行時に本文をまとめて指定したい場合は、echoコマンドとパイプ(|)を組み合わせます。

# echo "This will go into the body of the mail." | mail -s "Hello world" you@youremailid.com

ファイルの内容をそのまま本文にしたい場合は、リダイレクト(<)を使います。以下の例では、/home/calvin/application.log の中身がメール本文として送られます。

# mail -s "Hello world" you@youremailid.com < /home/calvin/application.log

mailコマンドの主なオプション

-s subject(メールの件名を指定)
-c email-address(指定したアドレスにCCとしてコピーを送る)
-b email-address(指定したアドレスにBCCとしてブラインドコピーを送る)

これらのオプションを組み合わせた使用例は以下の通りです。

# echo "Welcome to the world of Calvin n Hobbes" | mail -s "Hello world" calvin@cnh.com -c hobbes@cnh.com -b susie.derkins@cnh.com

muttで添付ファイルを送信する

mailコマンドの大きな弱点の一つは、添付ファイルを送れないことです。一方、muttは添付ファイルの送信に対応しています。テキスト以外の形式のレポートや、サイズの小さなバックアップファイルを別の場所へ送りたい場合に特に便利です。もちろんmuttの機能はそれにとどまらず、mailコマンドよりもはるかに完成度の高いコマンドラインメールクライアントです。ここでは、よく使う基本的な操作のみ紹介します。ファイルを添付して送信するには、次のようにします。

# echo "Sending an attachment." | mutt -a backup.zip -s "attachment" calvin@cnh.com

このコマンドは、件名(-s)「attachment」、本文「Sending an attachment.」、添付ファイル(-a)backup.zip を含むメールを calvin@cnh.com 宛てに送信します。なお、新しいバージョンのmuttでは、オプションと宛先アドレスの間に「--」を挟む必要がある場合があります(mutt -a backup.zip -- calvin@cnh.com)。また、mailコマンドと同様に「-c」オプションでCCを追加することも可能です。

シェルスクリプトからメールを送信する

基本がわかったところで、次はシェルスクリプトからメールを送ってみましょう。以下は、パーティションのディスク使用量を取得してメールで通知するシンプルなスクリプトです。

#!/bin/bash
df -h | mail -s "disk space report" calvin@cnh.com

これらの行をファイルに保存してLinuxサーバー上で実行すると、コマンドの実行結果が記載されたメールが届きます。より多くの情報を送りたい場合は、データをいったんテキストファイルに書き出し、それをメール本文として読み込ませます。次の例では、ディスク使用量とメモリ使用量を取得して一時ファイルに追記していき、その内容全体をメール本文として送信しています。

#!/bin/bash
df -h > /tmp/mail_report.log
free -m >> /tmp/mail_report.log
mail -s "disk and RAM report" calvin@cnh.com < /tmp/mail_report.log

さらに少し複雑な例として、「複数のファイルをバックアップしてメールで送りたい」というケースを考えてみます。まず対象ディレクトリをtarでアーカイブし、その後muttを使って添付ファイルとして送信します。以下はそのためのスクリプトです。

#!/bin/bash
tar -zcf /tmp/backup.tar.gz /home/calvin/files
echo | mutt -a /tmp/backup.tar.gz -s "daily backup of data" calvin@cnh.com

最終行の先頭にあるechoは、送信されるメールの本文に空行を追加する役割を果たしています。

まとめ

以上で、Linuxのコマンドラインやシェルスクリプトからメールを送信するための基礎は身についたはずです。さらに詳しいオプションについては、mailとmuttそれぞれのmanページ(ターミナルで「man mail」「man mutt」を実行)を参照してください。あとはアイデア次第で、自動レポートの定期送信など、さまざまな用途への応用が可能です。

  1. コマンドラインからUbuntuをアップグレードする方法|do-release-upgrade徹底解説

    Ubuntuの「アップデートマネージャー」を使えば、新しいメジャーリリースへのアップグレードは比較的簡単に行えます。GUIのウィザードが手順を順番に案内してくれるため、初心者でも迷わず操作できるでしょう。 しかし、GUIユーティリティを使えない場面もあります。たとえばサーバー環境ではグラフィカルインターフェースにアクセスできないため、コマンドラインでアップグレード作業を行うしかありません。 とはいえ、これだけがコマンドラインを使う理由ではありません。CLIでは処理の進行状況がより詳細に表示されるのが特徴です。多くのコマンドラインツールは実行中に大量のテキストを出力するため、アップグレードの詳細

  2. Outlookでメールエイリアスから送信する方法|Office 365の設定手順を徹底解説

    本ガイドでは、Office 365で作成したメールエイリアスからメッセージを「送信」できるように、Outlookを設定する方法を詳しく解説します。 ご存じのとおり、メールエイリアス宛てに届いたメッセージに返信する場合、「差出人(From)」フィールドにはエイリアスアドレスではなく、プライマリ(メイン)のメールアドレスが表示されます。エイリアスアドレスとして「送信」したい場合は、この記事の手順に従って設定を行ってください。 なぜ「差出人」にエイリアスが表示されないのか? Office 365ユーザーにメールエイリアスを作成すると、エイリアスアドレス宛てに届いたすべてのメッセージはユーザーのプライ