我們在網站開發(fā)中實現發(fā)送郵件經常遇到,也有很多比較成熟的解決方案,那么接收郵件功能呢?這個功能需求開發(fā)雖然比較少遇見,也很少客戶咨詢,但是能否實現呢?實際是可以的。
你看Foxmail客戶端也能接收郵件,說明郵件系統都有這種服務,支持第三方通過一定的認證方式后,可以把郵件信息給第三方。
具體如何實現呢?下面中企動力給大家介紹PHP如何獲取QQ郵件。
獲取郵件需要準備的基本資料是,郵箱的賬號和獲取密碼,然后設置郵箱開啟imap功能,需要注意的是:獲取密碼是imap功能設置提供的密碼,不是登陸密碼。
郵箱設置方法如下:
進入郵箱-頂部菜單-【設置】-【賬戶】選項卡-【POP3/IMAP/TP/Exchange/CardD/CalD服務】項,如下截圖,開啟IMAP服務,通過手機驗證碼認證后會給你一個獲取密碼。
有了賬號名和獲取密碼后,就是程序編寫和服務器的問題,正常情況下PHP沒有安裝IMAP擴展,所以大部分服務器需要開啟IMAP擴展,
如果是Windows服務器,修改PHP.ini文件,把imap擴展前面的分號去掉,然后重啟PHP服務即可。
如果是Linux服務器則稍微麻煩一些,這里我遇到的坑是WDCP安裝的PHP版本沒有帶imap擴展文件,需要自己下載,然后上傳到對應文件夾后,才能安裝。
安裝流程如下
首先,用Putty等工具進入linux
進入php源碼包ext目錄,再進入imap目錄
cd/www/wdlinux/apache_php-
5.
5.38/include/php/ext/imap/
/www/wdlinux/apache_php-
5.
5.38/bin/phpize
./configure--with-php-config=/www/wdlinux/apache_php-
5.
5.38/bin/php-config--with-kerberos--with-imap--with-imap-ssl--with-libdir=lib64
make
makeinstall
如果出錯安裝yum-yinstalllibc-client-devel
修改php.ini
[imap]
extension_dir=/www/wdlinux/apache_php-
5.
5.38/lib/php/extensions/no-debug-non-zts-20121212
extension=imap.so
最后重啟php即可
相關讀取郵件的PHP代碼如下:
?ph
ini_set(display_errors,On);
error_reporting(E_ERROR);
header(Content-type:text/html;charset=utf-8);
$mailServer='imap.qq.com';//IMAPserveraddress
$mailLink={{$mailServer}:143}INBOX;//143istheportwhennotSSL
$mailUser=$_GET['email'];//emailaddress
$mailPass=$_GET['pwd'];//clientauthorizationcode
$mail_i=intval($_GET['index']);
if($mailUser!=''$mailPass!=''){
$Email=newEmail();
$conn=$Email-mailConnect($mailServer,143,$mailUser,$mailPass);
}
functiondecode_title($str){
$arr=imap_mime_header_decode($str);
return$arr[0]-text;
}
functiondecode_attach($str){
$arr=imap_mime_header_decode($str);
returniconv($arr[0]-charset,utf-8,$arr[0]-text);
}
???
!doctypehtml
htmllang=zh-CN
head
metacharset=utf-8
metahttp-equiv=X-UA-Compatiblecontent=IE=edge
metaname=viewportcontent=width=device-width,initial-scale=1
!--上述3個meta標簽*必須*放在最前面,任何其他內容都*必須*跟隨其后!--
title中企動力-接收郵件測試/title
/head
body
pstyle=padding:40px;width:400px;
formmethod=getaction=
pclass=input-grou
span class=input-group-addonid=basic-addon1郵箱賬號:/span
inputtype=textclass=form-controlvalue=?phpecho$mailUser;?name=emailplaceholder=輸入QQ郵箱賬號:aria-describedby=basic-addon1
/
pclass=input-grou
span class=input-group-addonid=basic-addon1郵箱密碼:/span
inputtype=textclass=form-controlvalue=?phpecho$mailPass;?name=pwdplaceholder=QQ郵箱密碼:aria-describedby=basic-addon1
/
pclass=input-grou
span class=input-group-addonid=basic-addon1郵件開始數:/span
inputtype=numberclass=form-controlvalue=?phpecho$mail_i;?name=indexplaceholder=郵件開始數value=1aria-describedby=basic-addon1
/
buttontype=submitclass=btnbtn-default獲取郵件/button
inputtype=hiddenname=actionvalue=get/
/form
郵箱密碼是郵箱設置的imap密碼,一次獲取6封郵件
/
???ph
if($conn){
echo'總郵件數:'.$Email-mailTotalCount().'br';
for($i=$mail_i;$i$mail_i+6;$i++){
$mailHeader=$Email-mailHeader($i);
$attach_list=$Email-getAttach($i,attach/);
$subject=decode_title($mailHeader['subject']);
//print_r($mailHeader);
echo'tableborder=1trtdb日期:/b'.date('Y-m-dH:i:s',strtotime($mailHeader['date'])).'/td/trtrtdb發(fā)件人:/b'.$mailHeader['from'].'/td/trtrtdb標題:/b'.$subject.'/td/tr';
echo'trtd正文:/td/trtrtd'.$Email-getBody($i).'/td/trtrtd是否已讀:'.$Email-mailRead($i).'ID:'.$mailHeader['id'].'/td/tr';
echo'trtd附件:';
foreach($attach_listas$attach){
echo'ahref=attach/'.decode_attach($attach).'target=_blank'.decode_attach($attach).'/a';
}
if(count($attach_list)==0){
echo'無附件';
}
echo'/td/tr';
echo'/table';
}
}
就這樣實現了PHP獲取QQ郵件的功能,截圖如下