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 相关文章推荐
centos 5.6 升级php到5.3的方法
May 14 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
处理单名多值表单的详解
Jun 08 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
php实现删除指定目录下相关文件的方法
Oct 20 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
php curl请求信息和返回信息设置代码实例
Apr 27 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
php使用yield对性能提升的测试实例分析
Sep 19 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
牡丹941资料
2021/03/01 无线电
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
JAVA/JSP学习系列之二
2006/10/09 PHP
PHP初学入门
2006/11/19 PHP
在php MYSQL中插入当前时间
2008/04/06 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
python中类的一些方法分析
2014/09/25 Python
用C++封装MySQL的API的教程
2015/05/06 Python
Python深入06——python的内存管理详解
2016/12/07 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
浅谈Python 递归算法指归
2019/08/22 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
学生实习自我鉴定
2013/10/11 职场文书
生产车间主任的个人自我鉴定
2013/10/25 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书