Skip to content
Derek Jones edited this page Jul 5, 2012 · 19 revisions

IMAP functionality in CodeIgniter

The point of this article is to develop some kind of IMAP functionality to CI, to connect to a mail server through IMAP, POP3 or NNTP.

Also to make a Class with the most used functions in building a webmail service.

EDIT... (by sophistry) A full wrapper class can be found at this page: http://codeigniter.com/wiki/imap_pop_class/

<?php

    /* Controller: Mail */

    class Mail extends Controller {
        

        // IMAP/POP3 (mail server) LOGIN
        var $imap_server    = 'mail.example.org';
        var $imap_user        = 'user@example.org';
        var $imap_pass        = 'password';

    
        // Constuctor
        
        function __construct() {

            parent::Controller();
            
            $this->load->library('Imap');
                        
        }

        // index
        
        function index() {
                    
            $inbox = $this->imap->cimap_open($this->imap_server, 'INBOX', $this->imap_user, $this->imap_pass) or die(imap_last_error());
    
            $data_array['totalmsg']    = $this->imap->cimap_num_msg($inbox);
            $data_array['quota']    = $this->imap->cimap_get_quota($inbox);
            
            $this->load->view('mail_view', $data_array);    
        }
    }

?>
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

    /* Library Class: Imap */

    class Imap {
        

        // Open IMAP connection
        
        function cimap_open($host, $mailbox, $username, $password)
        {
            return imap_open('{'.$host.':143}'.$mailbox, $username, $password);
        }
        
        // Find number of msg in mailbox
        
        function cimap_num_msg($imap_connection)
        {
            return imap_num_msg($imap_connection);
        }
        
        // Find disk quota amount
        
        function cimap_get_quota($imap_connection)
        {
            $storage = $quota['STORAGE']= imap_get_quotaroot($imap_connection, "INBOX");
            
            function kilobyte($filesize)
            {
                return round($filesize / 1024, 2) . ' Mb';
            }
            
            return kilobyte($storage['usage']) . ' / ' . kilobyte($storage['limit']) . ' (' . round($storage['usage'] / $storage['limit'] * 100, 2) . '%)';
        }    

    }

?>

/* mail_view */

Will return something like:

Total messages: 13

Quota: 8.27 Mb / 10 Mb (82.67%)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="no" lang="no"&gt;
&lt;head&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
    &lt;meta name="robots" content="index,follow" /&gt;
    &lt;meta name="description" content="" /&gt;
    &lt;meta name="keywords" content="" /&gt;

    &lt;title&gt;Title&lt;/title&gt;
    
&lt;/head&gt;

&lt;body&gt;

    <p>Total messages: &lt;?=$totalmsg?&gt;</p>
    <p>Quota: &lt;?=$quota?&gt;</p>

&lt;/body&gt;
&lt;/html&gt;

Category:Libraries::Email

Clone this wiki locally