You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.3 KiB
187 lines
5.3 KiB
package NGCP::Panel::Utils::Email;
|
|
|
|
use Sipwise::Base;
|
|
use Template;
|
|
use Email::Sender::Simple qw();
|
|
use Email::Simple;
|
|
use Email::Simple::Creator;
|
|
use Email::Sender::Transport::Sendmail qw();
|
|
|
|
sub send_email {
|
|
my %args = @_;
|
|
my $subject = $args{subject};
|
|
my $body = $args{body};
|
|
my $from = $args{from};
|
|
my $to = $args{to};
|
|
|
|
my $transport = Email::Sender::Transport::Sendmail->new;
|
|
my $email = Email::Simple->create(
|
|
header => [
|
|
To => $to,
|
|
From => $from,
|
|
Subject => $subject,
|
|
],
|
|
body => $body,
|
|
);
|
|
try {
|
|
Email::Sender::Simple->send($email, { transport => $transport });
|
|
} catch($e) {
|
|
return $e->message;
|
|
}
|
|
return;
|
|
}
|
|
|
|
sub send_template {
|
|
my ($c, $vars, $subject, $body, $from, $to) = @_;
|
|
my $t = Template->new;
|
|
|
|
$c->log->info("Trying to send mail from '" . $c->qs($from) . "' to '" . $c->qs($to) . "'");
|
|
|
|
my $processed_body = "";
|
|
$t->process(\$body, $vars, \$processed_body) ||
|
|
die "error processing email template body, type=".$t->error->type.", info='".$t->error->info."'";
|
|
|
|
my $processed_subject = "";
|
|
$t->process(\$subject, $vars, \$processed_subject) ||
|
|
die "error processing email template, type=".$t->error->type.", info='".$t->error->info."'";
|
|
|
|
my $err = send_email(
|
|
subject => $processed_subject,
|
|
body => $processed_body,
|
|
from => $from,
|
|
to => $to,
|
|
);
|
|
|
|
#my $template_processed = process_template({
|
|
# subject => $subject,
|
|
# body => $body,
|
|
# from_email => $from,
|
|
# to => $to,
|
|
#},$vars);
|
|
#
|
|
#send_email(
|
|
# subject => $template_processed->{subject},
|
|
# body => $template_processed->{body},
|
|
# from => $template_processed->{from_email},
|
|
# to => $template_processed->{to},
|
|
#);
|
|
|
|
$err ? $c->log->info("Could not send email from '" . $c->qs($from) . "' to '" . $c->qs($to) . "' error=$err")
|
|
: $c->log->error("Successfully handed over mail from '" . $c->qs($from) . "' to '" . $c->qs($to) . "'");
|
|
|
|
return 1;
|
|
}
|
|
|
|
sub new_subscriber {
|
|
my ($c, $subscriber, $url, $params) = @_;
|
|
|
|
my $template = $subscriber->contract->subscriber_email_template;
|
|
return unless($template);
|
|
my $email = $subscriber->contact ?
|
|
$subscriber->contact->email : $subscriber->contract->contact->email;
|
|
|
|
my $vars = {
|
|
url => $url,
|
|
subscriber => $subscriber->username . '@' . $subscriber->domain->domain,
|
|
|
|
username => $params->{username},
|
|
password => $params->{password},
|
|
|
|
webusername => $params->{webusername},
|
|
webpassword => $params->{webpassword},
|
|
|
|
cc => $params->{e164}->{cc},
|
|
ac => $params->{e164}->{ac},
|
|
sn => $params->{e164}->{sn},
|
|
};
|
|
|
|
my $body = $template->body;
|
|
my $subject = $template->subject;
|
|
|
|
return send_template($c, $vars, $subject, $body, $template->from_email, $email);
|
|
}
|
|
|
|
sub password_reset {
|
|
my ($c, $subscriber, $url) = @_;
|
|
|
|
my $template = $subscriber->contract->passreset_email_template;
|
|
return unless($template);
|
|
my $email = $subscriber->contact ?
|
|
$subscriber->contact->email : $subscriber->contract->contact->email;
|
|
|
|
my $vars = {
|
|
url => $url,
|
|
subscriber => $subscriber->username . '@' . $subscriber->domain->domain,
|
|
};
|
|
|
|
my $body = $template->body;
|
|
my $subject = $template->subject;
|
|
|
|
return send_template($c, $vars, $subject, $body, $template->from_email, $email);
|
|
}
|
|
|
|
sub admin_password_reset {
|
|
my ($c, $admin, $url) = @_;
|
|
|
|
my $template = $admin->reseller->email_templates->search({name => 'admin_passreset_default_email'})->first;
|
|
return unless($template);
|
|
my $email = $admin->email;
|
|
|
|
my $vars = {
|
|
url => $url,
|
|
admin => $admin->login,
|
|
};
|
|
|
|
my $body = $template->body;
|
|
my $subject = $template->subject;
|
|
|
|
return send_template($c, $vars, $subject, $body, $template->from_email, $email);
|
|
}
|
|
|
|
sub process_template{
|
|
my ($c, $tmpl, $vars) = @_;
|
|
my $t = Template->new;
|
|
my $tmpl_processed;
|
|
foreach(qw/body subject from_email to/){
|
|
$tmpl_processed->{$_} = "";
|
|
if($tmpl->{$_}){
|
|
$t->process(\$tmpl->{$_}, $vars, \$tmpl_processed->{$_})
|
|
|| die "error processing email template $_, type=".$t->error->type.", info='".$t->error->info."'";
|
|
}
|
|
}
|
|
return $tmpl_processed;
|
|
}
|
|
#just to make all processgin variants through one sub
|
|
#sub process_template_object{
|
|
# my ($c, $tmpl, $vars, $tmpl_hash) = @_;
|
|
# $tmpl_hash //= {};
|
|
# foreach(qw/body subject from_email/){
|
|
# $tmpl_hash->{$_} = $tmpl->get_column($_);
|
|
# }
|
|
# return process_template($c, $tmpl_hash, $vars);
|
|
#}
|
|
|
|
sub rewrite_url {
|
|
my ($format,$url) = @_;
|
|
if (length($url) and length($format)) {
|
|
if ($url =~ /^(https?):\/\/([^\/]+)(\/.+)?$/i) {
|
|
my $scheme = $1;
|
|
my $domain = $2;
|
|
my $base_path = $3;
|
|
$base_path =~ s/^\/// if length($base_path);
|
|
my $port;
|
|
if ($domain =~ /^([^@]*@)?([^:]+)(:\d+)?$/) {
|
|
$domain = $2;
|
|
$port = $3;
|
|
$port =~ s/^:// if length($port);
|
|
}
|
|
$url = sprintf($format,$scheme,$domain,$port,$base_path);
|
|
}
|
|
}
|
|
return $url;
|
|
}
|
|
|
|
1;
|
|
|
|
# vim: set tabstop=4 expandtab:
|