Imap Backend Propsal
| From: | Richard York | Date: | Thu, 29 Jan 2004 07:44:45 +0000 |
| Subject: | Imap Backend Propsal | ||
| Groups: | php.pear.dev | ||
| Request: | Send a blank email to pear-dev+get-25323@lists.php.net to get a copy of this message | ||
Hello,
First let me announce that I am pretty new to PEAR, but have been programming in PHP for about
three years or so.
I have a package proposal for inclusion in PEAR that deals with creating an interface that
simplifies use of certain IMAP (c-client) functions. I came about this decision after spending
months attempting to perfect a web-based email program which relies on this functionality, namely
the parts that deal with parsing the structure of a multipart message using imap_fetchstructure, and
finding the correct part numbers to supply to the imap_fetchbody function.
I have a good deal of my package already put together and written for the PEAR standard.
It is attempting to accomplish..
1.) It parses the object returned by imap_fetchstructure to come up with a complete list of part
numbers, as well as other part information, file type, file size, encoding, etc. This information
is then used in a variety of ways. Another function looks at this information and determines which
part should be the top level default part to display.. it selects text/html over text/plain parts
when possible.
2.) Another member function may be used to return inline/attachment parts that relate directly to
the part being displayed. These are set up as member variables and may be accessed by the user to
create links to the attachment parts.
3.) Yet another member function deals with the headers, and again depending on which part is
currently being displayed, sets up member variables containing information parsed from imap header
functions.
4.) Another member function deals with selecting the correct message body to return from
imap_fetchbody, depending on whether an attachment has been selected, and whether that attachment is
an message/rfc822 part. The function also decodes the message part and returns the body.
All of these functions boil down to just a few things, the user supplies a message id, a link to the
imap resource stream, and the part id, via clicking an attachment or by the application selecting a
default part id.
This package is unique, in that I have not seen any examples tht deal with c-client specifically.
Although I realize that for portability purposes, many seeking to build a web-based mail client
typically seek a solution which is already available in the core PHP install.
I have other ideas for inclusion in the package as well,
First some utility functions,
A function that converts the plain text links in a message body to clickable hyperlinks, parses
forum code, like that used in PHPBB and Snitz, highlights PHP syntax, if any is present, and allows
for a style sheet to be set for a plain text message part.
My preliminary proposal is pretty simple though.. no bells and whistles just yet : )
Here are links to the code I've already completed:
http://www.smilingsouls.net/common_include/pear/imap/imap.mailbox.phps
AND inbox example:
http://www.smilingsouls.net/common_include/pear/imap/imap.inbox.phps
AND message viewer example:
http://www.smilingsouls.net/common_include/pear/imap/imap.message.phps
This code when supplied a pop3/imap mail account, username and password should show an example
inbox. Which demonstrates the simplified approach to creating an inbox and displaying a multipart
message.
This is the only line you should need to modify to test the code,
$msg =& new Mail_ImapMailbox(imap_open('{mail.yourhost.com:110/pop3/notls}INBOX',
'user', 'pass'));
Which appears in the latter two files at the top of each file.
There are at least one or two bugs that I am aware of and working on a fix for! One being in the
default part id picker.
So there you have it, it took about an hour or so to put together the inbox and message viewer
example, which are pretty bare, but show how powerful the imap backend can be in terms of parsing
multipart messages and simplifying the imap backend.
I am still working on documention! But the example scripts are very short and *should* be easy to
follow. I do promise thorough documentation! I did want to get some feedback from the PEAR group
before getting too deep in the project!
Thanks!
: )
Richard York
mailto:richy@smilingsouls.net
http://www.smilingsouls.net