当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-06 09:36:46 浏览: 评论:0 

直接上代码:

  1. <?php 
  2.  
  3. $array_values['host'] = "host"; 
  4.  
  5. $array_values['port'] = 110; 
  6.  
  7. $array_values['user'] = '用户名'; 
  8.  
  9. $array_values['password'] = '密码'; 
  10.  
  11. $array_values['checkmail'] = 'xxx@xxx.xxx'; 
  12.  
  13.  
  14.  
  15. ganji_get_test_mail($array_values); 
  16.  
  17.  
  18.  
  19. function ganji_get_test_mail($array_values) 
  20.  
  21. { 
  22.  
  23.   $host = $array_values['host']; 
  24.  
  25.   $port = $array_values['port']; 
  26.  
  27.   $user = $array_values['user']; 
  28.  
  29.   $password = $array_values['password']; 
  30.  
  31.   $checkmail = $array_values['checkmail']; 
  32.  
  33.   $msg = ''; 
  34.  
  35.   $return_msg = ''; 
  36.  
  37.   // ini_set('memory_limit', '80M'); 
  38.  
  39.   if (! ($sock = fsockopen(gethostbyname($host), $port, $errno, $errstr))) { 
  40.  
  41.     exit($errno . ': ' . $errstr); 
  42.  
  43.   } 
  44.  
  45.  
  46.  
  47.   set_socket_blocking($sock, true); 
  48.  
  49.  
  50.  
  51.   $command = "USER " . $user . "\r\n"; 
  52.  
  53.   fwrite($sock, $command); 
  54.  
  55.   $msg = fgets($sock); 
  56.  
  57.   $command = "PASS " . $password . "\r\n"; 
  58.  
  59.   fwrite($sock, $command); 
  60.  
  61.   $msg = fgets($sock); 
  62.  
  63.  
  64.  
  65.   $command = "stat\r\n"; 
  66.  
  67.   fwrite($sock, $command); 
  68.  
  69.   $return_msg = fgets($sock); 
  70.  
  71.  
  72.  
  73.   $msg = fgets($sock); 
  74.  
  75.  
  76.  
  77.   $command = "LIST\r\n"; 
  78.  
  79.   fwrite($sock, $command); 
  80.  
  81.   $all_mails = array(); 
  82.  
  83.   while (true) { 
  84.  
  85.     $msg = fgets($sock); 
  86.  
  87.     if (! preg_match('/^\+OK/', $msg) && ! preg_match('/^\./', $msg)) { 
  88.  
  89.       $msg = preg_replace('/\ .*\r\n/', '', $msg); 
  90.  
  91.       array_push($all_mails, $msg); 
  92.  
  93.     } 
  94.  
  95.     if (preg_match('/^\./', $msg)) 
  96.  
  97.       break; 
  98.  
  99.   } 
  100.  
  101.  
  102.  
  103.   // 获取邮件列表 
  104.  
  105.   $ganji_mails = array(); 
  106.  
  107.   foreach ($all_mails as $item) { 
  108.  
  109.     fwrite($sock, "TOP $item 0\r\n"); 
  110.  
  111.     while (true) { 
  112.  
  113.       $msg = fgets($sock); 
  114.  
  115.       // echo $msg . "<Br><Br>"; 
  116.  
  117.       if (preg_match('/^\./', $msg)) { 
  118.  
  119.         array_push($ganji_mails, $item); 
  120.  
  121.         break; 
  122.  
  123.       } 
  124.  
  125.     } 
  126.  
  127.     continue; 
  128.  
  129.   } 
  130.  
  131.  
  132.  
  133.   $mail_content = ''; 
  134.  
  135.   $array_ganji_mails = array(); 
  136.  
  137.  
  138.  
  139.   //逐行遍历 
  140.  
  141.   foreach ($ganji_mails as $item) { 
  142.  
  143.     fwrite($sock, "RETR $item\r\n"); 
  144.  
  145.     while (true) { 
  146.  
  147.       $msg = fgets($sock); 
  148.  
  149.       $mail_content .= $msg; 
  150.  
  151.       if (preg_match('/^\./', $msg)) { 
  152.  
  153.         array_push($array_ganji_mails, iconv_mime_decode_headers($mail_content, 0, "UTF-8")); 
  154.  
  155.         $mail_content = ''; 
  156.  
  157.         break; 
  158.  
  159.       } 
  160.  
  161.     } 
  162.  
  163.   } 
  164.  
  165.  
  166.  
  167.   // 直接获取第一封邮件全部信息 9999长度 
  168.  
  169.   fwrite($sock, "RETR 1\r\n"); 
  170.  
  171.   $mail_contents = fread($sock, 9999); // 直接获取全部 
  172.  
  173.  
  174.  
  175.   echo "<br>"; 
  176.  
  177.   var_dump($mail_contents); 
  178.  
  179.   echo "<br>"; 
  180.  
  181.  
  182.  
  183.   $command = "QUIT\r\n"; 
  184.  
  185.   fwrite($sock, $command); 
  186.  
  187.   $msg = fgets($sock); 
  188.  
  189.  
  190.  
  191.   return $mail_contents; 
  192.  
  193. } 

常用的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 更新 退出

Tags: POP3读取邮箱 PHP读取邮箱

分享到: