tags:

views:

120

answers:

3

I'm looking for a simple (OO?) approach to email creation and sending.

Something like

$e = Email->new(to => "test <[email protected]>", from => "from <[email protected]>");
$e->plain_text($plain_version);
$e->html($html_version);
$e->attach_file($some_file_object);

I've found Email::MIME::CreateHTML, which looks great in almost every way, except that it does not seem to support file attachments.

Also, I'm considering writing these emails to a database and having a cronjob send them at a later date. This means that I would need a $e->as_text() sub to return the entire email, including attachments, as raw text which I could stuff into the db. And so I would then need a way of sending the raw emails - what would be a good way of achieving this?

Many thanks

+2  A: 

You might check out perl MIME::Lite.

You can get the message as a string to save into a database:

### Get entire message as a string:
$str = $msg->as_string;
WhirlWind
I think that might actually be perfect! I knew there would be one somewhere! Thanks.
aidan
It's not necessary to introduce an altogether different MIME mail library.
daxim
+4  A: 

You have to read the documentation more carefully, then two of your three questions would be moot.

From the synopsis of Email::MIME::CreateHTML:

my $email = Email::MIME->create_html(

You obviously get an Email::MIME object. See methods parts_set and parts_set for so called attachments.

Email::MIME is a subclass of Email::Simple. See method as_string for serialising the object to text.

See Email::Sender for sending mail.

daxim
+1  A: 

Email::Stuff is a nice wrapper for Email::MIME. You don't need to care about the MIME structure of the mail, the module does it for you.

Email::Stuff->from     ('[email protected]'                      )
            ->to       ('[email protected]'              )
            ->bcc      ('[email protected]'                )
            ->text_body($body                              )
            ->attach   (io('dead_bunbun_faked.gif')->all,
                        filename => 'dead_bunbun_proof.gif')
            ->send;

It also has as_string.

Thomas Kappler
Thanks for this. Email::Stuff looks ideal
aidan