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 相关文章推荐
资料注册后发信小技巧
Oct 09 PHP
在PHP中使用模板的方法
May 24 PHP
php 破解防盗链图片函数
Dec 09 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 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编程语言开发动态WAP页面
2006/10/09 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
JQuery 入门实例1
2009/06/25 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
python encode和decode的妙用
2009/09/02 Python
探究Python中isalnum()方法的使用
2015/05/18 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
python如何查看微信消息撤回
2018/11/27 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
python模块内置属性概念及实例
2021/02/18 Python
C语言编程练习
2012/04/02 面试题
为什么需要版本控制
2016/10/28 面试题
销售代表求职自荐信
2013/10/01 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
2016党校培训心得体会
2016/01/07 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js