Amazon-SES
view release on metacpan or search on metacpan
lib/Amazon/SES.pm view on Meta::CPAN
use Moops;
# ABSTRACT: Interfaces with AWS's SES service.
class Amazon::SES {
use strict;
use warnings;
use Carp ('croak');
use MIME::Base64;
use Time::Piece;
use HTTP::Headers;
use LWP::UserAgent;
use AWS::Signature4;
use Amazon::SES::Response;
use VM::EC2::Security::CredentialCache;
use HTTP::Request::Common;
use Kavorka qw( multi method );
has 'ua' => (is => 'ro', default => sub { return LWP::UserAgent->new() } );
has 'use_iam_role' => ( is => 'ro', default => 0 );
has 'access_key' => ( is => 'ro' );
has 'secret_key' => ( is => 'ro' );
has 'region' => ( is => 'ro', default => 'us-east-1' );
has 'response' => ( is => 'rw' );
method call(Str $action, HashRef $args? = {}) {
$args->{AWSAccessKeyId} = $self->access_key;
$args->{Action} = $action;
my $request = POST("https://email." . $self->region . ".amazonaws.com", $args);
if ($self->{use_iam_role}) {
my $creds = VM::EC2::Security::CredentialCache->get();
defined($creds) || die("Unable to retrieve IAM role credentials");
$self->{access_key} = $creds->accessKeyId;
$self->{secret_key} = $creds->secretAccessKey;
$request->header('x-amz-security-token' => $creds->sessionToken);
}
# Add the signature.
my $signer = AWS::Signature4->new(-access_key => $self->access_key,
-secret_key => $self->secret_key);
$signer->sign($request);
my $response = $self->ua->request($request);
return Amazon::SES::Response->new(response => $response,
action => $action );
}
multi method send(MIME::Entity $message) {
$self->send_mime($message);
}
multi method send(Str :$from,
Str :$body?,
Str :$body_html?,
Str :$to,
Str :$subject?,
Str :$charset = "UTF-8",
Str :$return_path?,
) {
$to = [$to] unless ref($to);
defined($body) || defined($body_html) || die("No body specified");
my %call_args = (
'Message.Subject.Data' => $subject,
'Message.Subject.Charset' => $charset,
'Source' => $from
);
if (defined($body)) {
$call_args{'Message.Body.Text.Data'} = $body;
$call_args{'Message.Body.Text.Charset'} = $charset;
( run in 0.930 second using v1.01-cache-2.11-cpan-437f7b0c052 )