Перейти к содержимому
Калькуляторы

Автоматический парсинг xls и csv из почты.

Коллеги, приветсвую. стоит задача автоматизировать процесс загрузки в БД неких данных, переодически приходящих в виде вложения по электронной почте.

Уверен что задача не нова и есть какие-то то готвые решения для этих целей.

Никто не сталкивался ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Задачка то простая и пишется на любом удобном к прикручиванию языке ...

Только сразу подумайте как будете валидировать источник данных ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выдаете письма на конвейер, где и разгребаете самодельным или готовым парсером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только сразу подумайте как будете валидировать источник данных ...

можно подпись проверять =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

можно подпись проверять =)

 

как вариант. терминальщики (тот же Элекснет, Киви не помню) еще и криптуют публичным ключом провайдера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот пример на PHP+mime_parser.php,v 1.86 2012/10/19 05:05:24:

 

<?php
require_once('rfc822_addresses.php');
require_once('mime_parser.php');

$pop_server = 'pop3://pop.SERVER.TLD';
$user = 'ACCOUNT';
$pass = 'PASS';
$curl_verbose = 0;//0 - no debug, 1 - enable curl debug

$ch = curl_init();
echo "started\n";
$mime = new mime_parser_class;//email parser

curl_setopt($ch, CURLOPT_VERBOSE, $curl_verbose);
curl_setopt($ch, CURLOPT_URL, "$pop_server/");//mail list
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$list = curl_exec($ch); // get mail list

$list = explode("\n", $list);

$limit=20000;
foreach($list as $num0) {
   if(trim($num0)=='')//skip last line
continue;

   $num_a = explode(' ', $num0);//parse "num mail_id"
   $num = $num_a[0];//get num
   //echo "$num\n";

   curl_setopt($ch, CURLOPT_NOBODY, 0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'RETR');
   curl_setopt($ch, CURLOPT_URL, "$pop_server/$num");//get email #num
   $email = curl_exec($ch);
   if($email === FALSE) {//skip if download failed
   	echo "mail $num download failed\n";
continue;
   }
   if($mime->Decode(Array('Data' => $email), $decoded)) {
if($mime->Analyze($decoded[0], $results)) {
    $subject = $results['Subject'];

    $from = $results['From'][0]['address'];
    $data = isset($results['Data'])?($results['Data']):'';
    $date = isset($results['Date'])?($results['Date']):'';

    $location = '';
    $data_a = explode("\n", $data);

           //DO SOMETHING

     curl_setopt($ch, CURLOPT_NOBODY, 1);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELE');
     curl_setopt($ch, CURLOPT_URL, "$pop_server/$num");//delete email #num
     $del_email = curl_exec($ch);
     echo "dele $del_email $from $subject$location $date\n";

}
   }

   if(--$limit==0)
break;
}
curl_close($ch);
echo "end\n";

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.