CentOS7 の mailx コマンドで、外部のSMTPサーバを経由してメール送信

以前、sheevaplug のeximを使って、外部のSMTPサーバ経由でsendmailコマンドでメール送信する方法を記事にしたが、(https://ttandai.info/archives/758
CentOS7で同じことを実現する方法を探っていたら、結構前から、普通のmailコマンド(heirloom mailx になっている)のオプションで、普通に外部のSMTPサーバ経由でメール送信できるようになっていたので、メモを残しておく。(まぁ、このことに気付いたのは1年以上前なのだけれども、わざわざ記事にはしていなかった。最近これを扱う機会があったので、まぁ一応残しておく。)

この方法は root 権限なしでも可能なので、設定変更できないサーバ上でメール送信する際にも便利です。

何も難しいことはなくて、やることは、コマンドとしては

$ echo "message." | mailx -s "subject" -S smtp=smtp://example.com:587 -S smtp-auth-user=USER -S smtp-auth-password=PASSWORD -S from=from@example.com to@example.com

みたいな感じ。(mail コマンドが、mailx コマンドへのシンボリックリンクになっているので、単にmailコマンドでもOK)

いちいちパラメタ設定するのが面倒な場合は、 ~/.mailrc に設定を書いておける。

set smtp=smtp://example.com:587
set smtp-auth-user=USER
set smtp-auth-password=PASSWORD
set from=from@exmple.com

とか書いておけばよい。もちろん、25番ポートでメールを送れるサーバを経由するなら、もっと設定は簡単にかけるけれども、心置きなく使えるSMTPサーバは、587番ポートで認証必須なので、こんなもんです。

設定ファイルは、アカウント決め打ちなら上記のように書けばいいが、複数アカウントを使い分けるときは、設定ファイルの上記の部分を account hogehoge { } で囲み、mailxコマンドのオプションで mailx -A hogehogeすると、使い分けがきく。

この辺りは、man mailx を読んだ方が早いかと。

この設定をした後は、 sendmail -t コマンドを簡単に置き換えられる。
たとえば、下記のような感じ。

$ cat << EOF | mailx -t
To: to@example.com
Subject: this is a test mail.

TEST MAIL!
EOF

ところで、mailコマンドを打った時に、どうでもいいcronのメッセージとかが大量に出てくるとうっとうしいよね??

なお、CentOS7のpostfixでメールリレーの設定をして、外部のSMTPサーバを利用する場合は、Postfix でメールリレーの設定 (SMTP クライアント + SMTP Auth) | maruko2 note. Postfix 基本設定(postfix-jp.info)が参考になると思う。


2 thoughts on “CentOS7 の mailx コマンドで、外部のSMTPサーバを経由してメール送信

コメントを残す