Skip to end of metadata
Go to start of metadata

<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[

<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[

Zend Framework: Zend_Mail_Transport_Queue Component Proposal

Proposed Component Name Zend_Mail_Transport_Queue
Developer Notes
Revision 0.1 - 1 October 2007: Initial proposal. (wiki revision: 4)

Table of Contents

1. Overview

Zend_Mail_Transport_Queue is designed to manage the delivery of a large volume of mail. It provides a number of backends by which to store the mail and then allows deferred delivery from the storage container using concrete transport methods from a separate script.

2. References

3. Component Requirements, Constraints, and Acceptance Criteria

  • This component will provide an interface to allow the creation of multiple backends.
  • This component will not send mail after a developer-specified amount of retries.
  • This component will allow the developer to pass any valid transport component to re-send mail.
  • This component will provide a means for passing log instances.

4. Dependencies on Other Framework Components

  • Zend_Mail
  • Zend_Mail_Transport_Abstract

5. Theory of Operation

This transport type replaces an existing SMTP or Sendmail transport instance. A concrete storage adapter is instantiated (e.g. Zend_Mail_Transport_Queue_Db or Zend_Mail_Transport_Queue_File) and then used as the transport to dispatch mail in the usual manner.

A secondary script (run as a cron job, scheduled task or as a trigger during another script's execution) will then access the transport's static process method. During this time mail is processed and directed to a specified transport (e.g. SMTP or Sendmail) and sent as normal. Processing will be limited to an amount configurable by the developer. If a mail instance cannot be sent (i.e. throws a Zend_Mail_Transport_Exception or Zend_Mail_Protocol_Exception exception) the mail will be requeued for a specified amount of retries (default is 10).

When mail is processed (success or failure) Zend_Mail_Transport_Queue will also log the attempt if a Zend_Log adapter is made available. The content and format of the log message is also developer-configurable.

6. Milestones / Tasks

  • Milestone 1: design notes will be published here
  • Milestone 2: Working prototype checked into the incubator supporting use cases #1, #2, ...
  • Milestone 3: Working prototype checked into the incubator supporting use cases #3 and #4.
  • Milestone 4: Unit tests exist, work, and are checked into SVN.
  • Milestone 5: Initial documentation exists.

7. Class Index

  • Zend_Mail_Transport_Queue_Interface
  • Zend_Mail_Transport_Queue_Abstract
  • Zend_Mail_Transport_Queue_Db
  • Zend_Mail_Transport_Queue_File

8. Use Cases

9. Class Skeletons



Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Jun 02, 2008

    <ac:macro ac:name="note"><ac:parameter ac:name="title">Zend Comments</ac:parameter><ac:rich-text-body>
    <p>This proposal has been accepted for development in the standard incubator as-is.</p></ac:rich-text-body></ac:macro>

  2. Oct 14, 2008

    <p>Very nice! Exactly the thing i was searching for. Will it be provided with ZF 1.7?<br />
    Kind regards, Dennis.</p>

  3. Oct 26, 2008

    <p>Great idea!</p>

    <p>Perhaps this should be a subclass to a Zend_Queue class, or simply a Zend_Queue where this functionality easily can be achieved.</p>

    <p>Queues could probably be useful for other things such as file manipulation, PDF creation, and others.</p>

    <p>Just a thought.</p>

  4. Jan 25, 2009

    <p>Wow... A few weeks ago I tried to realize the same thing as this component will do.</p>

    <p>Is there already working code in svn? Could not find it.</p>

  5. Feb 25, 2009

    <p>That is really great!!! <br />
    Probably only thing that is missing is to implement a mail priority feature in the queue.<br />
    IMHO, there should be a feature that will allow more important mails to be send firstly in a large queues. </p>

  6. Mar 18, 2009

    <p>This proposal hasn't been worked on in the last 6 months. Archiving for now.</p>