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 相关文章推荐
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
PHP的swoole扩展安装方法详细教程
May 18 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
记录一次排查PHP脚本执行卡住的问题
Dec 27 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
PHP调用其他文件中的类
Apr 02 PHP
php微信公众号开发之简答题
Oct 20 PHP
php面向对象重点知识分享
Sep 27 PHP
phpQuery采集网页实现代码实例
Apr 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中each与list用法分析
2016/01/08 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
Jquery 的扩展方法总结
2011/10/01 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
express 项目分层实践详解
2018/12/10 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
python二分法实现实例
2013/11/21 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
python验证身份证信息实例代码
2019/05/06 Python
Python中@property的理解和使用示例
2019/06/11 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
学习python需要有编程基础吗
2020/06/02 Python
python Xpath语法的使用
2020/11/26 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
美发店5.1活动方案
2014/01/24 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书