在PHP開發應用程序過程中,常常需要使用到電子郵件功能,不僅包括發送郵件,還包括接收郵件和郵件處理等。imap擴展就提供了PHP進行郵件處理的能力,可以實現收取郵件、查看郵件、下載附件等功能。但是,在PHP中啟用這個功能模塊,需要做到以下幾步。
一、首先,需要確認服務器上是否已經安裝了imap擴展??梢酝ㄟ^執行命令“php -m | grep imap”查看。
php -m | grep imap
如果命令行中出現了imap,則說明已經安裝,否則則需要進行安裝操作。
二、進入php的官方網站,下載imap拓展zip包,并解壓。
wget http://pecl.php.net/get/imap-1.5.0.tgz tar zxvf imap-1.5.0.tgz cd imap-1.5.0
三、編譯imap擴展,并安裝到PHP中。
/usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-kerberos --with-imap-ssl make make install
如果在編譯過程中遇到錯誤,可以通過增加ppp-dev庫解決。如Ubuntu用戶:
sudo apt-get install libkrb5-dev libc-client2007e-dev libmcrypt-dev
四、重新啟動php。
/etc/init.d/php-fpm restart
五、檢測是否安裝成功。
php -m | grep imap
如果結果中還是沒找到imap,那說明還有些問題沒處理,請去相關的文檔看看。
接下來,我們將通過以下兩個主要的案例來說明imap在php中的使用。
1. 獲取郵箱中的郵件列表
<?php $server = '{imap.qq.com:993/imap/ssl/novalidate-cert}'; $username = 'yourusername@qq.com'; $password = '*****'; $mbox = imap_open($server,$username,$password) or die('Could not connect: '.imap_last_error()); echo imap_num_msg($mbox); $mc = imap_check($mbox); if ($mc) { $from = $mc->Nmsgs; $to = $from-8; $i = $from-1; for ($i;$i>=$to;$i--) { $header = imap_header($mbox,$i); $body = imap_fetchbody($mbox,$i,1); if (strcasecmp($header->subject, '煙花易冷') == 0) { //打印此郵件的正文 print_r($body); } } } imap_close($mbox);
在上述代碼中,我們先是連接了郵箱,獲取到有效的郵箱操作句柄。使用$mc->Nmsgs可以獲取該郵箱中郵件的總數。使用imap_header和imap_fetchbody,可以獲取郵件中的頭信息和正文內容??梢愿鶕]件的主題、發件人、收件人等信息進行篩選。
2. 發送郵件
<?php $to = '收件人郵箱'; $subject = '郵件主題'; $message = '郵件正文'; $headers = 'From: 發件人郵箱' . "\r\n" . 'Reply-To: 發件人郵箱' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers);
在上述代碼中,使用mail函數,非常簡潔明快較為方便。如果不需要處理中文,那么沒有問題。但假設我們需要在郵件正文中添加一些中文信息,而直接使用mail則不會正確的處理中文編碼。
有時候,從郵件中提取的信息中包含中文的時候,也需要特別處理。比如正文中包含了中文編碼,則需要使用消息顯式規定的編碼方式,這可以通過修改mail() 的Headers來實現,如下:
<?php $to = '收件人郵箱'; $subject = '郵件主題'; $message = '郵件正文'; $headers.= "Content-type:text/html;charset=utf-8" . "\r\n"; $headers.= 'From: 發件人郵箱' . "\r\n" . 'Reply-To: 發件人郵箱' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers);
以上是PHP中使用imap模塊的安裝和案例說明,可以根據實際需要進行使用和修改。