Installing IMAP extension for PHP on Mountain Lion

Based on Dao Hoang Son’s tutorial (itself based on Dan Spencer’s Lion tutorial), as well as a few corrections of my own, I came up with the following script. It fetches and installs University of Washington’s IMAP library, then the PCRE – Perl Compatible Regular Expressions library, and finally the PHP IMAP extension itself.

Please study the script yourself before running it, or run it line by line. It performs no error checking, meaning it might totally wreck your machine — and I’m not responsible if it does. Keep a Time Machine backup around and unplugged from the computer, in case it does.

The script wasn’t yet tested in its complete form; it’s an approximate transcript of commands I ran in shell. But since I’ll keep it around in case I ever need to re-run it, I’m fairly certain it works.

UPDATE December 24th 2012 – Merry Christmas! I’ve applied corrections based on Mehmet’s comment. He also comments you need to install autoconf before running the script (so phpize can work). I already had it installed.

Filesizes for stuff I downloaded: 1.990.304 – imap-2007f.tar.gz, 1.539.766 – pcre-8.20.tar.gz, 12.926.535 – PHP-5.3.15.tar.gz


mkdir "$BUILDDIR"
echo " "
echo " "
wget -c
rm -rf imap-2007f
tar xvvfz imap-2007f.tar.gz
cd imap-2007f
make osx EXTRACFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"
sudo mkdir -p /usr/local/imap-2007f/include
sudo cp c-client/*.h /usr/local/imap-2007f/include
sudo mkdir -p /usr/local/imap-2007f/lib
sudo cp c-client/c-client.a /usr/local/imap-2007f/lib/libc-client.a

echo " "
echo " "
wget ""
rm -rf pcre-8.20
tar xvvfz pcre-8.20.tar.gz
cd pcre-8.20
./configure --prefix=/usr/local
sudo make install

echo " "
echo " "
PHPVERSION=`php --version|head -n1|cut -f 2 -d ' '`
##git clone -b "PHP-$PHPVERSION" php-src
wget --no-check-certificate -c -O PHP-5.3.15.tar.gz
tar xvvfz PHP-5.3.15.tar.gz
cd `ls |grep php-php-src-|head -n1`
cd ext/imap
./configure --with-imap=/usr/local/imap-2007f --with-kerberos --with-imap-ssl
sudo cp modules/ /usr/lib/php/extensions/no-debug-non-zts-20090626/

Tip me with Bitcoin on Coinbase (button below) or directly to: 1ASA9q5VQUxPZvit8X2AP4JYzPcSDk7dFV

12 thoughts on “Installing IMAP extension for PHP on Mountain Lion

  1. Mehmet Avcioglu

    Mistakes on the script:
    mkdir lines also need sudo
    wget PHP-5.3.15 line has the “tar.gz” on a different line, needs to be appended at the end as “PHP-5.3.15.tar.gz”
    Mountain Lion also needs autoconf installed before phpize can run

  2. Joel

    I have PHP 5.4.9 – after I did this I always see this error:

    PHP Warning: PHP Startup: imap: Unable to initialize module
    Module compiled with module API=20090626
    PHP compiled with module API=20100525

    Is there a newer IMAP version available? I have searched and cannot find it.

  3. Dragos

    Great script! Thank you very much! It really helped me.
    I would even add some more links for the next visitors of this page.

    wget is also not a standard on Mountain Lion anymore.
    There could be a fallback solution with cURL:
    curl -O
    or one could install wget, really easy instructions here:

    For autoconf install instructions:

    One should not forget to add the new compiled extension in the php.ini and then restart apache (this is written in Dao Hoang Son’s article though, so anyone reading carefully this article should already know that :)

  4. Ivan Vučica Post author

    As a small comment: the reason why I didn’t write about install instructions for wget or autoconf is because I already use MacPorts and, lately, Homebrew.

    Homebrew’s homepage

    You can install Homebrew using the one-liner shown on that page (which should be all that you need on a machine that already has Xcode with command line tools):

    ruby -e "$(curl -fsSL"

    I simply do stuff like brew install wget. (I’m lying, because I actually installed wget a few years ago with MacPorts. But Brew’s bound to have wget, too.)

    See more about installing Homebrew.

  5. Stewart Adam

    I tried this on 10.8.3 and got several linker errors (ld: symbol(s) not found for architecture x86_64 after complaints about various missing symbols like _SSL_pending, _SSL_CTX_set_tmp_rsa_callback, _ERR_load_crypto_strings, _BIO_free, etc) and just wanted to say your script works perfectly, but it needed one minor modification in my case to add the extra linker flags “-lssl -lcrypto”. I have compiled the details here:

  6. brantwynn

    Looked this over, ran it, and it worked for me.

    I already had wget and autoconf ready to go.

    After running the script, I needed to follow the last two steps from Dao Hoang Son’s blog:

    1. add the extension to php.ini

    2. restarted apache.
    sudo apachectl restart

    Then it was good…

    Thanks, ivucica!

  7. Fernando Antunes

    Sorry my english, efetuei all the steps, when I found the last line:

    sudo cp modules / / usr/lib/php/extensions/no-debug-non-zts-20090626 /

    does not find the file what might have happened? wait, thanks

    1. tedivm

      This was address further up. Simply swap out-

      ./configure --with-imap=/usr/local/imap-2007f --with-kerberos --with-imap-ssl


      LDFLAGS="-lssl -lcrypto" ./configure --with-imap=/usr/local/imap-2007f --with-kerberos --with-imap-ssl

  8. Robert

    I updated this script to make it more future proof. It creates a few directories that may not be there, it pulls in the php version dynamically, and it makes it pretty easy to update the versions of the other components. As a final addition it had some additional output to tell people how to clean up and what to add to their php.ini file to make it work.

    You can find the updated version on Github-

  9. Pingback: PHP IMAP Script | tedious ramblings

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


What is 4 + 10 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)