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

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

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.