2011-01-06 2 views
0

В настоящее время я работаю над созданием системы для моего клиента, которая может быть классифицирована как тип системы билета. Однако, вместо того, чтобы вводить билеты, как обычная система, билеты поступают от третьего лица (всегда одного и того же третьего лица) в формате электронной почты, который будет отправлен по каналам.PHP-анализ сообщений электронной почты на переменные

Что мне нужно, чтобы посмотреть (что я ' мы думали, используя различные способы, но не можем выбрать лучшее), берущие детали из электронной почты и помещая их в отдельные переменные.

Пример электронной почты, который будет за полученный в:

Имя: Harry Smith
Статус: Женат
Адрес: 14 Тайн Road,
Литтлвуд
Манчестер
MC2 3DN
Телефон: 01551 221502

Очевидно, что полная электронная почта намного длиннее, однако то, что я ищу, - это выкладывать детали из электронной почты, чтобы я мог обрабатывать их по мере необходимости в новой системе. На самом деле я искал что-то, что может хранить информацию в стиле:

Имя: имя%%
Статус:% Статус%
Адрес:% адрес%
Телефон:% телефон%

Я просто не совсем понял, как закодировать строковый поиск, который найдет Name: и сохранит каждый после него до Status:.

Любая помощь или указатели будет замечательной.

Спасибо :)

ответ

3

Прочитайте файл данных в строковой последовательности. Разверните каждую строку с помощью «:». Если подсчет этого == 2, то вы знаете, что у вас новый токен, и в этом случае ключ = индекс [0] и значение = индекс [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

Звучит многообещающе, не могли бы вы рассказать об этом немного больше, т. Е. Для адреса, который находится на нескольких строках. – lethalMango

+0

Хорошо, попробуйте это. проголосуйте, если вам это понравится :) – Jason

+0

Спасибо, попробуем это вместе с ответом Салмана.Я вернусь с обновлением позже сегодня. – lethalMango

0

Вы можете использовать str_replace.

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

К сожалению, я смотрю на то, чтобы сохранить то, что% имя% будет, а не замена% имя% со значением я уже – lethalMango

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 
?> 
+0

его не на самом деле 4 строк, это что-то вроде 35, но да каждое письмо , который является одним из двух разных макетов (идентифицируемых по электронной почте) – lethalMango

+0

ОК, я отредактировал свой ответ. –

Смежные вопросы