NAME Test::SMTP - Module for writing SMTP Server tests SYNOPSIS use Test::SMTP; plan tests => 10; # Constructors my $client1 = Test::SMTP->connect_ok('connect to mailhost', Host => '127.0.0.1', AutoHello => 1); $client1->mail_from_ok('test@example.com', 'Accept an example mail from'); $client1->rcpt_to_ko('test2@example.com', 'Reject an example domain in rcpt to'); $client1->quit_ok('Quit OK'); my $client2 = Test::SMTP->connect_ok('connect to mailhost', Host => '127.0.0.1', AutoHello => 1); ... DESCRIPTION This module is designed for easily building tests for SMTP servers. Test::SMTP is a subclass of Net::SMTP, that in turn is a subclass of Net::Cmd and IO::Socket::INET. Don't be too confident of it beeing a Net::SMTP subclass for too much time, though. PLAN plan Plan tests a la Test::More. Exported on demand (not necessary to export if you are already using a test module that exports plan). use Test::SMTP qw(plan); plan tests => 5; CONSTRUCTOR connect_ok($name, Host => $host, AutoHello => 1, [ Timeout => 1 ]) Passes if the client connects to the SMTP Server. Everything after *name* is passed to the Net::SMTP *new* method. returns a Test::SMTP object. Net::SMTP parameters of interest: Port => $port (connect to non-standard SMTP port) Hello => 'my (he|eh)lo' hello to send to the server Debug => 1 Outputs via STDERR the conversation with the server You have to pass AutoHello => 1, this will enable auto EHLO/HELO negotiation. connect_ko($name, Host => $host, [ Timeout => 1 ]) Passes test if the client does not connect to the SMTP Server. Everything after *name* is passed to the Net::SMTP *new* method. TEST METHODS code_is ($expected, $name) Passes if the last SMTP code returned by the server was *expected*. code_isnt ($expected, $name) Passes if the last SMTP code returned by the server was'nt *expected*. code_is_success($name) Passes if the last SMTP code returned by the server indicates success. code_isnt_success($name) Passes if the last SMTP code returned by the server doesn't indicate success. code_is_failure($name) Passes if the last SMTP code returned by the server indicates failure (either temporary or permanent). code_isnt_failure($name) Passes if the last SMTP code returned by the server doesn't indicate failure (either temporary or permanent). code_is_temporary($name) Passes if the last SMTP code returned by the server indicates temporary failure code_isnt_temporary($name) Passes if the last SMTP code returned by the server doesn't indicate temporary failure code_is_permanent($name) Passes if the last SMTP code returned by the server indicates permanent failure code_isnt_permanent($name) Passes if the last SMTP code returned by the server doesn't indicate permanent failure message_like(qr/REGEX/, $name) Passes if the last SMTP message returned by the server matches the regex. message_unlike(qr/REGEX/, $name) Passes if the last SMTP message returned by the server does'nt match the regex. rset_ok($name) Send a RSET command to the server. Pass if command was successful rset_ko($name) Send an RSET to the server. Pass if command was not successful supports_ok($capa, $name) Passes test if server said it supported *capa* capability on ESMTP EHLO supports_ko($capa, $name) Passes test if server didn't say it supported *capa* capability on ESMTP EHLO supports_cmp_ok($capability, $operator, $expected, $name) Compares server *capa* capability extra information with *operator* against *expected*. supports_like($capability, qr/REGEX/, $name) Passes if server *capa* capability extra information matches against *REGEX*. supports_unlike($capability, qr/REGEX/, $name) Passes if server *capa* capability extra information doesn't match against *REGEX*. banner_like(qr/REGEX/, $name) Passes if server banner matches against *REGEX*. banner_unlike(qr/REGEX/, $name) Passes if server banner doesn't match against *REGEX*. domain_like(qr/REGEX/, $name) Passes if server's announced domain matches against *REGEX*. domain_unlike(qr/REGEX/, $name) Passes if server's announced domain doesn't match against *REGEX*. mail_from_ok($from, $name) Sends a MAIL FROM: *from* to the server. Passes if the command succeeds mail_from_ko($from, $name) Sends a MAIL FROM: *from* to the server. Passes if the command isn't successful rcpt_to_ok($to, $name) Sends a RCPT TO: *to* to the server. Passes if the command succeeds rcpt_to_ko($to, $name) Sends a RCPT TO: *to* to the server. Passes if the command isn't successful data_ok($name) Sends a DATA command to the server. Passes if the command is successful. After calling this method, you should call datasend. data_ko($name) Sends a DATA command to the server. Passes if the command is'nt successful dataend_ok($name) Sends a . command to the server. Passes if the command is successful. dataend_ok($name) Sends a . command to the server. Passes if the command is not successful. help_like([HELP_ON], qr/REGEX/, $name) Sends HELP *HELP_ON* command to the server. If the returned text matches *REGEX*, the test passes. To test plain HELP command, pass undef in HELP_ON. help_unlike([HELP_ON], qr/REGEX/, $name) Sends HELP *HELP_ON* command to the server. If the returned text doesn't match *REGEX*, the test passes. To test plain HELP command, pass undef in HELP_ON. quit_ok($name) Send a QUIT command to the server. Pass if command was successful quit_ko($name) Send a QUIT command to the server. Pass if command was'nt successful NON TEST METHODS mail_from($from) Issues a MAIL FROM: *from* command to the server. rcpt_to($to) Issues a RCPT TO: *to* command to the server. AUTHOR Jose Luis Martinez CAPSiDE jlmartinez@capside.com http://www.pplusdomain.net/ http://www.capside.com/ COPYRIGHT This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module.