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

常用的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读取邮箱

分享到: