From f25286a60b8ad26994c5c88c60b7c0ec998ae803 Mon Sep 17 00:00:00 2001 From: dakkar Date: Tue, 26 Jan 2016 18:12:37 +0000 Subject: first commit, it works already --- lib/Config/ClawsMail/Account.pm | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 lib/Config/ClawsMail/Account.pm (limited to 'lib/Config/ClawsMail/Account.pm') 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; -- cgit v1.2.3