全站搜索

网站系统实现接收邮件功能

网站开发 415

我们在网站开发中实现发送邮件经常遇到,也有很多比较成熟的解决方案,那么接收邮件功能呢?這个功能需求开发虽然比较少遇见,也很少客户咨询,但是能否实现呢?实际是可以的。

你看Foxmail客户端也能接收邮件,说明邮件系统都有这种服务,支持第三方通过一定的认证方式后,可以把邮件信息给第三方。

具体如何实现呢?下面方维网络给大家介绍PHP如何获取QQ邮件。

获取邮件需要准备的基本资料是,邮箱的账号和获取密码,然后设置邮箱开启imap功能,需要注意的是:获取密码是imap功能设置提供的密码,不是登陆密码。

邮箱设置方法如下:

进入邮箱-顶部菜单-【设置】 – 【账户】选项卡 – 【
POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务】项,如下截图,开启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
make install

如果出错 安装  yum -y install libc-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代码如下:

<?php
ini_set(“display_errors”, “On”);
error_reporting(E_ERROR);
header(“Content-type: text/html; charset=utf-8”);

$mailServer = ‘imap.qq.com’; //IMAP server address
$mailLink = “{{$mailServer}:143}INBOX”; // 143 is the port when not SSL
$mailUser = $_GET[’email’];  // email address
$mailPass = $_GET[‘pwd’];// client authorization code
$mail_i = intval($_GET[‘index’]);

if($mailUser != ” && $mailPass != ”) {
    $Email = new Email();
    $conn = $Email->mailConnect($mailServer, 143, $mailUser, $mailPass);
}

function decode_title($str) {
    $arr = imap_mime_header_decode($str);
    return $arr[0]->text;
}

function decode_attach($str) {
    $arr = imap_mime_header_decode($str);
    return iconv($arr[0]->charset, “utf-8”, $arr[0]->text);
}
?>

<!doctype html>
<html lang=”zh-CN”>
    <head>
        <meta charset=”utf-8″>
        <meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
        <meta name=”viewport” content=”width=device-width, initial-scale=1″>
        <!– 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! –>
        <title>方维网络-接收邮件测试</title>
    </head>
    <body>
        <div style=”padding:40px;width:400px;”>
            <form method=”get” action=””>
                <div class=”input-group”>
                    <span class=”input-group-addon” id=”basic-addon1″>邮箱账号:</span>
                    <input type=”text” class=”form-control” value=”<?php echo $mailUser;?>” name=”email” placeholder=”输入QQ邮箱账号:” aria-describedby=”basic-addon1″>
                </div>
                <div class=”input-group”>
                    <span class=”input-group-addon” id=”basic-addon1″>邮箱密码:</span>
                    <input type=”text” class=”form-control” value=”<?php echo $mailPass;?>” name=”pwd” placeholder=”QQ邮箱密码:” aria-describedby=”basic-addon1″>

                </div>
                <div class=”input-group”>
                    <span class=”input-group-addon” id=”basic-addon1″>邮件开始数:</span>
                    <input type=”number” class=”form-control” value=”<?php echo $mail_i;?>” name=”index” placeholder=”邮件开始数” value=”1″ aria-describedby=”basic-addon1″>

                </div>
                <button type=”submit” class=”btn btn-default”>获取邮件</button>
                <input type=”hidden” name=”action” value=”get” />
            </form>
            邮箱密码是邮箱设置的imap密码,一次获取6封邮件
        </div>
<?php
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 ‘<table border=1><tr><td><b>日期:</b>’ . date(‘Y-m-d H:i:s’, strtotime($mailHeader[‘date’])) . ‘</td></tr><tr><td><b>发件人:</b>’ . $mailHeader[‘from’] . ‘</td></tr><tr><td><b>标题:</b>’ . $subject . ‘</td></tr>’;
    echo ‘<tr><td>正文:</td></tr><tr><td>’ . $Email->getBody($i) . ‘</td></tr><tr><td>是否已读:’ . $Email->mailRead($i) . ‘  ID:’ . $mailHeader[‘id’] . ‘ </td></tr>’;
    echo ‘<tr><td>附件:’;
    foreach ($attach_list as $attach) {
        echo ‘<a href=”attach/’ . decode_attach($attach) . ‘” target=”_blank”>’ . decode_attach($attach) . ‘</a>’;
    }
    if (count($attach_list) == 0) {
        echo ‘无附件’;
    }
    echo ‘</td></tr>’;
    echo ‘</table>’;
}
}

就这样实现了PHP获取QQ邮件的功能,截图如下

上一篇: 下一篇:

相关推荐

  • 资本市场建站需求以及网站设计要点

    396

    很少有人关注到“资本市场”的建站需求。为什么呢?我们分析认为——这类公司似乎倾向于寻找大型的建站公司为其服务,中小建站公司自认为没有机会。但是,随着资本市场企业数量的增多,多数企业其实是需要网站的。资本市场内的建站机会?资本市场中,有哪些企业呢?哪些...

    查看全文
  • 网页设计师提升网站设计技能的若干技巧

    392

    网页设计师有时候会陷入到一种“停滞不前”的状态。此时,不是承接更多的项目,或许是时候停下来,学习一些新的设计技能的时候了。 如下是若干可以提升网页设计师技能的办法,可供参考。   腾出时间进行培训和学习学习任何技能都没有捷径。如果你想让你的网站设...

    查看全文
  • 建站、开发小程序前先自问:会浪费吗?

    383

    我们关注到了个人和家庭的浪费,关注到了食物的浪费,但是,我们却忽视了企业浪费,特别是企业在数字化方面的浪费。   什么是数字化浪费?数字化浪费这一概念由来已久,最早是由企业提出来的。 大约是在2005年左右,一些品牌企业发现,它们投入到搜索、网络上...

    查看全文
  • 建站、抖音、自媒体?企业线上化如何破局?

    361

    流量是线上化布局的生命线,所以,一切线上化布局都是以获取流量开局。但是随着流量成本的上涨,企业布局线上化,很容易走入一个怪圈。 企业线上化布局怪圈 做网站还是开抖音,亦或是运营自媒体,现在开始尝试的企业,经常进入一个怪圈,这个怪圈就是—— 投了钱,...

    查看全文
展开更多