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仿discuz分页效果代码
Oct 02 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
Windows中使用计划任务自动执行PHP程序实例
May 09 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
Dec 01 PHP
php查询操作实现投票功能
May 09 PHP
PHP设置images目录不充许http访问的方法
Nov 01 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 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下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
PHP中static关键字原理的学习研究分析
2011/07/18 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
php单链表实现代码分享
2016/07/04 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
node使用request请求的方法
2019/12/20 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
python文件的md5加密方法
2016/04/06 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python3处理HTTP请求的实例
2018/05/10 Python
python实现验证码识别功能
2018/06/07 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
后勤园长自我鉴定
2013/10/17 职场文书
ktv中秋节活动方案
2014/01/30 职场文书
集中整治工作方案
2014/05/01 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
初中生物教学随笔
2015/08/15 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书