package Config::ClawsMail::Account; use Moo; # VERSION use 5.020; use Types::Standard qw(Str InstanceOf); use Config::ClawsMail::Server; use namespace::clean; # ABSTRACT: Claws-Mail account 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,$password) = @_; die "unhandled protocol" unless $config->{protocol} eq '1'; 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 => $password->{recv}, }); 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 => $password->{send} || $password->{recv}, ) : () ), }); 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;