MIME::Lite::Generator - generate email created with MIME::Lite chunk by chunk, in memory-efficient way


        use MIME::Lite;
        use MIME::Lite::Generator;
        my $msg = MIME::Lite->new(
                From    => '',
                To      => '',
                Subject => 'This is message with big attachment',
                Type    => 'multipart/mixed'
        $msg->attach(Type => 'TEXT', Data => 'See my video in attachment');
        $msg->attach(Path => '/home/kate/hot-video.1gb.mpg', Disposition => 'attachment', Encoding => 'base64');
        # MIME::Lite is efficient enough, file is not readed into memory
        # And now generate our email chunk by chunk
        # without reading whole file into memory
        my $msg_generator = MIME::Lite::Generator->new($msg);
        while (my $str_ref = $msg_generator->get()) {
                print $$str_ref;


MIME::Lite is a good tool to generate emails. It efficiently works with attachments without reading whole file into memory. But the only way to get generated email in memory-efficient way is to call print method. print is good enough to write content to the files or other blocking handles. But what if we want to write content to non-blocking socket? print will fail when socket will become non-writable. Or we may want to write inside some event loop. MIME::Lite::Generator fixes this problem. Now we can generate email chunk by chunk in small portions (< 4 kb each) and get result as a string.


new($msg, $is_smtp=0)

Constructs new MIME::Lite::Generator object. $msg is MIME::Lite object. For $is_smtp description see MIME::Lite.


Gets next chunk of the email and returns it as a reference to a string. Each chunk has size less than 4 kb. If there is no more data available it will return undef.




Oleg G, <>


This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself