summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorMitch Jackson <mitch@freeside.biz>2018-01-28 02:26:01 -0600
committerMitch Jackson <mitch@freeside.biz>2018-01-28 02:26:01 -0600
commit1a4faacda4f3affc6060e9f539bd3ae6c71408f7 (patch)
treee85fc598869a1546217ed7277d83f4ea6b113205 /bin
parente517b3733dd3d19a7af586c9f4b8cf9982a8b3d2 (diff)
RT# 73421 Simulated SMTP server for testing E-Mail
Diffstat (limited to 'bin')
-rwxr-xr-xbin/fakesmtpserver.pl53
1 files changed, 53 insertions, 0 deletions
diff --git a/bin/fakesmtpserver.pl b/bin/fakesmtpserver.pl
new file mode 100755
index 000000000..1f2ca3f31
--- /dev/null
+++ b/bin/fakesmtpserver.pl
@@ -0,0 +1,53 @@
+#!/usr/bin/env perl
+
+=head1 Fake SMTP Server
+
+While this script is running, creates an SMTP server at localhost port 25.
+
+Can only accept one client connection at a time. If necessary,
+it could be updated to fork on client connections.
+
+When an e-mail is delivered, the TO and FROM are printed to STDOUT.
+The TO, FROM and MSG are saved to a file in $message_save_dir
+
+=cut
+
+use strict;
+use warnings;
+
+use Carp;
+use Net::SMTP::Server;
+use Net::SMTP::Server::Client;
+use Net::SMTP::Server::Relay;
+
+my $message_save_dir = '/home/freeside/fakesmtpserver';
+
+mkdir $message_save_dir, 0777;
+
+my $server = new Net::SMTP::Server('localhost', 25) ||
+ croak("Unable to handle client connection: $!\n");
+
+while(my $conn = $server->accept()) {
+ my $client = new Net::SMTP::Server::Client($conn) ||
+ croak("Unable to handle client connection: $!\n");
+
+ $client->process || next;
+
+ open my $fh, '>', $message_save_dir.'/'.time().'.txt'
+ or die "error: $!";
+
+ for my $f (qw/TO FROM/) {
+
+ if (ref $client->{$f} eq 'ARRAY') {
+ print "$f: $_\n" for @{$client->{$f}};
+ print $fh "$f: $_\n" for @{$client->{$f}};
+ } else {
+ print "$f: $client->{$f}\n";
+ print $fh "$f: $client->{$f}\n";
+ }
+
+ }
+ print $fh "\n\n$client->{MSG}\n";
+ print "\n";
+ close $fh;
+}