#!/usr/bin/env perl # Copyright (c) 2005 - 2008 George Nistorica # All rights reserved. # This file is part of POE::Component::Client::SMTP # POE::Component::Client::SMTP is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. See the LICENSE # file that comes with this distribution for more details. # $Id: test_template.pl,v 1.3 2008/05/12 12:52:44 UltraDM Exp $ use strict; use warnings; use lib '../lib'; use Test::More tests => 6; # including use_ok use Data::Dumper; use Carp; BEGIN { use_ok("IO::Socket::INET"); } BEGIN { use_ok("POE"); } BEGIN { use_ok("POE::Wheel::ListenAccept"); } BEGIN { use_ok("POE::Component::Server::TCP"); } BEGIN { use_ok("POE::Component::Client::SMTP"); } my $test = 'undef'; my $smtp_message; my @recipients; my $from; my $debug = 0; $smtp_message = create_smtp_message(); @recipients = qw( ); $from = ''; ##### SMTP server vars my $port = 25252; my $EOL = "\015\012"; my @smtp_server_responses = ( "220 localhost ESMTP POE::Component::Client::SMTP Test Server", "250-localhost$EOL" . "250-PIPELINING$EOL" . "250-SIZE 250000000$EOL" . "250-VRFY$EOL" . "250-ETRN$EOL" . "250 8BITMIME", "250 Ok", # mail from "250 Ok", # rcpt to: "354 End data with <CR><LF>.<CR><LF>", # data "250 Ok: queued as 549B14484F", # end data "221 Bye", # quit ); POE::Component::Server::TCP->new( Port => $port, Address => "localhost", Domain => AF_INET, Alias => "smtp_server", Error => \&error_handler, # Optional. ClientInput => \&handle_client_input, # Required. ClientConnected => \&handle_client_connect, # Optional. ClientDisconnected => \&handle_client_disconnect, # Optional. ClientError => \&handle_client_error, # Optional. ClientFlushed => \&handle_client_flush, # Optional. ClientFilter => "POE::Filter::Line", # Optional. ClientInputFilter => "POE::Filter::Line", # Optional. ClientOutputFilter => "POE::Filter::Line", # Optional. ClientShutdownOnError => 1, # ); POE::Session->create( inline_states => { _start => \&start_session, _stop => \&stop_session, send_mail => \&spawn_pococlsmt, pococlsmtp_success => \&smtp_send_success, pococlsmtp_failure => \&smtp_send_failure, }, ); POE::Kernel->run(); is( $test, 1, "TEMPLATE" ); diag("TEMPLATE"); sub start_session { $_[KERNEL]->yield("send_mail"); } sub spawn_pococlsmt { POE::Component::Client::SMTP->send( From => $from, To => \@recipients, SMTP_Success => 'pococlsmtp_success', SMTP_Failure => 'pococlsmtp_failure', Server => 'localhost', Port => $port, Body => $smtp_message, Context => "test context", ); } sub stop_session { # stop server $_[KERNEL]->call( smtp_server => "shutdown" ); } sub smtp_send_success { my ( $arg0, $arg1 ) = @_[ ARG0, ARG1 ]; print "ARG0, ", Dumper($arg0), "\nARG1, ", Dumper($arg1) if $debug; $test = 1; } sub smtp_send_failure { my ( $arg0, $arg1 ) = @_[ ARG0, ARG1 ]; print "ARG0, ", Dumper($arg0), "\nARG1, ", Dumper($arg1) if $debug; $test = 0; } sub create_smtp_message { my $body = <<EOB; To: George Nistorica <george\@localhost> Bcc: George Nistorica <george\@localhost> CC: Alter Ego <root\@localhost> From: Charlie Root <root\@localhost> Subject: Email test Sent with $POE::Component::Client::SMTP::VERSION EOB return $body; } sub error_handler { carp "Something nasty happened"; exit 100; } sub handle_client_input { my ( $heap, $input ) = @_[ HEAP, ARG0 ]; if ( $input =~ /^(helo|ehlo|mail from:|rcpt to:|data|\.|quit)/i ) { print "$input\n" if $debug; $heap->{'client'}->put( shift @smtp_server_responses ); } } sub handle_client_connect { $_[HEAP]->{'client'}->put( shift @smtp_server_responses ); } sub handle_client_disconnect { } sub handle_client_error { } sub handle_client_flush { }