| eZ publish Enterprise Component: Mail, Design |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Introduction |
| ============ |
| |
| Purpose of Mail package |
| ----------------------- |
| The purpose of the Mail package is to create and send mail. It must |
| support the at least the most common mail functions. |
| |
| Current implementation |
| ---------------------- |
| |
| Currrently Mail functionality is implemented in the class |
| eZMail and the transportclasses eZSMTPTransport and eZSsendmailTransport. |
| |
| Requirements |
| ============= |
| It must support sending mail using |
| |
| - the default PHP MTA. |
| - SMTP |
| |
| The composer must support the following |
| - Plain text mail sending |
| - HTML mail sending (with images) |
| - Alternative mails (text and HTML parts) |
| - Attachments (images/video and other binary data) |
| |
| The implementation must conform to the following specifications: |
| |
| Mime |
| http://www.faqs.org/rfcs/rfc2045.html |
| http://www.faqs.org/rfcs/rfc2046.html |
| http://www.faqs.org/rfcs/rfc2047.html |
| http://www.faqs.org/rfcs/rfc2048.html |
| http://www.faqs.org/rfcs/rfc2049.html |
| |
| Mime multipart |
| http://www.faqs.org/rfcs/rfc2387.html |
| |
| Mime encapsulation (HTML mail) |
| http://www.faqs.org/rfcs/rfc2557.html |
| |
| Content-Disposition field |
| http://www.faqs.org/rfcs/rfc2183.html |
| |
| Mail |
| http://www.faqs.org/rfcs/rfc822.html |
| http://www.faqs.org/rfcs/rfc2822.html |
| |
| It must be possible to later extend the model so it can also parse |
| and read mail. |
| |
| Design |
| ====== |
| |
| The design is split into two parts. |
| |
| 1. The design of the mail itself |
| 2. The design of the mail transport |
| |
| |
| Mail Class design |
| ---------------------- |
| |
| The design of the mail itself is built around the MIME |
| specifications. This is to allow easy parsing of mail later. It also |
| allows the building of advanced MIME mail structures if needed. |
| |
| ezcMailPart |
| ezcMailPart is an abstract base class for all mail structures. It |
| holds one MIME part and is responsible for storing the headers for |
| a MIME part. The generate method uses the generateHeaders and |
| generateBody methods to build up the entire (sub) message. |
| |
| ezcMultipart |
| Base class for all multipart MIME types. |
| |
| ezcMailMultipartMixed |
| Handles multiparts of the type mixed. This is the most common |
| multipart which is used e.g for attachments. |
| |
| ezcMailMultipartAlternative |
| Handles multiparts of the type alternative. This is used for HTML |
| messages where you also want to support plain text mail clients. |
| |
| ezcMailMultipartRelated |
| Handles multiparts of the type related. This is used to connect |
| related parts to a main part e.g images in an HTML message. |
| |
| ezcMailTextPart |
| Handles text parts of a message. This class is not only used for |
| plain text but also for e.g HTML messages. |
| |
| ezcMailFilePart |
| Handles all file attachments. |
| |
| ezcMail |
| Base class for mail creation. This base class contains the basic |
| functionality needed to build e-mail. |
| |
| ezcMailComposer |
| Convinience class that can be used to create the most common e-mail |
| messages. This class handles the creation of the internal parts |
| internally. |
| |
| |
| Transport Class design |
| ---------------------- |
| |
| ezcMailTransport |
| Abstract interface for sending e-mail. |
| |
| ezcMailTransportMta |
| Implementation of the mail transport interface using the mail |
| function found in PHP. |
| |
| ezcMailTransportSmtp |
| Implementation of mail transport interface using SMTP to send mail. |