我们在网站开发中实现发送邮件经常遇到,也有很多比较成熟的解决方案,那么接收邮件功能呢?這个功能需求开发虽然比较少遇见,也很少客户咨询,但是能否实现呢?实际是可以的。
你看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发件人:/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邮件的功能,截图如下