package Sietima::Role::SubjectTag; use Moo::Role; use Sietima::Policy; use Types::Standard qw(Str); use namespace::clean; # VERSION # ABSTRACT: add a tag to messages' subjects =head1 SYNOPSIS my $sietima = Sietima->with_traits('SubjectTag')->new({ %args, subject_tag => 'foo', }); =head1 DESCRIPTION A L<< C >> list with this role applied will prepend the given tag to every outgoing message's C header. =attr C Required string. This string, enclosed by square brackets, will be prepended to the C header of outgoing messages. For example, the code in the L would cause an incoming message with subject "new stuff" to be sent out with subject "[foo] new stuff". If the incoming message's C header already contains the tag, the header will not be modified. This prevents getting subjects like "[foo] Re: [foo] Re: [foo] new stuff". =cut has subject_tag => ( is => 'ro', isa => Str, required => 1, ); =modif C The subject of the incoming email is modified to add the tag (unless it's already there). The email is then processed normally. =cut around munge_mail => sub ($orig,$self,$mail) { my $tag = '['.$self->subject_tag.']'; my $subject = $mail->header_str('Subject'); unless ($subject =~ m{\Q$tag\E}) { $mail->header_str_set( Subject => "$tag $subject", ); } return $self->$orig($mail); }; 1;