#!/usr/bin/env perl
use 5.20.0;
use strict;
use warnings;
use Mail::Milter::Authentication::Pragmas;
# ABSTRACT: A Perl Mail Authentication Milter client
# PODNAME: authentication_milter_client
our $VERSION = '3.20240701'; # VERSION
use Email::Simple;
use Getopt::Long;
use Pod::Usage;
use Mail::Milter::Authentication::Client;
use Mail::Milter::Authentication::Config;

# CONFIG
my $help         = 0;
my $mailer_name  = 'test.mta.example.com';
my $connect_ip   = '127.0.0.1';
my $connect_name = 'localhost.localdomain';
my $connect_port = '54321';
my $connect_type = 'tcp4';
my $helo_host    = 'localhost.example.com';
my $mail_from    = 'test_user@localhost.example.com';
my $rcpt_to      = 'test_user@mta.example.com';
my $mail_file    = q{};
my $prefix;

GetOptions (
    'mailer_name=s'  => \$mailer_name,
    'connect_ip=s'   => \$connect_ip,
    'connect_name=s' => \$connect_name,
    'connect_port=s' => \$connect_port,
    'connect_type=s' => \$connect_type,
    'helo_host=s'    => \$helo_host,
    'mail_from=s'    => \$mail_from,
    'rcpt_to=s'      => \$rcpt_to,
    'mail_file=s'    => \$mail_file,
    "help"           => \$help,
    "prefix=s"       => \$prefix,
) or die "Error in command line arguments\n";

if ( $help ) {
    usage();
    exit 0;
}

if ( $prefix ) {
    $Mail::Milter::Authentication::Config::PREFIX = $prefix;
}

sub usage {
    pod2usage( -verbose => 2 );
}

my $args = {
    'mailer_name'   => $mailer_name,
    'connect_ip'    => $connect_ip,
    'connect_name'  => $connect_name,
    'connect_port'  => $connect_port,
    'connect_type'  => $connect_type,
    'helo_host'     => $helo_host,
    'mail_from'     => $mail_from,
    'rcpt_to'       => $rcpt_to,
};

die "Please supply a mail file" if ! $mail_file;

if ( $mail_file eq '-' ) {
    my $mail_data = q{};
    while ( my $l = <> ) {
        $mail_data .= $l;
    }
    $args->{'mail_data'} = $mail_data;
}
else {
    if ( ! -e $mail_file ) {
        die "Mail file $mail_file does not exist";
    }
    $args->{'mail_file'} = $mail_file;
}

my $client = Mail::Milter::Authentication::Client->new( $args );

$client->process();

print $client->result();

__END__

=pod

=encoding UTF-8

=head1 NAME

authentication_milter_client - A Perl Mail Authentication Milter client

=head1 VERSION

version 3.20240701

=head1 USAGE

  authentication_milter_client [--mailer_name <name>] \
    [--connect_ip <ip>] [--connect_name <name] [--connect_port <port>] [--connect_type <type>] \
    [--helo_host <host>] [--mail_from <from>] [--rcpt_to <rcpt_to>] \
    [--mail_file <filename>] \
    [--prefix <dir>] \
    [-h|--help]

=head1 OPTIONS

=over

=item -h|--help

  Show this help.

=item --mail_file <file>

  Filename of file containing the email contents.
  If the filename is set to - then the client will read from STDIN

=item --prefix <dir>

  Read configuration from dir rather than /etc/

=item --mailer_name <name>

The name (fqdn) of the MTA

=item --connect_ip <ip>

The IP address of the host connecting to the mailer.

=item --connect_name <hostname>

The name of the host connecting to the mailer.

=item --connect_port <port>

The port of the connection to the mailer.

=item --connect_type <type>

The type of connection to the mailer (eg tcp4).

=item --helo_host <hostname>

The string passed in the HELO stage of the SMTP transaction.

=item --mail_from <address>

The string passed in the MAIL FROM stage of the SMTP transaction.

=item --rcpt_to <address>

The string passed in the RCPT TO stage of the SMTP transaction.

=back

=head1 AUTHOR

Marc Bradshaw <marc@marcbradshaw.net>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2020 by Marc Bradshaw.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut
