Можно ли написать парсер электронной почты в PHP?

Мои навыки PHP являются промежуточными, но я хочу попытаться реализовать это:

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

Поэтому мне нужно разобрать электронные письма, которые попадают в мою учетную запись на сервере.

Я считаю, что это справедливо для обеспечения стандартного формата. . И я думал

(In subject)NEWGIG [[or maybe set up a separate "newgig@mySite.com" email account for gig updates only]] TITLE>My next super gig<TITLE DATE>03/10/2012<DATE DESC>Here is some supplementary information<DESC LINK>www.hereIsTheVenue.com<LINK 

Концерт будет добавлен, и будет отправлено электронное письмо с подтверждением.

Насколько сложно это делать? Является ли это возможным? Я думаю, что я могу выполнить весь синтаксический анализ и SQL, и т. Д., Но у меня нет большого опыта работы с почтой, и кажется, что есть много «неудобных битов», на которые нужно следить.

Может ли кто-нибудь подтвердить, что это выполнимо, прежде чем я начну? Любые советы или вещи, которые нужно искать?

BTW. Я занимаюсь парсером по электронной почте, потому что я хочу, чтобы он был очень прост в использовании. Музыканты, как известно, ленивы, поэтому, если я могу позволить им опубликовать концерт прямо из своей электронной почты (где они обычно получают подтверждение), то это избавляет их от необходимости посещать сайт, входить в систему, переходить на их счет и т. Д.

Да, это выполнимо. Все, что вам нужно – это доступ к серверу с конечной точкой smtp. что-то вроде postfix или exim или что-нибудь другое, которое слушает входящую электронную почту. вам необходимо настроить это программное обеспечение для передачи входящей почты в виде открытого текста в сценарий или вашу программу, которая может обрабатывать входные данные из stdin .

самый простой способ – создать новый псевдоним электронной почты, который указывает на скрипт. У меня есть много записей в /etc/aliases которые выглядят следующим образом:

 userpart: "|/usr/bin/php -f /path/to/some/script.php" 

это срабатывает всякий раз, когда по этому адресу приходит электронное письмо: userpart@this.server.example

сам скрипт считывает входные данные таким образом

 $fp = fopen('php://stdin','r'); while (!feof($fp)) { $input .= fgets($fp); } fclose($fp); 

вы можете найти использование существующего MIME Parser полезным, поскольку вход может быть чем-то вроде современного MUA.

Разбор писем – это как разбор любых данных. Вам просто нужно определить общий формат для электронных писем.

После того, как вы написали парсер, создайте скрипт, который периодически подключается к почтовой службе, используя функции php imap, читает письма, анализирует их и вставляет их в db.

Но было бы проще и быстрее просто создать веб-форму, в которой они будут добавлять все свои данные.

Вы можете использовать regex для этого. Но вам нужно некоторое улучшение в вашем формате.

Убедитесь, что ваш формат не содержит символов, которым пользователь может ввести его и уничтожить ваш формат. Если вы хотите сделать это очень простым для ваших пользователей / клиентов, используйте формат XML. Пользователям будет легче редактировать его.

Вот пример: (я создаю, как получить TITLE, и я изменяю тег открытия и окончания ). Теперь он использует двойные фигурные скобки .

 $str= ' (In subject)NEWGIG [[or maybe set up a separate "newgig@mySite.com" email account for gig updates only]] {{TITLE}}My next super gig{{TITLE}} DATE>03/10/2012<DATE DESC>Here is some supplementary information<DESC LINK>www.hereIsTheVenue.com<LINK'; preg_match('#{{TITLE}}(?P<title>.+){{TITLE}}#', $str, $matches); echo $matches['title']; 

Формат XML (вы можете использовать функцию simplexml_load_string для анализа XML-формата):

 <document> <TITLE>My next super gig</TITLE> <DATE>03/10/2012</DATE> <DESC>Here is some supplementary information</DESC> <LINK>www.hereIsTheVenue.com</LINK> </document>