The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Sietima::HeaderURI - annotated URI for list headers

VERSION

version 1.1.2

SYNOPSIS

  around list_addresses => sub($orig,$self) {
   return +{
    $self->$orig->%*,
    one => Sietima::HeaderURI->new({
      uri => 'http://foo/',
      comment => 'a thing',
    }),
    two => Sietima::HeaderURI->new_from_address(
     $self->owner,
     { subject => 'Hello' },
    ),
    three => Sietima::HeaderURI->new('http://some/url'),
    four => Sietima::HeaderURI->new('(comment) address@example.com'),
   };
  }

DESCRIPTION

This class pairs a URI with a comment, and knows how to render itself as a string that can be used in a list management header (see Sietima::Role::Headers).

ATTRIBUTES

All attributes are read-only.

uri

Required URI object, coercible from a string or a hashref (see Types::Uri for the details). This is the URI that users should follow to perform the action implied by the list management header.

comment

Optional string, will be added to the list management header as a comment (in parentheses).

METHODS

new

 Sietima::HeaderURI->new({
   uri => 'http://foo/', comment => 'a thing',
 });

 Sietima::HeaderURI->new(
  Email::Address->parse('(comment) address@example.com'),
 );

 Sietima::HeaderURI->new( '(comment) address@example.com' );

 Sietima::HeaderURI->new(
  URI->new('http://some/url'),
 );

 Sietima::HeaderURI->new( 'http://some/url' );

Objects of this class can be constructed in several ways.

You can pass a hashref with URI (or something that Types::Uri can coerce into a URI) and a comment string, as in the first example.

Or you can pass a single value that can be (or can be coerced into) either a Email::Address or a URI.

Email addresse became mailto: URIs, and the optional comment is preserved.

new_from_address

 Sietima::HeaderURI->new_from_address(
  $email_address,
  \%query,
 );

This constructor builds a complex mailto: URI with the query hash you provide. It's a shortcut for:

 my $uri = URI->new("mailto:$email_address");
 $uri->query_form(\%query);

Common query keys are subject and body. See RFC 6068 ("The 'mailto' URI Scheme") for details.

as_header_raw

  $mail->header_raw_set('List-Thing' => $headeruri->as_header_raw);

This method returns a string representation of the "URI" and "comment" in the format specified by RFC 2369 ("The Use of URLs as Meta-Syntax for Core Mail List Commands and their Transport through Message Header Fields").

For example:

 Sietima::HeaderURI->new({
   uri => 'http://foo/', comment => 'a thing',
 })->as_header_raw eq '<http://foo/> (a thing)';

 Sietima::HeaderURI->new( '(comment) address@example.com' )
 ->as_header_raw eq '<mailto:address@example.com> (comment)';

 Sietima::HeaderURI->new( 'http://some/url' )
 ->as_header_raw eq '<http://some/url>';

Notice that, since the list management headers are structured, they should always be set with header_raw_set.

AUTHOR

Gianni Ceccarelli <dakkar@thenautilus.net>

COPYRIGHT AND LICENSE

This software is copyright (c) 2023 by Gianni Ceccarelli <dakkar@thenautilus.net>.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.