SMTPサーバのメール送信テストにmailxコマンドを使う

SMTPサーバのメール送信テストにmailxコマンドを使う

Clock Icon2015.05.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

クラウド上に構築するシステムにおいても、SMTPサーバの重要性はオンプレミスと変わりません。アプリケーションからのメール送信、監視システムからの通知メール、管理者向けのroot宛メールの転送、などなど...sendmailやpostfixなどを使ったSMTPサーバの構築は今もなお一般的に行われています。

しかし、Linuxサーバなどからメール送信テストを行おうとしても、通常GUIを備えたリッチなメールクライアントなどはありません。このためCUIでコマンドラインによってメール送信を行う必要があります。

本投稿ではコマンドラインでメールを送信するmailxコマンドの使い方をまとめました。

mailxコマンドの使い方

mailxのインストール

Amazon LinuxやCentOSでは、初期状態でmailコマンドが入っていません。このためmailxパッケージを追加インストールします。

$ sudo yum install mailx
(...snip...)
インストール:
  mailx.x86_64 0:12.4-8.8.amzn1

完了しました!

なお、mailxをインストールするとmailコマンドが作成されますが、実体はmailxコマンドです。

$ ls -alF /bin/mail
lrwxrwxrwx 1 root root 22 2015-05-26 20:29 /bin/mail -> /etc/alternatives/mail*
$ ls -alF /etc/alternatives/mail
lrwxrwxrwx 1 root root 10 2015-05-26 20:29 /etc/alternatives/mail -> /bin/mailx*

メールを送信する

メールを送信するときには、mailコマンドの後に送信先のメールアドレスを付与します。この際に使用されるSMTPサーバはlocalhostになります。続けてSubjectと本文を入力し、.によって本文の終わりを宣言します。

$ mail [email protected]
Subject: tset mail
test
.
EOT

メール本文の内容をファイルから読み込むにはリダイレクトを使います。

$ mail [email protected] < data.txt

上記のやり方だと、メール本文はリダイレクトで読み込めますが、Subjectの指定ができません。Subjectの指定は-sで指定します。

$ mail -s "test mail" [email protected] < data.txt

SMTPサーバを指定する

特に何も設定せずにmailコマンドを使うと、SMTPサーバはlocalhostを利用します。別のサーバ上に構築されたSMTPサーバを指定するには、~/.mailrcに設定します。

$ vi ~/.mailrc
set smtp=smtp://192.168.0.1:25

Fromアドレスを指定する

何も設定しない場合、送信したメールのFromアドレスは「ユーザ名@ローカルのホスト名」になります。EC2の場合だと「[email protected]」みたいな感じです。Fromアドレスを指定する場合には-rオプションで指定します。

$ mail -r [email protected] [email protected]

前述した~/.mailrcで指定することもできます。

$ vi ~/.mailrc
set from="[email protected]"

送信アカウントを使い分ける

~/.mailrcを使って、送信アカウントの定義を複数作成することが出来ます。例えば上述したFromアドレスが違う送信アカウントを複数作ります。

$ vi ~/.mailrc
account hoge {
  set from="[email protected]"
}
account fuga {
  set from="[email protected]"
}

そしてメールを送信するときに-Aオプションで使用する送信アカウントを指定します。例えばhogeを指定すれば、Fromアドレスは[email protected]になります。

$ mail -A hoge [email protected]

ファイルを添付する

ファイルを添付するには-aオプションを使います。

$ mail -a ./data.txt [email protected]

CC、BCCを指定する

CCでメールを送信するには-cオプションを、BCCでメールを送信するには-bオプションを使います。

$ mail -c [email protected] -b [email protected] [email protected]

送信先メールアドレスにaliasを設定する

~/.mailrcでaliasを定義することで、送信先メールアドレスをグルーピングすることが出来ます。

$ vi ~/.mailrc
alias smoke [email protected] [email protected]

これで、以下のようにmailコマンドの後にalias名を指定することで、一度に複数のメールアドレスにメールを送信することが出来ます。

$ mail smoke

なお、普通にmailコマンドの後にスペース区切りで複数のメールアドレスを記述することでも、一度にメールを送信することが出来ます。

$ mail [email protected] [email protected]

メール送信の通信ログを確認する

-vオプションを付与することで、メール送信時の通信ログの詳細を確認出来ます。

$ mail -v -s "test mail" [email protected] < data.txt
Resolving host 192.168.0.1 . . . done.
Connecting to 192.168.0.1 . . . connected.
220 mail.example.com ESMTP Postfix
>>> HELO ip-12-34-56-78.ap-northeast-1.compute.internal
250 mail.example.com
>>> MAIL FROM:<[email protected]>
250 2.1.0 Ok
>>> RCPT TO:<[email protected]>
250 2.1.5 Ok
>>> DATA
354 End data with <CR><LF>.<CR><LF>
>>> .
250 2.0.0 Ok: queued as E445B45EE6
>>> QUIT
221 2.0.0 Bye

さいごに

よく使うわりには細かい実行オプションをいつも忘れてしまうので、これは自分用の備忘録です。自分でこの記事をブックマークしておこうと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.