目的
メールサーバを構築したときに、メール送信のテストを簡単に行いたいので、sendmailコマンドの使い方をまとめます。
今回構築する環境では、試験のためにEnvelopeFromとHeaderFromを設定しわける必要があり、その設定方法もまとめます。
動作環境
CentOS 7.3 + Postfix 2.10.1-6.el7.x86_64
sendmaiコマンド
$ sendmail -f Envelope-From-Address@xxxxx.xxx.xx RCPT-To-Address@yyyy.yyy.yy
From: Header-From-Address@xxxxx.xxx.xx
To: Mail-To-Address@yyyy.yyy.yy
Subject: TEST
テストメールです
.
sendmailコマンドの-fオプションでEnvelopeFromを設定できます。続けて、RCPT-Toを設定します。
sendmailコマンドの行を入力すると、入力待ちとなるので、ヘッダ部を入力します。
ヘッダ部はLFで改行します。
当初(意図せず)CRLFになっていて、Gmailでは正しくヘッダFromもToも表示されるのですが、Thunderbirdでは本文中に表示されてしまいました。
なお、上記はメール本文をその場で手入力していますが、ワンライナーにすると下記のようになります。sendmailコマンドは引数に件名を指定できないようですので、echoで流し込む形を取ってみました。mailコマンド(mailxパッケージ)では件名を引数に取れたはずです。
$ echo -e "From: Header-From-Address@xxxxx.xxx.xx\nTo: Mail-To-Address@yyyy.yyy.yy\nSubject: Test\n\nテストメールです" | sendmail -i -t -f Envelope-From-Address@xxxxx.xxx.xx RCPT-To-Address@yyyy.yyy.yy
EnvelopeFromとHeaderFromの違い
メール配送時に使われるのがEnvelopeFrom。メーラに表示されるのがHeaderFrom。
なお、SPFチェックで使われるのはEnvelopeFromだと思います(EnvelopeFromのドメイン部分のDNSに照会される)。違うようでしたらどなたかツッコミを入れて下さい。
余談ですが、一般的にHeaderFromもチェックしているケースもあるのかは不明ですが、たまたま自社のサーバはチェックしていて、社外から自社のドメインをかたって送信されるメールはブロックしていました。・・・このため、社外のクラウドから自社のメールアドレスをFromにしたメルマガを配信すると、自分達だけブロックされて受け取れないという事態に陥り、そのテストのためこのsendmailコマンドを使ったのでした。。。