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 相关文章推荐
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
php简单的上传类分享
May 15 PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
Laravel 关联模型-关联新增和关联更新的方法
Oct 10 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
PHP连续签到功能实现方法详解
Dec 04 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
php中json_encode中文编码问题分析
2011/09/13 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php解决约瑟夫环示例
2014/04/09 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
php建立Ftp连接的方法
2015/03/07 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
Python多线程编程(一):threading模块综述
2015/04/05 Python
基于Python os模块常用命令介绍
2017/11/03 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
python 实现按对象传值
2019/12/26 Python
python实现猜单词游戏
2020/05/22 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
python实现学生信息管理系统源码
2021/02/22 Python
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
优秀生推荐信范文
2013/11/28 职场文书
开业庆典邀请函
2014/01/08 职场文书
依法行政工作汇报
2014/10/28 职场文书
建议书范文
2015/02/05 职场文书
继续教育个人总结
2015/03/03 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Python日志模块logging用法
2022/06/05 Python