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

PHP使用POP3读取邮箱接收邮件的示例代码

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-16 15:16:29 浏览: 评论:0 

这篇文章主要介绍了PHP如何使用POP3读取邮箱接收邮件,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下。

直接上代码:

  1. <?php 
  2. $array_values['host'] = "host"; 
  3. $array_values['port'] = 110; 
  4. $array_values['user'] = '用户名'; 
  5. $array_values['password'] = '密码'; 
  6. $array_values['checkmail'] = 'xxx@xxx.xxx'; 
  7.  
  8. ganji_get_test_mail($array_values); 
  9.  
  10. function ganji_get_test_mail($array_values) 
  11. { 
  12.   $host = $array_values['host']; 
  13.   $port = $array_values['port']; 
  14.   $user = $array_values['user']; 
  15.   $password = $array_values['password']; 
  16.   $checkmail = $array_values['checkmail']; 
  17.   $msg = ''; 
  18.   $return_msg = ''; 
  19.   // ini_set('memory_limit', '80M'); 
  20.   if (! ($sock = fsockopen(gethostbyname($host), $port, $errno, $errstr))) { 
  21.     exit($errno . ': ' . $errstr); 
  22.   } 
  23.  
  24.   set_socket_blocking($sock, true); 
  25.  
  26.   $command = "USER " . $user . "\r\n"; 
  27.   fwrite($sock, $command); 
  28.   $msg = fgets($sock); 
  29.   $command = "PASS " . $password . "\r\n"; 
  30.   fwrite($sock, $command); 
  31.   $msg = fgets($sock); 
  32.  
  33.   $command = "stat\r\n"; 
  34.   fwrite($sock, $command); 
  35.   $return_msg = fgets($sock); 
  36.  
  37.   $msg = fgets($sock); 
  38.  
  39.   $command = "LIST\r\n"; 
  40.   fwrite($sock, $command); 
  41.   $all_mails = array(); 
  42.   while (true) { 
  43.     $msg = fgets($sock); 
  44.     if (! preg_match('/^\+OK/', $msg) && ! preg_match('/^\./', $msg)) { 
  45.       $msg = preg_replace('/\ .*\r\n/', '', $msg); 
  46.       array_push($all_mails, $msg); 
  47.     } 
  48.     if (preg_match('/^\./', $msg)) 
  49.       break; 
  50.   } 
  51.  
  52.   // 获取邮件列表 
  53.   $ganji_mails = array(); 
  54.   foreach ($all_mails as $item) { 
  55.     fwrite($sock, "TOP $item 0\r\n"); 
  56.     while (true) { 
  57.       $msg = fgets($sock); 
  58.       // echo $msg . "<Br><Br>"; 
  59.       if (preg_match('/^\./', $msg)) { 
  60.         array_push($ganji_mails, $item); 
  61.         break; 
  62.       } 
  63.     } 
  64.     continue; 
  65.   } 
  66.  
  67.   $mail_content = ''; 
  68.   $array_ganji_mails = array(); 
  69.  
  70.   //逐行遍历 
  71.   foreach ($ganji_mails as $item) { 
  72.     fwrite($sock, "RETR $item\r\n"); 
  73.     while (true) { 
  74.       $msg = fgets($sock); 
  75.       $mail_content .= $msg; 
  76.       if (preg_match('/^\./', $msg)) { 
  77.         array_push($array_ganji_mails, iconv_mime_decode_headers($mail_content, 0, "UTF-8")); 
  78.         $mail_content = ''; 
  79.         break; 
  80.       } 
  81.     } 
  82.   } 
  83.  
  84.   // 直接获取第一封邮件全部信息 9999长度 
  85.   fwrite($sock, "RETR 1\r\n"); 
  86.   $mail_contents = fread($sock, 9999); // 直接获取全部 
  87.  
  88.   echo "<br>"; 
  89.   var_dump($mail_contents); 
  90.   echo "<br>"; 
  91.  
  92.   $command = "QUIT\r\n"; 
  93.   fwrite($sock, $command); 
  94.   $msg = fgets($sock); 
  95.  
  96.   return $mail_contents; 
  97. } 

常用的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读取邮箱 POP3接收邮件

分享到: