Jump to content
Калькуляторы

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

Вот пример на 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";

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this