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 相关文章推荐
PHP5中新增stdClass 内部保留类
Jun 13 PHP
几个有用的php字符串过滤,转换函数代码
May 01 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
May 12 PHP
php数组遍历类与用法示例
May 24 PHP
php+redis实现消息队列功能示例
Sep 19 PHP
php+iframe 实现上传文件功能示例
Mar 04 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
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
基于mysql的论坛(2)
2006/10/09 PHP
生成静态页面的php函数,php爱好者站推荐
2007/03/19 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
Yii分页用法实例详解
2014/12/04 PHP
php数组键名技巧小结
2015/02/17 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
js实现二级导航功能
2017/03/03 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python使用py2exe打包程序介绍
2014/11/20 Python
带病坚持工作事迹
2014/05/03 职场文书
离婚协议书怎么写
2015/01/26 职场文书
南京导游词
2015/02/03 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
停电通知范文
2015/04/16 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android