设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP使用POP3读取邮箱接收邮件的示例解析

发布时间:2022-07-18 12:11 所属栏目:121 来源:互联网
导读:直接上代码: ?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
  直接上代码:
 
  <?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 更新 退出。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读