NAME Email::Queue - schedule email messages to be sent one by one at a later time. VERSION Version 0.01 SYNOPSIS use File::Queue; my $fq = File::Queue->new( path => '/tmp/emails', mkpath => 1 ); # Create a message my $message = Email::Simple->create(...); # Schedule the message 50 times (for the sake of the example) $fq->schedule($message) for ( 0 .. 49 ); # ... much later ... from another script .... # Process the scheduled messages while ( my $message = $fq->next ) { # sendmail is an imaginery sub that sends RFC2822 formatted emails. sendmail( $message->as_string ); } DESCRIPTION This module schedules email messages to be sent one by one at a later time. Your web application sends a lot of emails to your users for notifications, verification, updates or anything. Whether you use "sendmail" or "SMTP", your emails are sent slower and they become the bottleneck of your application. One possible solution is to use this module to write your emails to files and send them later one by one, perhaps from another script with lower process priority. You could even process the email queue using several concurrently working scripts and it will be OK because this module handles all file locking and queue management. This module does not provide the actual email sending functionality. It is up to the user of this module to decide what to use for sending emails. EMAIL FORMATS All emails must be a Email::Simple object. Please see the documentation for Email::Simple, to understand how to create emails. When an email is *scheduled*, it is dumped to a file in the specified "path" as plain text RFC2822 email message. When an email is loaded from a file it is converted back to an Email::Simple object. ATTRIBUTES The following attributes are available during object construction path Specifies the path where email files will be stores. The default is the current path. If the path is not writeable it will croak. mkpath If set to 1 it will try to create a the "path" unless the path already exists. ext Set the extension for the email files. The default value for this attribute is ".eml" prefix Set the prefix for the email files. The default value for this attribute is "msg" xlock Set the name of the email header which marks an email file as locked. The default value is "X-Lock". timeout Timeout in seconds to hold email files locked. If a mailer process locks an email file and does not send it within the specified time, the file will be unlocked and available for other mailer processes. The default value is 3600. grab_count Sets the number of messages that "next" will lock when called the very first time. The default value is 50. If set to 0, then "next" will lock all messages in the queue. # Only lock 2 messages at a time $fq->grab_count(2); $fq->next; # Lock 2 messages and return the first $fq->next; # Return the second locked message $fq->next; # Lock another 2 messages and return the first METHODS The following methods are available: schedule( $message ) Schedule a message. $message must be an Email::Simple instance. Returns the ID of the message, which is the filename used to save it. my $message = Email::Simple->new( ... ); my $message_id = $fq->schedule( $message ); count Returns the count of all scheduled messages. my $all_emails = $fq->count; next Returns the next scheduled message as an Email::Simple instance and immediately removes that message from the queue. Returns undef is there are no more messages in the queue. print "Processing " . $fq->count . " messages\n"; while ( my $message = $fq->next ) { # Do something with $message, # for example send $message->as_string via sendmail } print "All mail sent\n"; SEE ALSO Email::Simple AUTHOR minimalist, "" BUGS Bug reports and patches are welcome. Reports which include a failing Test::More style test are helpful and will receive priority. DEVELOPMENT The source code of this module is available on GitHub: LICENSE AND COPYRIGHT Copyright 2011 minimalist. This program is free software; you can redistribute it and/or modify it under the terms as perl itself.