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设计模式 State (状态模式)
Jun 26 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
PHP如何利用P3P实现跨域
Aug 24 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
php之可变函数的实例详解
Sep 13 PHP
php实现微信原生支付(扫码支付)功能
May 30 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
PHP crypt()函数的用法讲解
Feb 15 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 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提示undefined index的几种解决方法
2012/05/21 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
flask项目集成swagger的方法
2020/12/09 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
保护环境倡议书100字
2014/05/19 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
超市创意活动方案
2014/08/15 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
2014年宣传工作总结
2014/11/18 职场文书
学雷锋日活动总结
2015/02/06 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
入党转正申请报告
2015/05/15 职场文书
员工手册董事长致辞
2015/07/29 职场文书
2015年教师节感言
2015/08/03 职场文书
2016天猫双十一广告语
2016/01/28 职场文书