XCLIENTコマンドに対応したメールサーバのテスト用のSMTPクライアントツールを作成します。
XCLIENTコマンド対応SMTPクライアント目的
以下のエントリで構築したテスト用のpostfixのアクセスコントロールの確認を行うため、送信元アドレス、ホスト名を指定することが可能なXCLIENTコマンドに対応したSMTPクライアントツールを作成します。
https://qiita.com/keikmobile/items/2440ecebdd02adccc6a1
XCLIENTコマンドについては以下を参照ください。
http://www.postfix.org/XCLIENT_README.html
XCLIENTコマンド対応SMTPクライアントツール仕様
XCLIENTコマンド対応SMTPクライアントツールの仕様は以下とします。
- SMTPでメッセージ送信が可能なこと。
- XCLIENTコマンドでNAME,ADDR属性を指定可能なこと。
- XCLIENTコマンドの発行の有無は指定可能なこと。
- 以下パラメータはコマンドラインオプション指定可能なこと。
- SMTP server host
- SMTP server port
- XCLIENT NAME attribute
- XCLIENT ADDR attribute
- MAIL FROM Reverse-Path
- RCPT TO Forward-Path
- SMTP Contents (message)
- SMTPクライアントが発行するSMTPコマンドのシーケンスは以下の通りとする。
- EHLO
- XCLIENT
- MAIL FROM
- RCPT TO
- DATA
- QUIT
- 4xx,5xx応答を受けた場合は、QUITコマンドを発行して、終了すること。
- [TODO] SMTPサーバがXCLIENT拡張をサポートしていない場合、XCLIENTコマンドの発行はしない。
- [TODO] 各コマンドのレスポンスタイムアウトを実装すること。タイムアウトした場合、セッションを終了する(QUIT)
- [TODO] 各コマンドのリクエスト、レスポンスをログ出力すること
- [TODO] ログの出力有無は、指定可能とすること。
SMTPクライアントツール実装
SMTPクライアントツールの実装は以下の方針とします。
- 言語はperl。
実行サンプル
$ ./smtp_xclient.pl --help
Usage: ./smtp_xclient.pl [options]
[options:description:defalt]
--host : smtp host : 127.0.0.1
--port : smtp port : 127.0.0.1
--xaddr : xclient addr
--xname : xclient name
--helodomain : helo domain : localhost
--mailfrom : mail from : localhost@localhost
--rcptto : rcpt to : vagrant@localhost
--message_file : message file
--help : help
$
$ ./smtp_xclient.pl
220 host.localhost ESMTP Postfix
EHLO localhost
250-host.localhost
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-XCLIENT NAME ADDR PROTO HELO REVERSE_NAME PORT
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:<localhost@localhost>
250 2.1.0 Ok
RCPT TO:<vagrant@localhost>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
TEST MESSAGE
.
250 2.0.0 Ok: queued as 985D420563
QUIT
221 2.0.0 Bye
$