summaryrefslogtreecommitdiff
path: root/lib/Config/ClawsMail/Account.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Config/ClawsMail/Account.pm')
-rw-r--r--lib/Config/ClawsMail/Account.pm80
1 files changed, 80 insertions, 0 deletions
diff --git a/lib/Config/ClawsMail/Account.pm b/lib/Config/ClawsMail/Account.pm
new file mode 100644
index 0000000..c00bad4
--- /dev/null
+++ b/lib/Config/ClawsMail/Account.pm
@@ -0,0 +1,80 @@
+package Config::ClawsMail::Account;
+use Moo;
+use 5.020;
+use Types::Standard qw(Str InstanceOf);
+use Config::ClawsMail::Server;
+use namespace::clean;
+
+has [qw(account_name name address)] => (
+ is => 'ro',
+ required => 1,
+ isa => Str,
+);
+
+has [qw(imap smtp)] => (
+ is => 'ro',
+ isa => InstanceOf['Config::ClawsMail::Server'],
+);
+
+my @ssl_string=qw(no ssl starttls);
+sub new_from_config {
+ my ($class,$config) = @_;
+ die "unhandled protocol" unless $config->{protocol} eq '3';
+
+ my $imap_server = Config::ClawsMail::Server->new({
+ host => $config->{receive_server},
+ port => (
+ $config->{set_imapport}
+ ? $config->{imap_port}
+ : $config->{ssl_imap} == 1
+ ? scalar getservbyname('imaps','tcp')
+ : scalar getservbyname('imap','tcp')
+ ),
+ ssl => $ssl_string[$config->{ssl_imap}],
+ %{$config}{qw(user_id password)},
+ });
+
+ my $smtp_server = Config::ClawsMail::Server->new({
+ host => $config->{smtp_server}||$config->{receive_server},
+ port => (
+ $config->{set_smtpport}
+ ? $config->{smtp_port}
+ : $config->{ssl_smtp} == 1
+ ? scalar getservbyname('smtps','tcp')
+ : scalar getservbyname('smtp','tcp')
+ ),
+ ssl => $ssl_string[$config->{ssl_smtp}],
+ ( $config->{use_smtp_auth} ? (
+ user_id => $config->{smtp_user_id} || $config->{user_id},
+ password => (
+ $config->{smtp_password} eq '!'
+ ? $config->{password}
+ : $config->{smtp_password}
+ ),
+ ) : () ),
+ });
+
+ return $class->new({
+ %{$config}{qw(account_name name address)},
+ imap => $imap_server,
+ smtp => $smtp_server,
+ });
+}
+
+sub email_transport {
+ my ($self) = @_;
+
+ require Email::Sender::Transport::SMTPS;
+ my $smtp = $self->smtp;
+ return Email::Sender::Transport::SMTPS->new(
+ host => $smtp->host,
+ port => $smtp->port,
+ ssl => $smtp->ssl,
+ ( $smtp->user_id ? (
+ sasl_username => $smtp->user_id,
+ sasl_password => $smtp->cleartext_password,
+ ) : () )
+ );
+}
+
+1;