Created
December 9, 2019 23:50
-
-
Save jkramarz/f87eb0aed087705f6beb904e3afbfe12 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
# sends email subject line as zmtrigger command | |
# can be used to start ZoneMinder recording from non-Onvif capable camera that can send emails on event | |
use IO::Socket::INET; | |
use Net::Server::Mail::ESMTP; | |
use Email::Simple; | |
my $server = new IO::Socket::INET Listen => 1, LocalPort => 10025; | |
my $conn; | |
while($conn = $server->accept) | |
{ | |
my $esmtp = new Net::Server::Mail::ESMTP socket => $conn; | |
# activate AUTH extension | |
$esmtp->register('Net::Server::Mail::ESMTP::AUTH'); | |
# adding AUTH handler | |
$esmtp->set_callback(AUTH => \&validate_auth); | |
$esmtp->set_callback(DATA => \&queue_message); | |
$esmtp->process; | |
} | |
sub validate_auth | |
{ | |
my ($session, $username, $password) = @_; | |
if ($username eq 'zm' and $password eq 'secret') { | |
# AUTH SUCCESFULL | |
$session->{AUTH}->{ok} = 1; | |
return 1; | |
} else { | |
# AUTH FAILED | |
return 0; | |
} | |
} | |
sub queue_message { | |
my($session, $data) = @_; | |
unless ($session->{AUTH}->{ok}) { | |
# warn "no AUTH supplied!"; | |
return(0, 530, 'Error: Authentication required'); | |
} | |
my $sender = $session->get_sender(); | |
my @recipients = $session->get_recipients(); | |
my $email = Email::Simple->new($$data); | |
my $subject = $email->header("Subject"); | |
$zmtrigger = IO::Socket::INET->new(PeerAddr => "127.0.0.1", | |
PeerPort => 6802, | |
Proto => "tcp", | |
Type => SOCK_STREAM); | |
print $zmtrigger "${subject}\r\n"; | |
close $zmtrigger; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment