如何使用php从eml文件中仅将电子邮件地址提取到excel文件中

时间:2016-01-13 18:08:58

标签: php excel eml

我已经尝试过这个PHP代码从eml文件中提取电子邮件地址。但它在浏览器上显示我这样:

Array ( [0] => jessy87421@gmail.com
        [1] => gmail.com@gmail.com 
        [8] => tkm.ab234@gmail.com 
       [16] => rjsajal99@gmail.com 
       [23] => mrwsamson@hotmail.com 
       [26] => p7896546@gmail.com 
       [33] => COL401-EAS320FA71AB8D0DB70A86C0BDAACA0@phx.gbl 
       [35] => Mrwsamson@hotmail.com [64] => stancojim@yahoo.com 
       [67] => 284187.29155.bm@omp1028.mail.bf1.yahoo.com [68] => 1452613452.95435.YahooMailMobile@web161005.mail.bf1.yahoo.com 
       [87] => prantomollick9911@gmail.com 
       [94] => quakenbush_87@hotmail.com 
       [97] => k018707707@gmail.com 
      [104] => BLU403-EAS1665B11DD307579691E9A1A96CA0@phx.gbl 
   )`

我的PHP代码是:

<?php
   $emails = array();

   foreach(rglob("*.eml") as $eml){
     $emlContent = file_get_contents($eml);
     preg_match_all('/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6})/i', $emlContent, $matches, PREG_PATTERN_ORDER);


     for ($i = 0; $i < count($matches[1]); $i++) {
         $emails[] .= $matches[1][$i];
     }
   }


   $emails = array_unique($emails);
   print_r($emails);


   function rglob($pattern='*', $flags = 0, $path=''){
      $paths=glob($path.'*', GLOB_MARK|GLOB_ONLYDIR|GLOB_NOSORT);
      $files=glob($path.$pattern, $flags);

      foreach ($paths as $path) {
         $files=array_merge($files,rglob($pattern, $flags, $path));
      }

      return $files;
}

?>

现在我想只将所有发件人电子邮件地址提取到Excel文件中。我在互联网上搜索过但没有得到任何解决方案。

希望有人能帮我解决问题。 提前致谢

2 个答案:

答案 0 :(得分:1)

尝试将此标题信息添加到您的函数中,这将开始下载:

    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=emails.xls");
    header("Pragma: no-cache");
    header("Expires: 0");

    foreach($emails as $email){
        echo $email;
    }

答案 1 :(得分:0)

您是否尝试过解析eml文件中的标题?

当文件中出现两个连续的行结束时,标题结束。

例如:

list($header, body) = explode("\n\n", file_get_contents("mail.eml"));
$headers = http_parse_headers ($header);
var_dump(headers);

相关:How do I get just the text content from a multipart email?