Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielhafte Darstellung, wie PHP EML-Dateien liest und analysiert und Webseiten generiert

Beispielhafte Darstellung, wie PHP EML-Dateien liest und analysiert und Webseiten generiert

黄舟
黄舟Original
2017-09-05 09:25:172062Durchsuche

Dieser Artikel stellt hauptsächlich die Methode zum Lesen, Parsen und Generieren von EML-Dateien durch PHP vor. Er analysiert die zugehörigen Implementierungstechniken und Vorsichtsmaßnahmen zum Lesen, Parsen und Konvertieren von EML-Dateien durch PHP in Form von Beispielen und enthält einen Demo-Quellcode Als Download-Referenz für Leser können sich Freunde in Not an

wenden. Dieser Artikel beschreibt die Methode zum Lesen, Parsen von EML-Dateien und zum Generieren von Webseiten mit PHP. Geben Sie es als Referenz an alle weiter. Die Details lauten wie folgt:

PHP liest EML-Beispiel. Dieses Beispiel kann die exportierte EML-Datei in Text analysieren und den Anhang auf dem Server speichern. Ohne weitere Umschweife poste ich einfach den Code.


<?php
// Author: richard e42083458@163.com
// gets parameters
error_reporting(E_ALL ^ (E_WARNING|E_NOTICE));
header("Content-type: text/html; charset=utf-8");
echo "<pre class="brush:php;toolbar:false">";
define(EML_FILE_PATH,&#39;./yjdata/&#39;);
//if ($filename == &#39;&#39;) $filename = &#39;21724696_niuyufu@qiaodazhao.com_ZC4422-r7GMz_R9QF3K6XUhmJOXd4c.eml&#39;;
//if ($filename == &#39;&#39;) $filename = &#39;21724696_niuyufu@qiaodazhao.com_ZC3218-dGquMgm7ytdF6HQgpSReC4c.eml&#39;;
//if ($filename == &#39;&#39;) $filename = &#39;163.eml&#39;;
//if ($filename == &#39;&#39;) $filename = &#39;166.eml&#39;;
//if ($filename == &#39;&#39;) $filename = &#39;nyf.eml&#39;;
//if ($filename == &#39;&#39;) $filename = &#39;email_header_icon.eml&#39;;
if ($filename == &#39;&#39;) $filename = &#39;20141230133705.eml&#39;;
$eml_file = EML_FILE_PATH.$filename;
if (!($content = fread(fopen(EML_FILE_PATH.$filename, &#39;rb&#39;), filesize(EML_FILE_PATH.$filename))))
  die(&#39;File not found (&#39;.EML_FILE_PATH.$filename.&#39;)&#39;);
//标题内容
$pattern="/Subject: (.*?)\n/ims";
preg_match($pattern,$content,$subject_results);
$subject = getdecodevalue($subject_results[1]);
echo "标题:".$subject;
//发件人:
$pattern="/From: .*?<(.*?)>/ims";
preg_match($pattern,$content,$from_results);
$from = $from_results[1];
echo "\n\r";
echo "发件人:".$from;
//收件人:
$pattern="/To:(.*?):/ims";
preg_match($pattern,$content,$to_results);
$pattern="/<(.*?)>/ims";
preg_match_all($pattern,$to_results[1],$to_results2);
if(count($to_results2[1])>0){
  $to = $to_results2[1];
}else{
  $pattern="/To:(.*?)\n/ims";
  preg_match($pattern,$content,$to_results);
  $to = $to_results[1];
}
echo "\n\r";
echo "收件人:";
print_r($to);
echo "\n\r";
//正文内容
$pattern = "/Content-Type: multipart\/alternative;.*?boundary=\"(.*?)\"/ims";
preg_match($pattern,$content,$results);
if($results[1]!=""){
  $seperator = "--".$results[1];
}else{
  die("boundary匹配失败");
}
$spcontent = explode($seperator, $content);
$items = array();
$keyid = 0;
$email_front_content_array = array();
foreach($spcontent as $spkey=>$item) {
  //匹配header编码等信息
  $pattern = "/Content-Type: ([^;]*?);.*?charset=(.*?)\nContent-Transfer-Encoding: (.*?)\n/ims";
  preg_match($pattern,$item,$item_results);
  if(count($item_results)==4){
    $Content_code = str_replace($item_results[0],"",$item);
    $item_results[4] = $Content_code;
    if(trim($item_results[3])=="base64"){
      $item_results[5] = base64_decode($item_results[4]);
    }
    if(trim($item_results[3])=="quoted-printable"){
      $item_results[5] = quoted_printable_decode($item_results[4]);
    }
    $item_results[5] = mb_convert_encoding($item_results[5], &#39;UTF-8&#39;, trim($item_results[2]));
    //echo $item_results[5];exit;
    $email_front_content_array[] = $item_results;
  }
}
foreach ($email_front_content_array as $email_front_content_each_key=>$email_front_content_each_value){
  if($email_front_content_each_value[1]==&#39;text/html&#39;){
    $content_html = $email_front_content_each_value[5];
    break;
  }else{
    $content_html = $email_front_content_each_value[5];
  }
}
echo "内容:";
echo "\n\r";
echo $content_html;
echo "\n\r";
//附件内容
$pattern = "/Content-Type: multipart\/mixed;.*?boundary=\"(.*?)\"/ims";
preg_match($pattern,$content,$results);
if($results[1]!=""){
  $seperator = "--".$results[1];
  $spcontent = explode($seperator, $content);
  $items = array();
  $keyid = 0;
  $email_attachment_content_array = array();
  foreach($spcontent as $spkey=>$item) {
    //匹配header编码等信息
    $pattern = "/Content-Type: ([^;]*?);.*?name=(.*?)\nContent-Transfer-Encoding: (.*?)\nContent-Disposition: attachment;.*?filename=(.*?)\n/ims";
    preg_match($pattern,$item,$item_results);
    //print_r($item_results);
    if(count($item_results)==5){
      $Content_code = str_replace($item_results[0],"",$item);
      $item_results[5] = trim($Content_code);
      if(trim($item_results[3])=="base64"){
        $item_results[6] = base64_decode($item_results[5]);
      }
      if(trim($item_results[3])=="quoted-printable"){
        $item_results[6] = quoted_printable_decode($item_results[5]);
      }
      $item_results[7] = str_replace("\"","",getdecodevalue($item_results[2]));
      $item_results[8] = str_replace("\"","",getdecodevalue($item_results[4]));
      //保存附件内容到服务器?
      //符合规范的文件名时:有后缀名时。
      if(strrpos($item_results[8], &#39;.&#39;)!==false){
        $ext = substr($item_results[8], strrpos($item_results[8], &#39;.&#39;) + 1);
        //$filename = "./yjdata/attachment/".date("YmdHis").mt_rand(10000,99999).".".trim($ext);
        $attachment_filename = "./yjdata/attachment/".trim(str_replace("\"","",getbase64code($item_results[4]))).".".trim($ext);
        mkdirs(dirname($attachment_filename));
        $fp = fopen($attachment_filename, "w+");
        if (flock($fp, LOCK_EX)) { // 进行排它型锁定
          fwrite($fp, $item_results[6]);
          flock($fp, LOCK_UN); // 释放锁定
        } else {
          //echo "Couldn&#39;t lock the file !";
        }
        fclose($fp);
        $item_results[9] = $attachment_filename;
        $email_attachment_content_array[] = $item_results;
      }
    }
  }
  //print_r($email_attachment_content_array);
}
if(count($email_attachment_content_array)>0){
  echo "附件:";
  echo "\n\r";
  //附件读取
  foreach($email_attachment_content_array as $email_attachment_content_each_key=>$email_attachment_content_each_value){
    unset($email_attachment_content_each_value[5]);
    unset($email_attachment_content_each_value[6]);
    print_r($email_attachment_content_each_value[8]);
    print_r($email_attachment_content_each_value[9]);
  }
}
function getbase64code($content){
  $pattern="/=\?GB2312\?B\?(.*?)\?=|=\?GBK\?B\?(.*?)\?=|=\?UTF-8\?B\?(.*?)\?=/ims";
  preg_match($pattern,$content,$subject_results);
  if($subject_results[1]!=""){
    $subject = $subject_results[1];
    $charset = "GB2312";
  }
  elseif($subject_results[2]!=""){
    $subject = $subject_results[2];
    $charset = "GBK";
  }
  elseif($subject_results[3]!=""){
    $subject = $subject_results[3];
    $charset = "UTF-8";
  }else{
    $subject = $content;
    $charset = "";
  }
  return $subject;
}
function getdecodevalue($content){
  $pattern="/=\?GB2312\?B\?(.*?)\?=|=\?GBK\?B\?(.*?)\?=|=\?UTF-8\?B\?(.*?)\?=/ims";
  preg_match($pattern,$content,$subject_results);
  if($subject_results[1]!=""){
    $subject = base64_decode($subject_results[1]);
    $charset = "GB2312";
  }
  elseif($subject_results[2]!=""){
    $subject = base64_decode($subject_results[2]);
    $charset = "GBK";
  }
  elseif($subject_results[3]!=""){
    $subject = base64_decode($subject_results[3]);
    $charset = "UTF-8";
  }else{
    $subject = $content;
    $charset = "";
  }
  if($charset!=""){
    $subject = mb_convert_encoding($subject, &#39;UTF-8&#39;, $charset);
  }
  return $subject;
}
function mkdirs($dir)
{
  if(!is_dir($dir))
  {
    if(!mkdirs(dirname($dir))){
      return false;
    }
    if(!mkdir($dir,0777)){
      return false;
    }
  }
  chmod($dir, 777);  //给目录操作权限
  return true;
}
?>

Es gibt Bilder und die Wahrheit:

Das obige ist der detaillierte Inhalt vonBeispielhafte Darstellung, wie PHP EML-Dateien liest und analysiert und Webseiten generiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn