mailxコマンドを使ってメールを受信する方法と、コマンドラインからのメールの読み方を解説します。
シェルスクリプトからメールを読み出す方法とその実例も載せます。
なお、メールの送信方法については触れませんが、既に解説しているこちらのページを参照してください。

.mailrcにIMAPサーバー設定をする

メールを受信するための事前準備として、IMAPサーバーの設定をします。
IMAPサーバーとは、メールを受信するサーバーのことで、利用するメールサービスごとに読み替えて設定してください。
ここでは、Gmailを例として設定します。

.mailrcの内容:
set folder=imaps://username@imap.gmail.com
set password-username@imap.gmail.com="yourpassword"
set imap-use-starttls
こちらのページにあるメールを送信する際の設定が.mailrcに残っている場合、後ろに続けて上記の内容を追記してください。
ピンクの網掛けの部分が、メールサービスや個人ごとに異なる部分です。
username の箇所は、Googleアカウント名になります(メールアドレスの@より前の文字)。
yourpassword の箇所は、Googleアカウントのパスワードになります。
パスワードをファイルに残す際は、パーミッションを600へ変更しましょう。具体的には、.mailrcの編集が終わったら、以下のコマンドを実行してください。
chmod 600 .mailrc
こうすることで、所有者以外の閲覧権限が無くなります。
なお、これらの設定値はメール送信の時にも説明しましたが、-Sオプションを使ってコマンドラインで指定することも可能です。

メールを受信する

メールを受信するには、次のコマンドを実行します。
mailx
非常にシンプルですが、これだけです。
mailxコマンドは、何のオプションも指定しなかった場合、メール閲覧モードになります。
IMAPサーバからメール情報を取得するため、しばらく時間がかかる可能性があります。
メールの受信に成功すると、以下のような画面が出力されます。これをメールヘッダのリストといいます。古いメールから順に表示されます。
この画面が表示されていれば、メールの受信は成功しています。
もし、メールボックスにメールが1通も無い場合は、「No mail for username」と表示されます。
Heirloom mailx version 12.5 6/20/10.  Type ? for help.
"imaps://zundoko77@imap.gmail.com/INBOX": 51222 messages 43567 unread
 U27141 ****************** Tue Dec 26 19:13     /17451 **********************
 U27142 ****************** Tue Dec 26 19:21     /42500 **********************
 U27143 ****************** Tue Dec 26 19:22     /39320 **********************
 U27144 ****************** Tue Dec 26 20:02     /17168 **********************
>F27145 ****************** Tue Dec 26 20:17     /11386 **********************
 O27146 ****************** Tue Dec 26 20:45     /18150 **********************
 O27147 ****************** Tue Dec 26 22:09     /16809 **********************
 O27148 ****************** Tue Dec 26 22:17     /14216 **********************
 U27149 ****************** Wed Dec 27 06:13     /31113 **********************
 U27150 ****************** Wed Dec 27 06:12     /13376 **********************
 U27151 ****************** Wed Dec 27 08:14     /18321 **********************
 U27152 ****************** Wed Dec 27 09:03     /50992 **********************
 U27153 ****************** Wed Dec 27 09:10     /17965 **********************
 U27154 ****************** Wed Dec 27 10:08     /18437 **********************
 U27155 ****************** Wed Dec 27 11:23     /10103 **********************
 O27156 ****************** Wed Dec 27 11:23     /13267 **********************
 U27157 ****************** Wed Dec 27 11:28     /18004 **********************
 U27158 ****************** Wed Dec 27 12:30     /17333 **********************
 U27159 ****************** Wed Dec 27 13:02     /10499 **********************
 U27160 ****************** Wed Dec 27 13:03     /11346 **********************
?

メールを読む

メールを読むには、?と出ているプロンプトに続けて、次のコマンドを実行します。
t
このtは、typeの省略で、typeと打っても構いません。また、print(p)でも構いません。
tだけだと、ヘッダのリストでカーソル「>」があたっているメールを読みます。
プロンプトが「:」に変わっていれば、エンターを入力することで続きを読むことができます。
このモードを抜けるには、qを打ちます。そうすると、プロンプトは再び「?」になります。
ヘッダのリストに表示されている任意のメールを読みたい場合は、tの後ろに、ヘッダのリストの先頭にある番号を指定します。ただし、UやOなどのアルファベットは含みません。
t27141
再びヘッダのリストを表示させるには、次のコマンドを実行します。
h
ヘッダのリストを移動させるには、次のコマンドを実行します。
z
「z-」とすることで、後ろに移動する(戻す)こともできます。
また、最新メールのヘッダリストを表示するには、次のコマンドを実行します。
h$
最新メールから読みたい場合は、特によく使うコマンドです。
なお、zやhの後ろにつける「-」や「$」は、edコマンドの用法に基づいており、
+は次、-は前、$は一番最後、*は全てを意味します。

シェルスクリプトでメールを読む例

上記のメールを読む方法は、ターミナルから対話式でメールを読む方法でした。
では対話式ではないスクリプトでは、メールを読むことができるのでしょうか。
スクリプトの場合、以下のように書くことでメール内容を表示することができます。
#!/bin/sh
echo "t$" | mailx
スクリプトで実行する場合は、対話式で使うコマンドをパイプ「|」でmailxコマンドに渡します。
そうすることで、コマンドの実行結果を取得することができます。
なお上記のスクリプトの場合、最新メールの内容を、標準出力に表示して終了します。
typeコマンドに最後を意味する$を指定することで、一番最後に受信したメール、すなわち最新メールを表示するという処理になります。

もう一つ例を挙げます。
以下のようにすることで、メールの内容をファイルに出力することができます。
#!/bin/sh
echo "w (from username@hotmail.co.jp) test.txt" | mailx
この例では、writeコマンド(w)を使用しています。writeコマンドは、条件に合うメールの本文だけを、指定されたファイル(test.txt)に出力します。今回はこの条件を、username@hotmail.co.jpという差出人からのメールを対象にしました。(from mail_address)とすることで、差出人を条件にすることができます。
このスクリプトを実行すると、username@hotmail.co.jpからのいくつかのメールの本文を、test.txtへ出力します。

これさえできれば、あとはメール記載内容を判別するなどして、あらゆる処理に応用できるでしょう。
例えば、「メール本文にABCという文字列が含まれていれば、Xという処理を実行する」などが考えられます。

メールを読む時のコマンド

これまでにいくつか挙げましたが、メールを読む時に様々なコマンドを指定することが可能です。
以下にいくつか説明しますが、他にも多くのオプションがあります。もっと深く知りたい場合はマニュアルページ(次のコマンドを実行:man mailx)を参照してください。

プロンプトが?の時に実行できるコマンド:
h #ヘッダのリストを表示
from mail_address #mail_addressからのメールを一覧表示。
p #メールを表示
r #指定したメールの全員に返信
w 1 test.txt #番号1のメールをtest.txtに保存
? #コマンドの簡単な要約を表示
q #終了
条件の指定:
. #今指定しているメール
$ #最後(最新)のメール
^ #最初(最古)のメール
* #全てのメール
1-5 #範囲指定。番号1から5までのメールを対象
(from mail_address) #差出人を指定
(to username) #宛先を指定
(subject string) #件名を指定
/string #全てのメールの件名からstringを含むメール
ちなみに、mailxを処理するマシンによっては、これらコマンドの実行に時間がかかる場合がありますので、コマンドの実行結果が返って来ない場合は気長に待ちましょう。

スポンサードリンク