package Config::ClawsMail::Account; use v5.26; use Moo; # VERSION 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,$args) = @_; my $config = $args->{account_config}; return unless $config->{protocol} eq '1'; my $section = $args->{account_section}; my $password_store = $args->{password_store}; 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_store->password_for($section,'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_store->password_for($section,'send') || $password_store->password_for($section,'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->password, ) : () ) ); } 1;