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 相关文章推荐
PHP面向对象分析设计的61条军规小结
Jul 17 PHP
使用PHP curl模拟浏览器抓取网站信息
Oct 28 PHP
ThinkPHP中RBAC类的四种用法分析
Nov 24 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
浅谈PHP中类和对象的相关函数
Apr 26 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 PHP
解决laravel查询构造器中的别名问题
Oct 17 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 PHP
详解Laravel框架的依赖注入功能
May 27 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中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python的pycurl包用法简介
2015/11/13 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
Python函数返回不定数量的值方法
2019/01/22 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
python提取log文件内容并画出图表
2019/07/08 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
什么是servlet链?
2014/07/13 面试题
学生实习推荐信范文
2013/11/26 职场文书
党风廉政承诺书
2014/03/27 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android