PHP使用POP3读取邮箱接收邮件的示例代码


Posted in PHP onJuly 08, 2020

直接上代码:

<?php
$array_values['host'] = "host";
$array_values['port'] = 110;
$array_values['user'] = '用户名';
$array_values['password'] = '密码';
$array_values['checkmail'] = 'xxx@xxx.xxx';

ganji_get_test_mail($array_values);

function ganji_get_test_mail($array_values)
{
  $host = $array_values['host'];
  $port = $array_values['port'];
  $user = $array_values['user'];
  $password = $array_values['password'];
  $checkmail = $array_values['checkmail'];
  $msg = '';
  $return_msg = '';
  // ini_set('memory_limit', '80M');
  if (! ($sock = fsockopen(gethostbyname($host), $port, $errno, $errstr))) {
    exit($errno . ': ' . $errstr);
  }

  set_socket_blocking($sock, true);

  $command = "USER " . $user . "\r\n";
  fwrite($sock, $command);
  $msg = fgets($sock);
  $command = "PASS " . $password . "\r\n";
  fwrite($sock, $command);
  $msg = fgets($sock);

  $command = "stat\r\n";
  fwrite($sock, $command);
  $return_msg = fgets($sock);

  $msg = fgets($sock);

  $command = "LIST\r\n";
  fwrite($sock, $command);
  $all_mails = array();
  while (true) {
    $msg = fgets($sock);
    if (! preg_match('/^\+OK/', $msg) && ! preg_match('/^\./', $msg)) {
      $msg = preg_replace('/\ .*\r\n/', '', $msg);
      array_push($all_mails, $msg);
    }
    if (preg_match('/^\./', $msg))
      break;
  }

  // 获取邮件列表
  $ganji_mails = array();
  foreach ($all_mails as $item) {
    fwrite($sock, "TOP $item 0\r\n");
    while (true) {
      $msg = fgets($sock);
      // echo $msg . "<Br><Br>";
      if (preg_match('/^\./', $msg)) {
        array_push($ganji_mails, $item);
        break;
      }
    }
    continue;
  }

  $mail_content = '';
  $array_ganji_mails = array();

  //逐行遍历
  foreach ($ganji_mails as $item) {
    fwrite($sock, "RETR $item\r\n");
    while (true) {
      $msg = fgets($sock);
      $mail_content .= $msg;
      if (preg_match('/^\./', $msg)) {
        array_push($array_ganji_mails, iconv_mime_decode_headers($mail_content, 0, "UTF-8"));
        $mail_content = '';
        break;
      }
    }
  }

  // 直接获取第一封邮件全部信息 9999长度
  fwrite($sock, "RETR 1\r\n");
  $mail_contents = fread($sock, 9999); // 直接获取全部

  echo "<br>";
  var_dump($mail_contents);
  echo "<br>";

  $command = "QUIT\r\n";
  fwrite($sock, $command);
  $msg = fgets($sock);

  return $mail_contents;
}

常用的POP3命令介绍 :

命令 参数 状态 描述
USER username 认可 此命令与下面的pass命令若成功,将导致状态转换
PASS password  认可
APOP Name,Digest 认可 Digest是MD5消息摘要
STAT None 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL [Msg#] 处理 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST [Msg#] 处理 返回邮件数量和每个邮件的大小
RETR [Msg#] 处理 返回由参数标识的邮件的全部文本
DELE [Msg#] 处理 服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET None 处理 服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP [Msg#]  处理 服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP None 处理 服务器返回一个肯定的响应,不做任何操作。
QUIT None 更新 退出

以上就是PHP使用POP3读取邮箱接收邮件的示例代码的详细内容,更多关于PHP读取邮箱接收邮件的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
header()函数使用说明
Nov 23 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
php实现的RSS生成类实例
Apr 23 PHP
php实现的用户查询类实例
Jun 18 PHP
php使用MySQL保存session会话的方法
Jun 26 PHP
php处理复杂xml数据示例
Jul 11 PHP
laravel5.6实现数值转换
Oct 23 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 #PHP
详解PHP中的8个魔术常量
Jul 06 #PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 #PHP
PHP实现递归的三种方法
Jul 04 #PHP
laravel开发环境homestead搭建过程详解
Jul 03 #PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 #PHP
PHP 超级全局变量相关总结
Jun 30 #PHP
You might like
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
深入浅出php socket编程
2015/05/13 PHP
php编写简单的文章发布程序
2015/06/18 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
深入了解js原型模式
2019/05/30 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
使用python实现省市三级菜单效果
2016/01/20 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python实现ping指定IP的示例
2018/06/04 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
高中生学习的自我评价
2013/12/14 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
学生个人自我鉴定
2014/03/26 职场文书
党组织公开承诺书
2014/03/29 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript