Tipulatoid

Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Visitor, спасибо Итак парсер электронной почты. Думаю, такая штука нужна не только мне. Удобна при использовании _pop3.au3 UDF Функция возвращает массив, где сохранены: В 1-ой строке - имя отправителя во 2-ой строке - адрес отправителя в 3-ей строке - имя получателя в 4-ой строке - адрес получателя в 5-ой строке - тема письма в 6-ой строке - кодировка письма в 7-ой строке - тело письма в 8-ой строке - имя аттача (если есть) в 9-ой строке - тело аттача (если есть) В следующих парах строк - имена и тела других аттачей (если есть) parser.au3 : Код: #include <Array.au3> #include <_pop3.au3> Global $MyPopServer = "pop.yandex.ru" Global $MyLogin = "delta2-greit" Global $MyPasswd = "не_скажу" ; Подключаемся к pop3 серверу _pop3Connect($MyPopServer, $MyLogin, $MyPasswd) If @error Then MsgBox(16, "Ошибка. Код ошибки " & @error, "Не могу подключиться к " & $MyPopServer) Exit Else ConsoleWrite("Подключился к pop3-серверу " & $MyPopServer & @CR) EndIf ; Скачиваем письмо №1 Local $retr = _Pop3Retr(1) If Not @error Then $aParsedLetter = _ParseEmail ($retr) ; посылаем скачанное письмо на разбор Else ConsoleWrite("Команда Retr не прошла" & @CR) Exit EndIf ; Закрываем подключение ConsoleWrite(_Pop3Quit() & @CRLF) _ArrayDisplay ($aParsedLetter) Func _ParseEmail ($sReadFile) Dim $aLetter[1] _AddToLetterArray (StringRegExp($sReadFile, '(?im)^From: +(.*)(?: |<)(?:.*?<|)(.*?)(?:>|)\r\n', 1), $aLetter) ; отправитель _AddToLetterArray (StringRegExp($sReadFile, '(?im)^To: +(.*)(?: |<)(?:.*?<|)(.*?)(?:>|)\r\n', 1), $aLetter) ; получатель _AddToLetterArray (StringRegExp($sReadFile, '(?im)^Subject: +(.*)\r\n', 1), $aLetter) ; тема _AddToLetterArray (StringRegExp($sReadFile, '(?i) charset="?(.*?)(?:"|\r\n)', 1), $aLetter) ; кодировка ; тело письма $aSplit = StringSplit ($sReadFile, @CRLF, 1) $iFirstBoundaryString = _ArraySearch ($aSplit, "boundary=", 0, 0, 0, 1) $iBoundary = $aSplit[$iFirstBoundaryString] $iBoundary_startpos = StringInStr ($iBoundary, '"') $iBoundary_endpos = StringInStr ($iBoundary, '"', 0, 2) $boundary = StringMid ($iBoundary, $iBoundary_startpos+1, $iBoundary_endpos-$iBoundary_startpos-1) $boundary1 = _ArraySearch ($aSplit, $boundary, $iFirstBoundaryString+1, 0, 1, 1) $boundary2 = _ArraySearch ($aSplit, $boundary, $boundary1+1, 0, 1, 1) $message = "" $Write = False For $i=$boundary1 To $boundary2-1 If $aSplit[$i] = "" Then $Write = True If $Write = True Then $message &= $aSplit[$i] & @CRLF Next _AddToLetterArray ($message, $aLetter) _AddToLetterArray (StringRegExp($sReadFile, '(?ims) filename="?(.*?)(?:"|\r).*?\n\r\n(.*?)\r\n^-+', 3), $aLetter) ; имена и тела аттачей Return $aLetter EndFunc ; ==> _ParseEmail Func _AddToLetterArray ($aContents, ByRef $afLetter) If IsArray($aContents) Then For $t = 0 to UBound ($aContents) - 1 _ArrayAdd ($afLetter, $aContents[$t]) Next Else _ArrayAdd ($afLetter, $aContents) EndIf Return $afLetter EndFunc ;==>_AddToLetterArray |
| Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 15:46 28-10-2008 | Исправлено: Tipulatoid, 17:31 28-10-2008 |
|