PHP将电子邮件解析为变量

时间:2011-01-06 12:51:53

标签: php

我目前正致力于为我的客户构建系统,该系统可归类为一种票务系统。但是,不是用户像普通系统那样输入票证,而是通过电子邮件格式从第三方(总是相同的第三方)接收票证。

我需要注意的是(我用各种方式思考,但似乎无法选出最佳方法)是从电子邮件中获取详细信息并将它们放入各个变量中。

将收到的电子邮件的一个示例是:

  

姓名:哈里史密斯   现状:已婚   地址:泰恩路14号   的Littlewood
  曼彻斯特
  MC2 3DN
  电话:01551 221502

显然,完整的电子邮件还有很长的时间,但我正在做的是从电子邮件中提取详细信息,以便我可以根据新系统的要求处理它们。实际上,我正在寻找能够以下列风格存储信息的东西:

  

名称:%name%
  状态:%status%
  地址:%地址%
  电话:%电话%

我还没有完全弄清楚如何对找到Name:的字符串搜索进行编码,然后将其存储起来,直到达到Status:为止。

任何帮助或指示都会很棒。

谢谢:)

3 个答案:

答案 0 :(得分:3)

逐行读取数据文件。用“:”分解每一行。如果计数== 2那么你就知道你在新的令牌上,并且在这种情况下key = index [0]和value = index [1]。现在检查下一行,如果在运行爆炸后只有一个元素,只需将其添加到上一个键。

     $email = ...;//email here
     $email = str_replace(array("\r\n","\n\r","\n","\r"), "\r", $email); //fix line breaks         

     $emaillines = explode("\r", $email);
     $result = array();
     $key = "first"; 
     foreach($emaillines as $line)
     {
        $parts = explode(":",$line,2);
        if(count($parts)>1) 
        {
            $key = $parts[0];
            $result[$key] = $parts[1];
        }
        else
          $result[$key] .= "\r".$parts[0];
     }

     print_r($result);

答案 1 :(得分:1)

您可以使用基本字符串操作和正则表达式从电子邮件中提取数据。以下代码可以作为起点。正则表达式有很大的改进空间。

<?php
$message = "Name: Harry Smith
Status: Married
Address: 14 Tyne Road,
Littlewood
Manchester
MC2 3DN
Telephone: 01551 221502";
preg_match(
    "@" .
    "^Name:(.*)" .
    "^Status:(.*)" .
    "^Address:(.*)" .
    "^Telephone:(.*)" .
    "@ms",
    $message,
    $match
);
var_dump($match);
// $match[1]...[4] contain the desired information
// you may want to trim() each value
?>

答案 2 :(得分:0)

您可以使用str_replace。

$string = str_replace("%name%", $name, $string);