develooper Front page | perl.pep | Postings from August 2016

Email::Simple & Email::MIME with Email::Address::XS

From:
pali
Date:
August 21, 2016 21:52
Subject:
Email::Simple & Email::MIME with Email::Address::XS
Message ID:
201608212352.13871@pali
Hi!

Now after long discussion which started 3 months ago and not finished 
yet about Email::Address::XS support in Email::MIME I started to writing 
code... I want to have something working, usable and not never-ending 
discussion.

I implemented new module Email::Address::List::XS which provides object 
representation of list of Email::Address::XS objects with parse() and 
format() methods.

Next I added support for Email::Address::List::XS objects into 
Email::Simple and Email::MIME modules.

All source code is available at:
https://github.com/pali/Email-Address-XS/tree/list
https://github.com/rjbs/Email-Simple/compare/master...pali:master
https://github.com/rjbs/Email-MIME/compare/master...pali:master

Example of usage:

my $email = Email::Simple->create(
	header => [
		From => Email::Address::XS->new('Name' => 'user@host'),
		To => '"My Name" <user2@example.com>',
	],
);
my $addr1 = Email::Address::XS->new(undef, 'address1@example.com');
my $addr2 = Email::Address::XS->new(undef, 'address2@example.com');
my $addrlist = Email::Address::List::XS->new($addr1, $addr2);
$email->header_raw_set(Cc => $addrlist);

Email::Simple can accept any object which has format() method. Both 
modules Email::Address::List::XS and Email::Address::XS provides them.

Email::Simple contains new method header_addrlist_raw() which returns 
Email::Address::List::XS object for specified header (it does not matter 
if header value was passed as object or as string).

my $addrlist_to = $email->header_addrlist_raw('To');
my $phrase = $addrlist_to->first_address()->phrase();

(Now $phrase contains string 'My Name').

Next situation with Email::MIME is a bit complicated as module 
Email::MIME is responsible for doing MIME encoding/decoding. And because 
$address needs to be specially MIME encoded and decoded it is not 
possible to accept arbitrary object with format() method as in 
Email::Simple module. Email::MIME needs to know how to each object 
correctly encode and decode...

So for Email::MIME I added object support only for Email::Address::XS 
and Email::Address::List::XS modules. I do not expect that there will be 
needed support for anything else...

Usage is same as for Email::Simple, just in create() method is used 
"header_str" argument and for retrieving Email::Address::List::XS object 
is used header_addrlist() method. Basically same as work with strings 
(raw methods have _raw suffix). Passing objects to _raw methods just 
cause that objects will not be MIME encoded.

Look at code and tell me if this Email::Address::List::XS module is 
usable and if patches for Email::Simple and Email::MIME are acceptable. 
If yes, I can clean up it, write some tests and release whole 
Email::Address::XS module to CPAN...



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About