package LDV::Email; use strict; use warnings; use utf8; use Email::Simple; use Email::Sender::Simple qw(sendmail); sub new { my ($class, $opts) = @_; my $self = { from => 'noreply@example.com', reply => 'admin@example.com', %$opts, }; return bless($self, $class); } sub create { my ($self, $to, $subject, $body) = @_; return Email::Simple->create( body => $body, header => [ From => $self->{from}, 'Reply-To' => $self->{reply} || $self->{from}, To => $to, Subject => $subject, ], )->as_string; } sub send { my ($self, $to, $email) = @_; eval { sendmail($email, {from => $self->{from}, to => $to}); 1; } or do { return $@->message if ref $@; return $@; }; return; } 1; =pod =head1 NAME LDV::Email -- simple wrapper class to work with emails =head2 C my $email = LDV::Email->new(\%opts); * from -- default 'From' header * reply -- reply to this email instead 'from' =head2 C my $email = LDV::Email->new(\%opts); my $text = $email->create($to, $subject, $body); Create email message with some defaults set. Returns message text (with headers). =head2 C my $email = LDV::Email->new(\%opts); my $error = $email->send($to, $email); die($result) if $error; Send previously created email. Return nothing on success or scalar with description on error. =cut